Обладнання

Як зібрати своє ядро ​​linux Збираємо ядро ​​Linux. Де завантажити дистрибутив Linux

Як зібрати своє ядро ​​linux  Збираємо ядро ​​Linux.  Де завантажити дистрибутив Linux

Доброго дня, читачі та гості . Протягом минулого посту про , сьогодні хочу розповісти, як зібрати та налаштувати власне ядро.

З минулого посту ми вже знаємо, що ядро Linuxволодіє мінімальними можливостями та підтримкою обладнання, але при необхідності ми можемо розширити можливості ядра за допомогою kernel modules (модулі ядра). Для чого може знадобитися складання чи перескладання власного ядра?Наприклад, для ввімкнення/вимкнення будь-яких нових можливостей, або оновлення старого ядрабільш нове з підтримкою нових можливостей, або просто для дослідів як у нашому прикладі.

Отримання вихідників ядра та підготовка до конфігурування

Можна кількома шляхами отримати вихідники:

    1. Отримати оригінальні архіви коду з The Linux Kernel Archives у вигляді gzip або bzip2 архівів за допомогою команди:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.1.tar.bz2 cp linux-2.6.36.1.tar.bz2 /usr/src/
  1. Отримати вихідники з репозиторіїв дистрибутивів (наприклад: CentOS i386) у вигляді бінарного пакета deb або rpm (src.rpm) з патчами від виробника дистрибутива. Наприклад: kernel-server:/tmp/123# apt-cache search source |






























    linux-patch-lustre - Linux kernel patch for Lustre Filesystem libcorelinux-dev - Foundation Classes, Design Patterns, IPC and Threads libcorelinux-doc - Foundation Classes, Design Patterns, IPC and Threads libcorelinux-examples - Foundation Classes, C and Threads libcorelinuxc2a - Foundation Classes, Design Patterns, IPC and Threads linux-patch-openswan - IPSEC Linux kernel support for Openswan selinux-policy-src - Source of SELinux reference policy for customization user-mode-linux-doc - User Linux (Documentation) linux-patch-xenomai - Linux kernel patches for Xenomai linux-patch-debian-2.6.26 - Debian patches to version 2.6.26 of the Linux kernel linux-source-2.6.26 - Linux kernel source for version2. .26 w ith Debian patches linux-tree-2.6.26 - Linux kernel source tree for building Debian kernel images Print-server:~# apt-get install linux-source-2.6.26 Читання списків пакетів... Готово Побудова дерева залежностей стані... Готово Будуть встановлені такі додаткові пакети: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl gcc-multilib manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc gcc-4.3-multilib libmudflap0-4.3-dev gcc-4.3-doc libgcc1-dbg libgomp1-dbg libmudflap0-dbg kernel-package libqt3-mt-dev make-doc НОВІ пакети, які будуть встановлені: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev linux-source0 встановлено 13 нових пакетів, для видалення відзначено 0 пакетів, та 5 пакетів не оновлено. Необхідно завантажити 50,2 MB/63,2 MB архівів. Після цієї операції обсяг зайнятого дискового простору зросте на 89,4MB. Бажаєте продовжити [Д/н]? y Отримано:1 http://ftp.debian.org lenny/main linux-libc-dev 2.6.26-26 Отримано:2 http://ftp.debian.org lenny/main linux-source-2. 6.26 2.6.26-26 Отримано 50,2MБ за 1min49s (460kБ/c) Вибір раніше не вибраного пакета binutils. (Читання бази даних... на даний момент встановлено 16621 файлів та каталогів.) Розпаковується пакет binutils (з файлу.../binutils_2.18.1~cvs20080103-7_i386.deb)... Вибір раніше не вибраного пакета bzip2. ..... Розпаковується пакет make (з файлу.../archives/make_3.81-5_i386.deb)... Обробляються тригери для man-db... Налаштовується пакет binutils (2.18.1~cvs20080103-7) . .. ..... Налаштовується пакет linux-source-2.6.26 (2.6.26-26) ... Налаштовується пакет make (3.81-5) ... kernel-server:~# ls /usr/src/ linux -source-2.6.26.tar.bz2

Хочу зазначити, що ім'я архіву з вихідними джереламиабо пакета, має приблизно такий вигляд: linux-source-2.6.26або kernel-source-2.6.18.З лістингу другого прикладу, видно, що при установці вихідників з репозиторію, apt нам пропонує встановити й інші супутні пакети, без яких ядро ​​зібрати не вийде.

Отже. Після отримання вихідниківодним із вищевказаних шляхів (копіюванні архіву (у першому випадку) та встановлення пакета (у другому випадку)), ми отримуємо в каталозі /usr/src/- архів з ім'ям, аналогічним linux-source-2.6.26.tar.bz2. Далі нам необхідно розпакувати динний архів командою: tar -xjf linux .tar.bz2. В результаті, отримуємо дерево каталогів вихідних джерел ядра, розташовані в каталозі /usr/src/linux-2.6.36.1/. Також рекомендується створити символьне посилання /usr/src/linux на вказаний вище каталог:

kernel-server:~# cd /usr/src/ kernel-server:/usr/src# ln-s linux-2.6.36.1 linux kernel-server:/usr/src# ls -l lin* lrwxrwxrwx 1 root src 3 16:31 linux -> linux-2.6.36.1 -rw-r--r-- 1 root src 70236745 Гру 3 15:57 linux-2.6.36.1.tar.bz2

Перш ніж приступати до спроби збирання та конфігурування, необхідно переглянути файл Changes, розташований у каталозі Documentation. Він, серед іншого, містить список пакетів, необхідних для збирання ядра, із зазначенням номерів версій. Переконайтеся, що ці пакети встановлені (якщо інсталяція вихідних програм здійснювалася за допомогою пакетного менеджера, то швидше за все потрібні пакети вже встановлені).

У розпакованому дереві підкаталогів міститься файл Makefile. make-файлмістить різні цілі складання для конфігурування опцій ядра, складання ядра та його модулів, установки модулів та складання пакетів RPM або deb. Найсвіжіші версії вихідних джерел ядра дозволяють використовувати make help для отримання короткої довідки для кожної мети. У старіших системах необхідно було звертатися до документації або переглядати make-файл. Нижче показано частину виведення make help:

Kernel-server:/usr/src/linux-2.6.36.1# make help Cleaning targets: clean - Remove most generated files but keep the config and enough build support to build external modules mrproper - Remove all generated files + config + v distclean - mrproper + remove editor backup and patch files Configuration targets: config - Update current config utilising a line-oriented program nconfig - Update current config utilising a ncurses menu based program menuconfig - Update current config utilising a menu based program xconfig - Update

















































.

Далі, якщо з якихось причин на ядро ​​необхідно накласти патч, його слід завантажити заздалегідь і покласти в каталог /usr/src. Якщо патчити ядро ​​не потрібно, можна сміливо переходити до конфігурування. Патчиться ядро ​​так:

Kernel-server:/usr/src/linux-2.6.36# gzip -cd ../patch-2.6.xx.gz | patch -p1 #або Print-server:/usr/src/linux-2.6.36# bzip2 -dc ../patch-2.6.xx.bz2 | patch -p1

Конфігурування

Поточна конфігурація ядра зберігається у файлі .config. Даний файл формується за допомогою однієї з конфігураційних цілей (мета - це, говорячи простою мовою, команда виконується у вигляді make ціль):

Мета config використовує інтерфейс командного рядка для отримання відповідей багато на питання, що стосуються створення або оновлення файлу .config. Імхо, в порівнянні з цілями, що використовують меню - дуже незручна штука.

cloneconfig

Копіювання параметрів поточного ядра у файл.config. Ця мета застаріла і в нових ядрах замінено. (Зручно для додавання нових функція поточного ядра)

Мета menuconfig використовує програму з меню-інтерфейсом, побудовану на базі ncurses, для створення або оновлення файлу .config. Ви повинні тільки відповісти на питання для елементів, які ви хочете змінити. Цей підхід замінив стару мету config. Виконується у вікні терміналу віддалено чи локально.

Ціль nconfigвикористовує програму з меню-інтерфейсом, побудовану на базі ncurses, для створення або оновлення файлу .config. Ця версія заснована на але має більш сучасний зовнішній вигляд. Додана після релізу Linux-ядра 2.6.35. Ви повинні тільки відповісти на питання для елементів, які ви хочете змінити. Виконується у вікні терміналу віддалено чи локально.

Мета xconfig використовує систему графічного меню, засновану на QT front-end, який використовується в KDE desktop.

Мета gconfig використовує систему графічного меню, що базується на GTK front-end, використовуваному в GNOME desktop.

oldconfig

Мета oldconfig дозволяє створити конфігурацію за допомогою існуючого файла.config, створеного раніше або взятого з іншої системи. Наприклад, ви можете скопіювати конфігураційний файл для вашої системи з /lib/modules/$(uname -r)/build/.config /usr/src/linux. Зробивши це, можна використовувати одну з цілей меню конфігурації, щоб у разі потреби внести зміни. Так само при виконанні цієї команди, якщо в новому ядрі додано багато нових можливостей - буде поставлено багато питань щодо налаштування нових параметрів. (Зручно для додавання нових функція поточного ядра)

Повторюю, що список усіх цілей команд можна побачити, ввівши make help.Отже, почнемо конфігурування. Найзручніша для консолі, імхо - .

Після запуску команди, у мене випало страшне повідомлення:

Kernel-server:/usr/src/linux-2.6.36.1# make menuconfig *** Слухайте, щоб публікувати бібліотеки або *** потрібні файли файлів. *** "make menuconfig" потребує ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. *** make: *** Помилка 1 make: *** Помилка 2

Чогось не вистачає, подумав Штірліц (С)... Напевно пакета, що містить ім'я ncursesі якщо це вже libraries, то швидше за все, пакет починається на lib. Я поліз у репозиторій:

Kernel-server:/usr/src/linux-2.6.36.1# apt-cache search ncurses | grep ^lib












libcunit1-ncurses - Unit Testing Library для C (ncurses) libncurses-gst - Ncurses bindings for GNU









































з додаткових libraries для Ruby 1.8 libtexttools-dev - Ada and C++ library for writing console applications libtexttools2.0.5 - Ada and C++ library для writing console applications libncurses-ruby1.8 - ruby ​​. Extension for ncurses C library libncurses-ruby - ruby ​​Extension for ncurses C library lib64ncurses5-dev - developer's libraries for ncurses (64-bit) lib64ncurses5 - shared libraries ging/profiling libraries для ncurses libncurses5-dev - developer"s libra libcurses-ocaml - OCaml bindings for the ncurses library libggi-target-terminfo - General Graphics Interface TermInfo display target libncurses5 - бібліотеки для керування терміналом

Цей рядок: libncurses5-dev - developer's libraries and docs for ncurses мені здалося потрібною. Давайте встановимо:

Kernel-server:/usr/src/linux-2.6.36.1# apt-get install libncurses5-dev Читання списків пакетів... Готово Побудова дерева залежностей Читання інформації про стан... Готово НОВІ пакети, які будуть встановлені: libncurses5-dev оновлено 0, встановлено 1 нових пакетів, для видалення відзначено 0 пакетів, та 5 пакетів не оновлено. Необхідно завантажити 1546kБ архівів. Після цієї операції обсяг зайнятого дискового простору зросте на 6599kB. Отримано:1 http://ftp.debian.org lenny/main libncurses5-dev 5.7+20081213-1 Отримано 1546kБ за 4s (344kБ/c) Вибір раніше не вибраного пакета libncurses5-dev. (Читання бази даних... на даний момент встановлено 18098 файлів та каталогів.) Розпаковується пакет libncurses5-dev (з файлу.../libncurses5-dev_5.7+20081213-1_i386.deb)... ... Налаштовується пакет libncurses5-dev (5.7+20081213-1) ...

Готово, пробуємо :

Ура! Ми бачимо заповітне меню конфігурування ядра. Нижче показано різні опції, що дозволяють включати компоненти в ядро ​​або створювати модулі. Коли опція підсвічена, за допомогою кнопки пробілу можна переміщатися між можливими варіантами для цього компонента. Щоб активувати опцію, натисніть y, щоб відключити n, щоб створити, якщо це можливо, модуль, натисніть m. Вихід із меню: Esc Esc.

  • [*] Компонент буде включено до ядра.
  • Компонент не буде включено до ядра.
  • [M] Компонент буде оформлено як модуля.
  • < >Компонент не буде включений до ядра, але може бути оформлений у вигляді модуля.

Нижче наведу опис основних розділів конфігурування зміню (згодом поповнюватиметься):

Розділ Пареметр Опис
General setup Цей розділ дозволяє додати ідентифікаційний рядок до вашого ядра, а також ряд атрибутів, які не мають відношення до будь-яких розділів, але повинні бути описані.
Enable loadable module support Цей розділ містить опції, що визначають, чи ваше ядро ​​підтримуватиме модулі і чи вони підвантажуватимуться і вивантажуватимуться автоматично. Опцію "Enable loadable module support" слід увімкнути.
Processor type and features Цей розділ містить специфічні для цього типу процесора конфігураційні опції. Тут ви можете вибрати процесор та сімейство процесора, які будуть підтримуватися вашим ядром. Ви можете вмикати або вимикати підтримку ядром різних можливостей, що надаються цим процесором. Переконайтеся, що ви увімкнули підтримку багатопроцесорних систем (symmetric multi-processing support), якщо у системі встановлено більше одного процесора або процесор підтримує технологію hyperthreading. Крім того, для отримання більшої продуктивності графічної підсистеми в системах AGP або PCI відеокартами слід включити підтримку MTRR.
Power management options У цьому розділі наведено опції, що стосуються керування живленням. Особливо вони важливі для ноутбуків. Крім контролю стану живлення, ви зможете знайти там засоби для контролю та моніторингу таких параметрів як температура або стан вентилятора, що охолоджує.
Bus options (PCI etc.) Цей розділ містить опції для комп'ютерних шин, підтримуваних системою, таких як PCI, PCI Express і PC Card. Тут ви можете включити підтримку файлової системи /proc/pci, якою можна користуватися разом зі звичайною командою lspci.
Executable file formats / Emulations Цей розділ містить опції щодо підтримки різних форматів бінарних файлів. Слід увімкнути підтримку "ELF binary". Крім того, можна включити підтримку DOS binaries для запуску їх під DOSEMU, також як і інших бінарних файлів, що підтримуються відповідними wrapper"ами, таких як Java™, Python, Emacs-Lisp і т.д. Нарешті, для 64-бітних систем, що підтримують 32-бітну емуляцію, ви, можливо, захочете включити підтримку 32-бітових програм.
Networking Секція щодо настройок мережі досить велика. Тут можна включити базову підтримку сокетів, мереж TCP/IP, фільтрацію, маршрутизацію та bridging мережевих пакетів, а також підтримку різних протоколів, таких як IPV6, IPX, Appletalk і X.25. Крім того, ви можете включити підтримку wireless, infrared та amateur radio.
Device drivers Цей розділ також дуже великий. Тут можна ввімкнути підтримку великої кількості апаратних пристроїв, включаючи IDE/ATAPI або SCSI диски, або flash-диски. Увімкніть DMA для ваших пристроїв IDE; інакше вони працюватимуть у повільнішій PIO-моді. Якщо ви хочете мати підтримку multiple devices, таких як RAID або LVM, відповідні опції також потрібно ввімкнути. Тут можна також включити підтримку паралельного порту для роботи з принтером через цей інтерфейс. Тут відбувається конфігурування широкого набору мережевих пристроїв для різних мережевих протоколів, які ми конфігурували раніше. Крім того, тут ви знайдете опції підтримки пристроїв аудіо- та відео-захоплення, пристроїв USB та IEEE 1384 (Firewire), а також різноманітних пристроїв апаратного моніторингу. У розділі управління символьними пристроями (Character Devices) ви, можливо, захочете увімкнути підтримку друку через паралельний порт та підтримку direct rendering.
Firmware drivers Цей розділ містить кілька опцій, які стосуються встановлення та оновлення BIOS, таких як використання функцій Dell System Management на деяких системах виробництва Dell.
File systems Цей розділ призначений для конфігурування файлових систем, підтримку яких ви хочете мати у вашому ядрі, скомпіловані у вигляді модулів чи ні. Також ви зможете знайти файлові системи для знімних дискових пристроїв (дискети, CD і DVD пристрої), а також мережевих файлових систем, таких як NFS, SMB або CIFS. Підтримка різних типів розділів та національних кодувань Native Language Support також розміщуються у цьому розділі.
Kernel hacking Цей розділ дозволяє вмикати режим налагодження ядра та вибирати, які додаткові функції будуть увімкнені.
Security options Цей розділ призначений для конфігурації опцій захисту, а також увімкнення та конфігурування SELinux (Security Enhanced Linux).
Cryptographic options У цьому розділі можна налаштувати підтримку різних алгоритмів шифрування, таких як MD4, DES та SHA256.
Library routines Тут можна вказати ряд алгоритмів обчислення контрольних сум (CRC), які будуть включені в ядро ​​або зібрані як модулі.

Я навів дуже короткий опис розділів конфігурування ядра. Саме на вибір налаштувань, я напевно, зроблю окремий пост, бо поточний виріс до великих розмірів. Найкращий опис налаштувань make menuconfig я знайшов тут Gentoo Handbook. Від себе скажу, що логічним буде виконати make oldconfig (тим самим скопіювавши поточний.config встановленої ОС), а потім запустити make menuconfig і відключити всі непотрібні функції (припустимо, я відключив підтримку WiFi, непотрібних мені файлових систем jfs і т.п.). І загалом, я прихильник такої думки, що оптимізувати ядро ​​необхідно в дуже крайніх випадках, коли продуктивність ОС упирається в можливості заліза. Відповідно, зменшивши розмір ядра (відключивши непотрібні модулі, включивши їх до складу ядра + відключивши непотрібні можливості), можна додати у продуктивності 1-2%. А на сучасних серверах, думаю це (переконфігурування ядра) не дуже актуально.

Складання Ядра

Тепер, коли ми налаштували ядро, ми готові до його збирання. Якщо ви не знаєте, який стан дерева для збирання, перш ніж приступати до конфігурування нового ядра, виконайте make clean . Для повного очищення виконайте make mrproper (при цьому - make mrproper - буде видалено файл.config, а також деякі інші файли, які використовуються в процесі збирання).

У ході спроби конфігурування, бажано дати новому ядру спеціальну назву, яка дозволить вам легко його ідентифікувати. Щоб це зробити, необхідно встановити значення Local version і активувати опцію Automatically append version information to the version string у відповідному рядку розділу General setup.

В принципі, для складання ядра не потрібні повноваження root, незважаючи на те, що для установки нового ядраці повноваження необхідні.

Щоб розпочати складання ядра 2.6, необхідно виконати make .

Щоб розпочати складання ядра 2.4, необхідно виконати 3 команди:
make dep
make bzImage
make modules
Перша створює файли необхідних залежностей. Друга збирає ядро. І остання збирає модулі.

Встановлення нового ядра

Після закінчення збирання ядра, його необхідно встановити. Перед встановленням, необхідно виконати make modules_install для встановлення модулів ядра в новий підкаталог /lib/modules. Після встановлення модулів, необхідно виконати make install для встановлення нового ядра та стартового RAM-диска (initial RAM disk) у каталог /boot та оновлення конфігурації завантажувача.

Хочу звернути увагу, що у процесі збирання автоматично створюється необхідний стартовий RAM-диск (initial RAM disk або initrd). Якщо у вас виникне необхідність створити його вручну, це можна зробити за допомогою команди mkinitrd.

Після виконання make install повинен оновитись конфігураційний файл завантажувача. Але у мене він чомусь оновився після команди update-grub.

На цьому й закінчу. Дуже велика стаття вийшла. У найближчому майбутньому постараюся її втиснути.

Постає питання, чому б не навчитися робити те ж саме і з ядром Linux? Причини збирати ядро ​​Linux з вихідних джерел, загалом, ті ж - отримання найсвіжішої версії ядра, термінове застосування security-патчів, оптимізація під конкретні завдання і конкретне залізо, а також бажання взяти участь у розробці ядра, нехай навіть у ролі QA.

Важливо!Дотримання інструкцій з цієї посади може призвести до втрати ваших даних. Робіть бекапи і пам'ятайте, що ви все робите виключно на свій страх і ризик. Усе, що описано нижче, було перевірено на Ubuntu 14.04 LTS. Але на інших версіях Ubuntu, а також інших дистрибутивах Linux, відмінності мають бути мінімальними.

Налаштовуємо завантажувач

Правимо /etc/default/grub приблизно таким чином:

GRUB_DEFAULT =0
#GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT =10
GRUB_DISTRIBUTOR = `lsb_release -i -s 2 > / dev/ null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT ="quiet splash"
GRUB_CMDLINE_LINUX =""

Після редагування говоримо:

sudo update-grub

В результаті, перед завантаженням системи протягом 10 секунд пропонуватиметься вибрати ядро, з яким ви хочете завантажитися. Дуже зручно, якщо ви щось наплутали з конфігурацією ядра та хочете завантажитись з попередньою версією!

Ставимо залежності

Нам знадобляться щонайменше такі пакети:

sudo apt-get install git gcc make bc fakeroot dpkg-dev \
libncurses5-dev libssl-dev

На багатьох системах усі вони, втім, вже будуть присутні.

Отримуємо вихідні

wget https:// www.kernel.org/ pub/ linux/ kernel/ v4.x/ linux-4.6.4.tar.xz
tar --xz -xvf linux-4.6.4.tar.xz
cd linux-4.6.4

Або, якщо вам потрібен найсвіжіший, можна взяти вихідники прямо з Git:

# Mirror: https://github.com/torvalds/linux
git clone "git://git.kernel.org/pub/scm/linux/kernel/git/"\
"torvalds/linux.git"
cd linux

Зважаючи на те, що тега v4.6.4 в Git'і мені знайти не вдалося, релізи ядра Linux оформляються виключно у формі стислих tar-архівів.

Якщо ж замість ванільного ядра ви хотіли б зібрати ядро ​​з патчами від компанії Canonical:

git clone git:// kernel.ubuntu.com/ ubuntu/ ubuntu-trusty.git
cd ubuntu-trusty
git tag | less
git checkout Ubuntu-lts-4.4.0-31.50 _14.04.1

За своїм досвідом скажу, що якщо ви користуєтеся Ubuntu, то можете сміливо використати ванільне ядро. Навряд чи у вас виникнуть із ним якісь проблеми.

Примітка:Цікаво, що з існуючих порівняно популярних Linux дистрибутивів ядро ​​без власних патчів, схоже, використовують тільки Gentoo, Slackware і Arch Linux .

Так чи інакше тепер у вас є вихідники.

Збираємо та встановлюємо ядро

Вибираємо опції, з якими буде зібрано ядро:

make menuconfig

У разі потреби змінюємо налаштування, тиснемо Save, потім Exit. В результаті буде створено файл .config, який містить вибрані нами параметри.

При оновленняядра (ви ж будь-яко вже використовуєте якесь ядро?) зручно взяти конфіг поточного ядра, і виставити новим опціям значення за замовчуванням:

zcat / proc/ config.gz > ./ .config
make olddefconfig

Зрештою, збираємо:

make -j4 bindeb-pkg LOCALVERSION =-custom

Збирається ядро ​​досить довго. На моєму ноутбуці збірка зайняла 1 годину 15 хвилин. Однак із цього часу б пробільша частина витрачається на складання гігантського пакета ядра з символами налагодження. Складання цього пакета можна вимкнути, закоментувавши в конфізі параметр CONFIG_DEBUG_INFO. Тільки врахуйте, що цей пакет потрібний SystemTap та інші корисні інструменти .

Крім самого ядра також можна зібрати документацію:

# ще є `make pdfdocs` та інші, см `make help`
make htmldocs
chromium-browser Documentation/DocBook/index.html

Після закінчення збирання в дочірнімкаталозі бачимо щось на зразок:

linux-firmware-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-headers-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom-dbg_4.4.13-custom-1_amd64.deb
linux-libc-dev_4.4.13-custom-1_amd64.deb

Ставимо всі deb-пакети крім dbg-версії ядра звичайним sudo dpkg -iта перезавантажуємося. Після перезавантаження дивимось на виведення команди uname -a. Переконуємось, що справді завантажилися з новим ядром. Якщо з новим ядром щось не так, у завантажувачі просто вибираємо те, з яким система завантажувалася до цього. Після завантаження зі старим ядром скоріше видаляємо пакети нового ядра, і вуаля система повернулася до колишнього стану.

У середині березня після майже двох місяців розробки та семи release candidate Лінус Торвальдс представив нову версію ядра 4.5. Крім виправлень, у релізі справді багато нового. Зміни торкнулися всіх підсистем - дискову, роботу з пам'яттю, системні та мережеві сервіси, безпеку, і, звичайно ж, додані драйвери для нових пристроїв. Спробуємо розібратися з деякими найцікавішими.

Про дозвіл

Реліз ядра 4.4 вийшов відносно недавно, на початку січня 2016-го, але за цей короткий час накопичилася велика кількість доповнень. І хоча Лінус назвав новий реліз "нормальним", можна побачити, що порівняно з версією 4.4 розмір патчу виріс майже на третину – 70 Мбайт проти 49 Мбайт. У розробці брало участь близько 1528 осіб, які внесли близько 13 тисяч виправлень. У більш ніж 11 тисяч файлів було додано 1 146 727, видалено 854 589 рядків коду. У 4.4 було відповідно 714 106 та 471 010 рядків. Майже половина (45%) всіх змін пов'язана з драйверами пристроїв, 17% торкаються коду апаратних архітектур, 14% стосуються мережевого стека, 4% - файлових систем, і 3% торкнулися внутрішніх підсистем ядра. Найбільшу кількість рядків внесли Даг Ледфорд (Doug Ledford) з Red Hat, який займався в основному чисткою коду (7,7%), Томі Валкейнен (Tomi Valkeinen) з Texas Instruments, який працював над підтримкою субархітектури OMAP (5,3%), три розробники зосередили увагу на драйверах графічних карт AMD: Ерік Хуан (Eric Huang) – 3,3%, Алекс Дойхер (Alex Deucher) – 2,4% та yanyang1 – 1,6%. Лідери по чейнджсетах - Лінус Валлей (Linus Walleij) з Linaro, який реалізував безліч низькорівневих змін, у тому числі до GPIO (2,0%), Арнд Вергман (Arnd Bergmann), який проробив велику роботу для підтримки ARM (1,9%) ), і Лео Кім (Leo Kim), який займався драйвером wilc1000 (1,7%). Як і раніше, багато корпорацій зацікавлені у розвитку ядра. Роботу над версією 4.5 підтримали понад 200 компаній, серед яких Red Hat, Intel, AMD, Texas Instruments, Linaro, Linux Foundation, Samsung, IBM, Google. Більшість з них розвивають підтримку своїх пристроїв та пов'язаних підсистем та інструментів, але, наприклад, Google традиційно вносить дуже багато змін до мережної підсистеми Linux.

Ядро та драйвери

Продовжилося перенесення складного та погано підтримуваного коду, написаного на асемблері (x86/asm) на С, розпочатий ще в 4.0. Тепер ядро ​​можна збирати з параметром -fsanitize=undefined. Сам параметр з'явився два роки тому в GCC 4.9+ і активує режим налагодження UBSan (Undefined Behavior Sanitizer), який детектує невизначену поведінку, властиву мовам C і C++: використання нестатичних змінних до ініціалізації, розподіл на нуль, цілісне переповнення і так далі. Компілятор зазвичай припускає, що такі операції ніколи не відбудуться, а у разі настання результат може бути будь-яким і залежить від самого компілятора. Тепер компілятор виявляє такі ситуації, видає runtime error: (можна відключити -fno-sanitize-recover) і продовжує виконання. За замовчуванням у кожній збірці ОС усі бібліотеки завантажуються у певні адреси, що дозволяє легко реалізувати атаку. Для збільшення безпеки використовується ряд технологій, одна з них - випадкове усунення при виклику mmap(), реалізоване у вигляді ASLR (Address Space Layout Randomization). Вперше технологія ASLR з'явилася в Linux в 2005 році в ядрі 2.6 і видавала для 32-бітних систем 8-бітове зміщення (тобто 256 варіантів адрес, хоча насправді менше), а для x64 – зміщення вже 28-бітне. Для x64 варіантів цілком достатньо, а ось для 32-бітних систем, серед яких Android, цього сьогодні явно мало. Вже відомі експлоїти, які вміють підбирати адресу. В результаті пошуку вирішення проблеми написано патч, що дозволяє встановлювати велику хаотичність для ASLR через /proc/sys/vm/mmap_rnd_bits і /proc/sys/vm/mmap_rnd_compat_bits (у системах x64 для x86-процесів). Для кожної архітектури вказуються мінімальні та максимальні значення з урахуванням доступного адресного простору. Для x86 значення може бути в діапазоні від 8 до 16 біт або 28-32 (для x64-версії). Параметри за замовчуванням можна задавати під час збирання ядра.
Налаштування ASLR у новому ядрі Розширено можливості DRM-драйвера для відеокарт NVIDIA (Nouveau) та Intel (підтримка майбутнього покоління чіпів Kaby Lake), додано підтримку нових звукових карт, USB-контролерів, криптоприскорювачів. Виробники графічних карт Intel і NVIDIA вже давно відмовилися від використання режиму UMS (Userspace Mode Setting) у своїх open source драйверах на користь KMS (Kernel Mode Setting), тепер настала черга драйвера ATI Radeon, в якому прибрано код режиму UMS. З 3.9 можна було його включати параметром DRM_RADEON_UMS або установкою radeon.modeset=0 в GRUB. Тепер залишився лише KMS (Kernel Mode Setting). Це потрібно враховувати, якщо потрібно використовувати старі драйвери або режим UMS (UMS іноді показує більшу продуктивність). У драйвер AMDGPU додана експериментальна підтримка технології динамічного керування живленням PowerPlay, що дозволяє підвищити продуктивність GPU для GPU Tonga та Fiji та інтегрованих Carrizo та Stoney. У режимі PowerPlay GPU запускається в режимі низького енергоспоживання, але у разі зростання навантаження на графічну підсистему автоматично збільшує частоту. За промовчанням PowerPlay вимкнено, для включення слід передати ядру параметр amdgpu.powerplay=1 . Нова версія Media controller API розширює підтримку пристроїв Video4Linux та дозволяє використовувати функціональність мультимедіаконтроллера в інших підсистемах, таких як DVB, ALSA та IIO. У KVM (Kernel-Based Virtual Machine) багато зроблено для підтримки архітектури s390 (тепер вона може використовувати до 248 vCPU), ARM/ARM64 та покращення роботи x86 у Hyper-V.

Установка ядра 4.5 в Ubuntu

Найпростіший спосіб познайомитися з новим ядром – використовувати збірку від Ubuntu Kernel Team. Після всебічного тестування нове ядро ​​потрапляє в ppa:canonical-kernel-team/ppa, але зазвичай на це йде час. $ wget -з http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.5-wily/linux-headers-4.5.0-040500-generic_4.5.0-040500.201603140130_amd64.deb http://kernel .ubuntu.com/~kernel-ppa/mainline/v4.5-wily/linux-headers-4.5.0-040500_4.5.0-040500.201603140130_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline /v4.5-wily/linux-image-4.5.0-040500-generic_4.5.0-040500.201603140130_amd64.deb $ sudo dpkg -i linux*.deb Після перезавантаження можемо працювати.

Підтримка ARM

ARM-комп'ютери використовуються як міні-сервери під певні завдання або як контролери автоматизації, що робить їх дуже популярними і затребуваними. ARM-спільнота Linux за останні п'ять років перетворилася на одне з найбільш активних, провівши колосальну роботу з підтримки 32-розрядних ARM-платформ, що займають серйозну частку ринку, і ця робота завершилася до виходу гілки 4.5. Раніше для кожного ARM-пристрою необхідно було зібрати власне ядро, яке забезпечує підтримку лише певних пристроїв. Але проблема в тому, що пристрої ставали складнішими, з'явилася можливість зміни конфігурації, та й самі користувачі на ARM-пристроях хотіли використовувати звичайні дистрибутиви без зайвих рухів тіла. Але в результаті ми мали кілька сотень варіантів складання ядра, що дуже ускладнює використання Linux. Результатом очищення та рефакторингу великої кількості коду стало можливим включення до ядра коду підтримки ARMv6 та ARMv7, тобто тепер можемо зібрати універсальне ядро, здатне завантажуватись на обох системах. Тут, напевно, треба згадати і про специфікації Device Tree, що просувається останнім часом, що виникла як частина розробок Open Firmware. Device Tree дозволяє конфігурувати обладнання під час завантаження за допомогою спеціальних dts-файлів, що зберігаються в /boot/dtbs, та змінювати установки без перескладання ядра. Використання Device Tree стає обов'язковим для всіх нових розробок ARM і не лише пристроїв. Все це разом дає впевненість, що дистрибутиви Linux у майбутньому можна буде спокійно запускати на будь-якому пристрої ARM. Паралельно Грег Кроу-Хартман (Greg Kroah-Hartman) із Linux Foundation випустив патч, що реалізує подібну можливість для ранніх версій ядра. В arch/arm64 знайдемо код, який забезпечує підтримку нової 64-бітної архітектури ARM (ARMv8). Додані нові функції для всіх популярних архітектур ARM – Allwinner, Amlogic, Samsung, Qualcomm та підтримка нових ARM-плат різних розробників.

Системні послуги

Для доступу до даних прошивок Unified Extensible Firmware Interface (UEFI) в Linux використовується спеціальна псевдофайлова система efivars (налаштовується EFIVAR_FS), яка монтується в /sys/firmware/efi/efivars . У деяких реалізаціях при виконанні команди rm -rf /* видалявся вміст цього каталогу, що призводило до руйнування прошивки. Компанії - розробники пристроїв не вважають це серйозним недоліком, адже ситуація, звичайно, не найпоширеніша, та й навряд чи якомусь користувачеві спаде на думку це перевірити. Тим не менш, проблема є, і письменники вірусів цілком реально можуть скористатися такою можливістю. Тепер в ядрі 4.5 додано спеціальний захист каталогу /sys/firmware/efi/efivars , що не дозволяє видаляти файли всередині.

Продовження доступне лише учасникам

Варіант 1. Приєднайтесь до спільноти «сайт», щоб читати всі матеріали на сайті

Членство у спільноті протягом зазначеного терміну відкриє тобі доступ до ВСІХ матеріалів «Хакера», збільшить особисту накопичувальну знижку та дозволить накопичувати професійний рейтинг Xakep Score!

Давно хотів написати статтю про те, як збирати ядро ​​Linux. І ось цей момент настав.

Власне, навіщо збирати ядро, якщо дистрибутив надає цілком придатне для використання ядро?

Наприклад, для того, щоб користуватися найновішими драйверами та рішеннями, представленими в новому ядрі, коли від дистрибутива доступна лише стара гілка. Ще, наприклад, щоб настроїти його під своє залізо і трохи прискорити роботу. Я зібрав собі 3.11, тому що в ньому знаходиться набір патчів, що покращують роботу з відеокартами ATI, володарем однієї з них я є.

Про складання ядра написано дуже багато статей, тому не буду вдаватися до подробиць, а лише напишу, як я збираю ядро ​​для себе.

Насамперед, потрібно отримати архів з вихідними кодами потрібної версії ядра Linux.

На веб-сайті https://www.kernel.org/ можна завантажити бажану версію. Я описуватиму процес складання та установки на прикладі версії 3.11.0.

Бажано збирати ядро ​​у спеціально створеному для цього каталозі під непривілейованим користувачем. Я компілюю в папці ~src/linux/linux-version

Перед компіляцією варто переконатися, що встановлені всі необхідні для збирання залежності та вільно близько 3ГБ місця у каталозі компіляції.

Ось список пакетів для успішної компіляції (для Debian/Ubuntu):

gcc, make- необхідні інструменти складання та лінковки. Бажано gcc однією з останніх доступних версій.

libncurses5-dev- потрібно для роботи menuconfig

ccache- дозволяє прискорити перескладання

Якщо хочеться скористатися графічним конфігуратором ядра, варто ще встановити пакети для розробки QT, наприклад libqt4-dev, g++, pkg-config.

Lzop, lz4c- якщо цікавлять альтернативні механізми стиснення ядра та initramfs.

Передбачається, що директорією є директорія розпакованого ядра.

Після того, як підготовлено складальне оточення, необхідно згенерувати конфігурацію ядра. Поточну конфігурацію можна переглянути ось так:

Cat /boot/config-`uname-r`

Zcat /proc/config.gz

В принципі, можна використовувати поточний конфіг, відредагувавши його в одній із програм конфігурації. Копіюємо його в директорію, де розпакований архів з ядром і перейменовуємо як .config

Cp /boot/config-`uname-r`.config

Мені подобається xconfig, я знаходжу його найзручнішим.

Make xconfig

Автоматично підвантажується скопійований раніше .configщо служить нам базою для конфігурації. Порад з налаштування ядра темрява, я лише рекомендую вибрати свою версію процесора, відключити драйвера обладнання, якого немає, можна ще вибрати додаткові модулі, такі як zram та алгоритм стиснення, я вибрав lz4 як найшвидший.

Після збереження конфігурації можна приступити до компіляції.

Якщо Вам ліньки конфігурувати ядро ​​вручну, є можливість виконати автоматичне конфігурування, використовуючи інформацію про завантажені модулі: make localmodconfig

Тепер другий головний етап - компіляція ядра та модулів. Виконується в одну команду:

Make -j4 CC="cache gcc" bzImage modules

Де -j4відповідає кількості процесорних ядер у Вашій конфігурації.

Компіляція займе недовго, якщо залізо досить сильне і не використовується дистрибутивний конфіг ядра. На моєму ноутбуці з процесором AMD Phenom P820 і шістьма гігабайтами оперативної пам'яті компіляція займає близько півгодини.

Останній етап - установка ядра та модулів.

Sudo sed -i.bak "s/MODULES=most/MODULES=dep/" /etc/initramfs-tools/initramfs.conf

Це потрібно для того, щоб скоротити розмір файлу initrd, включивши в нього тільки необхідні для завантаження модулі.

Установку також можна виконати однією командою:

Sudo make modules_install install

Або встановити все вручну. Спочатку модулі

Sudo make modules_install

Потім ядро

Version=`awk "NR<=3 {printf "%s.",$NF}" < Makefile | sed "s/\.$//"`

так ми дізнаємось версію ядра з файлу Makefile

Sudo cp arch/`uname -m`/boot/bzImage /boot/vmlinuz-$version sudo cp .config /boot/config-$version sudo cp System.map /boot/System.map-$version sudo update-initramfs - c -k $version sudo update-grub

Насамкінець, додаю скрипт для автоматизації процесу.

Під час зміни конфіга він може поставити кілька запитань, щоб відповісти за замовчуванням, необхідно легко натискати Enter.

Успішної компіляції.

У цьому покроковому посібнику ви дізнаєтеся, як правильно зібрати та встановити ядро ​​гілок >2.6 у сімействі ОС Ubuntu.

Крок 1. Отримання вихідного коду ядра

Вихідники ядра Ubuntu можна отримати двома способами:

    Встановивши архів із репозиторію, з автоматичним накладенням останніх офіційних патчів. При цьому завантажується пакет розміром ~150 Мб у папку. Щоб отримати вихідні джерела ядра, версія якого встановлена ​​на комп'ютері, виконайте команду: apt-get source linux-image-`uname -r`

    Або замість `uname -r` можна вказати конкретну версію з наявних у репозиторії.

Список версій, що є в репозиторії, можна побачити набравши команду: «apt-get source linux-image-» і, не натискаючи Enter , натиснути двічі клавішу Tab .

Не забудьте увімкнути спільний доступ до вихідних записів у репозиторії (Параметри системи → Програми та оновлення → Програмне забезпечення Ubuntu → Вихідний код). З консолі це зробити можна розкоментувавши рядки, що починаються з deb-src у файлі /etc/apt/sources.list, а потім виконати оновлення командою: sudo apt-get update.

    Найсвіжіша версія ядра доступна по git. Розмір пакету, що скачується ~500-800 Мб. git clone git://kernel.ubuntu.com/ubuntu/ubuntu- .git

    Де - ім'я релізу, наприклад:

    Git clone git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git

Інші ядра

Також є ядра, працездатність яких в Ubuntu не гарантується. Наприклад, відома проблема з низкою популярних системних додатків (зокрема драйвера NVidia, VirtualBox), які під час встановлення компілюються під встановлене ядро. Тому для їх встановлення на ядро, нестандартне для даної версії Ubuntu (наприклад, Ubuntu 16.04 йде з ядром 4.4.0), може знадобитися їхня окрема компіляція вручну або спеціальні патчі, а останні версії ядер з kernel.org програма може взагалі не підтримувати.

    Архів із базової версій без патчів, тобто. наприклад, 4.8.0, 4.8.10: sudo apt-get install linux-source

Розпакуйте отриманий архів, використовуючи команди:

Cd ~/ tar -xjf linux-2.6.x.y.tar.bz2

Або у випадку з linux-source:

Cd /usr/src tar -xjf linux-source-2.6.x.y.tar.bz2

Крок 2. Отримання необхідних для збирання пакетів

Цей крок слід виконати, лише якщо ядро ​​збирається на комп'ютері вперше

Виконайте такі команди, щоб встановити основні пакети:

Sudo apt-get update sudo apt-get build-dep linux sudo apt-get install kernel-package

    config- Традиційний спосіб конфігурування. Програма виводить параметри конфігурації по одному, пропонуючи вам встановити для кожного своє значення. Не рекомендується для недосвідчених користувачів.

    oldconfig- файл конфігурації створюється автоматично, виходячи з поточної конфігурації ядра. Рекомендується для початківців.

    defconfig- файл конфігурації створюється автоматично, спираючись на значення за замовчуванням.

    menuconfig- псевдографічний інтерфейс ручної конфігурації, що не вимагає послідовного введення значень параметрів. Рекомендується для використання у терміналі.

    xconfig- графічний (X) інтерфейс ручної конфігурації, що не вимагає послідовного введення значень параметрів.

    gconfig- графічний (GTK+) інтерфейс ручної конфігурації, що не вимагає послідовного введення значень параметрів. Рекомендується для використання у середовищі GNOME.

    localmodconfig- Файл конфігурації, що створюється автоматично, в який включається тільки те, що потрібно даному конкретному пристрої. При виклику цієї команди більшість ядра буде замодулирована

Якщо ви хочете використовувати config, oldconfig, defconfig, localmodconfigабо localyesconfigВам більше не потрібні додаткові пакети. У випадку з трьома варіантами необхідно встановити також додаткові пакети.

menuconfigвиконайте наступну команду:

Sudo apt-get install libncurses5-dev

Для встановлення пакетів, необхідних для використання gconfigвиконайте наступну команду:

Sudo apt-get install libgtk2.0-dev libglib2.0-dev libglade2-dev

Для встановлення пакетів, необхідних для використання xconfigвиконайте наступну команду:

До Ubuntu 12.04: sudo apt-get install qt3-dev-tools libqt3-mt-dev

Sudo apt-get install libqt4-dev

Крок 3. Застосування патчів

Цей крок не є обов'язковим.

Офіційні патчі вже накладені на вихідні, якщо ядро ​​виходило описаною вище командою:

Apt-get source linux-image-`uname -r`

Якщо ви ніколи раніше не застосовували патчів до вихідного коду, то виконайте наступну команду:

Sudo apt-get install patch

Ця команда встановить програму patch, необхідну для, як можна здогадатися, застосування патчів. Завантажте файл патча в папку, куди ви розпакували ядро. Це може бути або архівний файл (наприклад, Bzip2 або Gzip), або несжатий patch-файл.

На даний момент мається на увазі, що ви вже зберегли файл у ту папку, куди раніше розпакували ядро, і встановили програму patch.
Якщо завантажений файл був у форматі Gzip (*.gz), тоді виконайте наступну команду для розпакування вмісту архіву:

Gunzip patch-2.6.x.y.gz

Якщо завантажений файл був у форматі Bzip2 (*.bz2), тоді виконайте наступну команду для розпакування вмісту архіву:

Bunzip2 patch-2.6.x.y.bz2

де 2.6.x.y – версія патча ядра. Відповідні команди розпакують файл патча у папку з вихідним кодом ядра. Перш ніж застосувати патч, необхідно переконатися, що він запрацює без помилок. Для цього виконайте команду:

Patch -p1 -i patch-2.6.x.y --dry-run

де 2.6.x.y – версія патча ядра. Ця команда зімітує застосування патчу, не змінюючи файли.

Якщо за її виконанні не виникне помилок, зміни можна сміливо впроваджувати у самі файли. Для цього виконайте команду:

Patch-p1-i patch-2.6.x.y

де 2.6.x.y – версія патча ядра. Якщо не було жодних помилок, значить до вихідного коду успішно застосовано патч.

Увага!Перш ніж використовувати патч, проведіть наступні дії: 1. Завантажте з http://www.kernel.org патч тієї ж версії, що й ваших вихідних. 2. Виконайте наведену нижче команду: patch -p1 -R

де 2.6.x.y - версія патча та ваших вихідників

Крок 4. Конфігурація майбутнього збирання ядра

Перейдіть до папки, куди ви розпакували ядро, виконавши команду

Cd ~/linux-2.6.x.y

де 2.6.x.y – версія завантаженого вами ядра.

На даний момент ви вже повинні були визначитися з методом конфігурації ядра (якщо ні, то ознайомтеся з ними в розділі «Отримання необхідних для збирання пакетів». Залежно від цього виконайте наступну команду для запуску обраного вами способу конфігурації:

    config- Традиційний спосіб конфігурування. Програма виводить параметри конфігурації по одному, пропонуючи вам встановити для кожного своє значення. Викликається командою make config

    oldconfig- файл конфігурації створюється автоматично, виходячи з поточної конфігурації ядра. Рекомендується для початківців. Викликається командою make oldconfig

    defconfig- файл конфігурації створюється автоматично, спираючись на значення за замовчуванням для даної конкретної архітектури. Викликається командою make defconfig

    menuconfig- псевдографічний інтерфейс ручної конфігурації, що не вимагає послідовного введення значень параметрів. Рекомендується для використання у терміналі. Виклик: make menuconfig

    gconfigі xconfig- графічні конфігуратори для ручного налаштування. Виклик: make gconfig

    Make xconfig

    відповідно

    localmodconfigі localyesconfig- Автоматичні конфігуратори. Конфіг створюється на основі викликаних в даний момент модулів та запущеного ядра. Різниця між цими двома конфігураторами у кількості модулів. У першому випадку їх буде не менше 50% ядра, а у другому не більше 2 модулів. Виклик: make localmodconfig

    Make localyesconfig

    відповідно

Після виклику програма конфігурації буде запущена. Виконайте необхідні налаштування відповідно до ваших потреб, збережіть файл конфігурації та переходьте до наступного кроку.

Крок 5. Складання ядра

Отже, приготування завершено. Тепер можна запустити процес збирання ядра. Щоб це зробити, виконайте команду:

Fakeroot make-kpkg -j 5 --initrd --append-to-version=-custom kernel_image kernel_headers #-j<количество ядер процессора>+1

Складання ядра може тривати від 20 хвилин до декількох годин залежно від конфігурації ядра та технічних параметрів комп'ютера. Складання при багатодерному процесорі може бути в кілька разів швидше

Крок 6. Встановлення образів та заголовків ядра

Коли складання ядра добігає кінця, у вашій домашній папці з'являться два deb-пакети. Їх і потрібно встановити. Для цього виконайте команди:

Cd ~/ sudo dpkg -i linux-image-2.6.x.y-custom_2.6.x.y-custom-10.00.Custom_arc.deb sudo dpkg -i linux-headers-2.6.x.y-custom_2.6.x.y-custom-10.00. Custom_arc.deb

де 2.6.x.y – версія зібраного ядра, arc – архітектура процесора (i386 – 32-біт, amd64 – 64-біт).
Якщо ви не знаєте точної назви пакета, виведіть список файлів у домашньому каталозі командою

і знайдіть ці два пакети.

Крок 7. Генерація початкового диска RAM

Для коректної роботи Ubuntu вимагає наявності початкового RAM-диска. Щоб створити його, виконайте команду:

Sudo update-initramfs -c -k 2.6.x.y-custom

де 2.6.x.y – версія зібраного ядра.

Крок 8. Оновлення конфігурації завантажувача GRUB

Щоб нова версія ядра була доступна для вибору під час завантаження комп'ютера, виконайте таку команду:

Sudo update-grub

Файл menu.lst (для GRUB версії 1) або grub.cfg (для GRUB версії 2) оновиться відповідно до наявності встановлених операційних систем та образів ядер.

Крок 9. Перевірка ядра

Складання та встановлення ядра успішно виконані! Тепер перезавантажте комп'ютер і спробуйте завантажити систему з новим ядром. Щоб переконатися, що система запущена з новим ядром, виконайте команду

Uname -r

Вона виведе на екран версію ядра, що використовується.

Якщо все зроблено правильно, ви можете видалити архіви з вихідним кодом і весь каталог linux-2.6.x.y у вашій домашній папці. Це звільнить близько 5 ГБ на вашому жорсткому диску (розмір простору, що звільняється, залежить від параметрів складання).

На цьому процес складання та встановлення завершено, вітаю!