Огляд¶
У цьому посібнику ми розповімо про процес отримання дерева вихідних кодів ядра, його налаштування, компіляції, встановлення та завантаження.
Перезбірка ядра не рекомендується та не підтримується для Rocky Linux. Перш ніж намагатися зібрати власне ядро, будь ласка, врахуйте наступне:
* Чи доступна необхідна вам функція, якщо встановити модуль ядра з elrepo? * Чи доступні необхідні вам функції як окремий модуль від самого ядра? * Rocky Linux і більшість інших похідних EL були розроблені, щоб функціонувати як повне середовище. Заміна критичних компонентів може вплинути на роботу системи. * Більшості користувачів більше не потрібно створювати своє ядро. Вам може знадобитися просто модуль/драйвер ядра або, можливо, створити власний модуль ядра (kmod/dkms)
Як останнє попередження: якщо ви зламали ядро, ви несете відповідальність за вирішення проблем у вашій системі.
Ядро¶
Найчастіше, коли люди кажуть linux, вони зазвичай мають на увазі «дистрибутив Linux» – наприклад, Rocky Linux та Debian – це типи дистрибутивів Linux. Дистрибутив містить усе необхідне для існування Linux як функціональної операційної системи. Дистрибутиви використовують код із різних проектів з відкритим кодом, які не залежать від Linux.
Linux - це ядро. Ядро лежить в основі [операційної системи].
Єдине, що є більш фундаментальним, ніж ядро, це апаратне забезпечення системи. Хоча ядро є невеликою частиною повного дистрибутива Linux, воно є найважливішим елементом. Якщо ядро дає збій або виходить з ладу, решта системи йде разом з ним.
Вихідний код ядра¶
Дистрибутив Rocky Linux має вихідний код конкретної версії ядра, який він підтримує, доступний у тій чи іншій формі. Вони можуть бути у формі скомпільованого бінарного файлу (*.src.rpm), RPM-файлу з вихідним кодом (*.srpm) або подібного.
Якщо вам потрібно завантажити іншу (можливо, новішу) версію, відмінну від тієї, яку надає ваш конкретний дистрибутив Rocky Linux, першим місцем, де потрібно шукати вихідний код, є офіційний веб-сайт ядра:
На цьому сайті міститься список веб-сайтів, які віддзеркалюють джерело ядра, а також безліч іншого програмного забезпечення з відкритим кодом, дистрибутивів і утиліт загального призначення.
Список дзеркал ведеться за адресою:
Підказка
Більшу частину завантаження, налаштування та компіляції ядра Linux, виконаної в наступних розділах, може/повинен виконувати непривілейований користувач. Однак останні кроки, які вимагають фактичного встановлення або зміни системних файлів і двійкових файлів, потрібно виконувати з підвищеними привілеями.
Ми можемо виконувати більшу частину роботи як непривілейований користувач, оскільки ми будемо використовувати спеціальну опцію побудови ядра, яка дозволяє нам вказати спеціальний робочий або вихідний каталог. Зокрема, ми будемо використовувати параметр O=~/build/kernel для всіх відповідних викликів.
Де ~/build/kernel еквівалентно /home/$USER/build/kernel або $HOME/build/kernel
Версії ядра та правила іменування¶
Перелік доступних ядер на веб-сайті міститиме папки для v1.0, v2.5, v2.6, v3.0, v3.x, v4.x, v5.x, v6.x тощо. Перш ніж дотримуватися свого природного бажання отримати останню версію, переконайтеся, що ви розумієте, як працює система керування версіями ядра Linux.
Поточна конвенція полягає в тому, щоб називати та нумерувати основні нові випуски ядра як «Linux 5.x» (також званий мініатюрними або основними ядрами). Таким чином, першою з цієї серії буде версія Linux 5.0 (така ж, як 5.0.0), наступною буде версія Linux 5.1 (така ж, як 5.1.0), за нею буде версія Linux 5.2 і так далі.
Будь-які незначні зміни чи оновлення в кожній основній версії випуску буде відображено з кроком до третьої цифри. Їх зазвичай називають стабільними точковими випусками. Таким чином, наступним стабільним випуском для ядра серії 5.0.0 буде версія Linux 5.0.1, за якою піде версія 5.0.2 і так далі. Інший спосіб сказати це, наприклад, сказати, що версія Linux 5.0.4 є четвертим стабільним випуском на основі серії Linux 5.0.0.
Встановлення необхідних інструментів і бібліотек¶
Поширеним джерелом збою, що виникає під час процесу збирання ядра, може бути відсутність усього необхідного програмного забезпечення для компіляції та створення основного ядра Linux. Відсутні інструменти та бібліотеки можна встановити за допомогою менеджера пакетів DNF у дистрибутиві Rocky Linux. Ми подбаємо про це в цьому розділі.
-
У дистрибутиві Rocky Linux ви можете швидко встановити більшість необхідних інструментів розробки, виконавши цю команду:
sudo dnf -y groupinstall 'C Development Tools and Libraries'
Якщо ви отримуєте повідомлення «Module or Group 'C Development Tools and Libraries' is not available.». помилка, наведена нижче команда еквівалентна наведеній вище:
```bash
sudo dnf -y groupinstall 'Development Tools'
```
-
Деякі інші бібліотеки, файли заголовків і програми також можна отримати, встановивши наступні пакети. Впишіть:
sudo dnf -y install ncurses-devel openssl-devel elfutils-libelf-devel python3 -
Далі нам потрібні інші утиліти, доступні лише в деяких підтримуваних сторонніх сховищах. Одним із таких сховищ є репозиторій Powertools. Давайте увімкнемо це репо в нашій системі Rocky. Впишіть:
sudo dnf config-manager --set-enabled powertools -
Нарешті, давайте встановимо один із необхідних пакетів зі сховища Powertool. Впишіть:
sudo dnf -y install dwarves
Ось і все, що стосується попередніх пакетів, необхідних для фактичного складання ядра!
Завантаження та розпакування ядра Linux¶
Версія ядра, яку ми збираємося створити в наступному розділі, це версія 6.5.7, яка доступна за адресою:
www.kernel.org/pub/linux/kernel/v6.x/linux-6.5.7.tar.xz
Почнемо процес.
-
Спочатку завантажте вихідний код ядра у ваш поточний робочий каталог за допомогою наступної команди
curl. Впишіть:curl -L -o linux-6.5.7.tar.xz \ https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.5.7.tar.xz -
Вихідний код ядра, який ви завантажуєте з Інтернету, — це файл, стиснутий і збережений у tar. Тому вам потрібно розпакувати та розархівувати вихідний файл, щоб використовувати джерело.
Переконайтеся, що ви перебуваєте в каталозі, куди завантажуєте архів ядра. Використовуйте команду tar, щоб розпакувати та розпакувати файл, виконавши:
```bash
tar xvJf linux-6.*.tar.xz
```
Створення ядра¶
У цьому розділі розглядається процес налаштування та створення ядра. Це контрастує з операційними системами на базі macOS або Windows, які постачаються попередньо налаштованими та містять підтримку багатьох функцій, які ви можете чи не хочете.
Філософія дизайну Linux дозволяє окремим особам вибирати важливі частини ядра. Цей індивідуальний дизайн дозволяє скоротити список функцій, щоб Linux міг працювати якомога ефективніше.
Це також одна з причин, чому можна налаштувати Linux для роботи в різних установках апаратного забезпечення, від систем низького класу до вбудованих систем і систем високого класу.
Для створення ядра необхідні два основні кроки:
- configuring
- compiling
Першим кроком у створенні ядра є налаштування його функцій. Зазвичай список бажаних функцій базуватиметься на апаратному забезпеченні, яке вам потрібно підтримувати. Це, звичайно, означає, що вам знадобиться список цього обладнання.
У системі, яка вже працює під керуванням Linux, ви можете виконувати такі команди, як – lspci, lshw тощо, щоб показати детальну інформацію про точну конфігурацію обладнання у вашій системі. У дистрибутивах на основі RPM ці утиліти надаються пакетами pciutils*.rpm та lshw*.rpm.
Краще розуміння того, що являє собою базове апаратне забезпечення, може допомогти вам краще визначити, що вам потрібно у вашому спеціальному ядрі. Ви готові почати налаштування ядра.
Дезінфекція архітектурного середовища¶
Ми можемо почати фактичну конфігурацію з приблизного уявлення про типи обладнання та функції, які має підтримувати наше нове ядро. Але спочатку трохи довідкової інформації.
Дерево вихідних кодів ядра Linux містить кілька файлів під назвою Makefile (makefile — це просто текстовий файл із директивами, який також описує зв’язки між файлами в програмі).
Ці makefiles допомагають склеїти разом тисячі інших файлів, які складають джерело ядра. Для нас тут важливіше те, що make-файли також містять цілі. Цілі — це команди або директиви, які виконує програма make.
попередження: уникайте непотрібних оновлень ядра
Майте на увазі, що якщо у вас є робоча система, яка є стабільною та добре працює, немає причин оновлювати ядро, якщо для вас не виконується одна з цих умов:
- Виправлення безпеки або помилки впливає на вашу систему та має бути застосоване
- Вам потрібна конкретна нова функція в стабільному випуску
У разі виправлення системи безпеки вирішіть, чи впливає ризик на вас. Наприклад, якщо проблему безпеки виявлено в драйвері пристрою, який ви не використовуєте, можливо, немає причин для оновлення. У разі випуску виправлення помилок уважно прочитайте примітки до випуску та вирішіть, чи справді помилки стосуються вас — якщо у вас стабільна система, оновлювати ядро латками, які ви ніколи не використовуєте, може бути безглуздим.
У виробничих системах ядро не слід просто оновлювати, щоб отримати «останнє ядро»; у вас повинна бути вагома причина для оновлення.
Файл Makefile у корені дерева вихідних кодів ядра містить конкретні цілі, які можна використовувати для підготовки середовища збирання ядра, налаштування ядра, компіляції ядра, встановлення ядра тощо. Деякі цілі обговорюються більш детально тут:
make mrproper-
Ця ціль очищає середовище збірки від будь-яких застарілих файлів та залежностей, які могли залишитися від попередньої збірки ядра. Усі попередні конфігурації ядра буде очищено (видалено) із середовища збірки.
make clean-
Ця ціль не виконує свою роботу так ретельно, як ціль mrproper. Він видаляє лише більшість створених файлів. Він не видаляє файл конфігурації ядра (.config).
make menuconfig-
Ця ціль викликає інтерфейс текстового редактора з меню, списками параметрів і текстовими діалоговими вікнами для налаштування ядра.
make xconfig-
Цей інструмент/ціль налаштування ядра на основі графічного інтерфейсу спирається на бібліотеки графічної розробки Qt. Програми на основі KDE/Plasma використовують ці бібліотеки.
make gconfig-
Це також інструмент/ціль налаштування ядра на основі графічного інтерфейсу, але він спирається на інструментарій GTK+. Цей набір інструментів GTK активно використовується в настільному світі GNOME.
make olddefconfig-
Ця мета використовує наявний файл .config у поточному робочому каталозі, оновлює залежності та автоматично встановлює для нових символів значення за замовчуванням.
make help-
Ця мета покаже вам усі можливі цілі та слугуватиме системою швидкої онлайн-довідки.
У цьому розділі ми будемо використовувати лише одну з цілей для налаштування ядра. Зокрема, ми будемо використовувати команду make menuconfig. Редактор конфігурації ядра menuconfig — це проста і популярна текстова утиліта налаштування, яка містить меню, списки перемикачів і діалогові вікна.
Він має простий і зрозумілий інтерфейс, яким можна легко керувати за допомогою клавіатури, і він майже інтуїтивно зрозумілий у використанні.
Нам потрібно перейти (cd) до каталогу з вихідним кодом ядра, після чого ми можемо розпочати налаштування ядра.
Але перед початком фактичної конфігурації ядра вам слід очистити (підготувати) середовище збірки ядра за допомогою команди make mrproper:
cd linux-6.*
make O=~/build/kernel mrproper
Конфігурація ядра¶
Далі ми почнемо налаштовувати ядро серії Linux 6.*. Щоб дослідити деякі нутрощі цього процесу, ми ввімкнемо підтримку функції, яку будемо вважати обов’язковою в системі. Коли ви зрозумієте, як це працює, ви можете застосувати ту саму процедуру, щоб додати підтримку будь-якої нової функції ядра, яку ви хочете. Зокрема, ми ввімкнемо підтримку файлової системи NTFS у нашому спеціальному ядрі.
Більшість сучасних дистрибутивів Linux постачаються з файлом конфігурації ядра для запущеного ядра, доступним у локальній файловій системі у вигляді стисненого або звичайного файлу. У нашій системі Rocky цей файл знаходиться в каталозі /boot і зазвичай має назву щось на кшталт config-*.
У файлі конфігурації перелічено параметри та функції, активовані для конкретного ядра, яке він представляє. Конфігураційний файл, подібний до цього, ми прагнемо створити в процесі налаштування ядра. Єдина відмінність між файлом, який ми створимо, і готовим файлом полягає в тому, що ми додамо до нашого незначні налаштування.
Підказка
Використання відомого попередньо існуючого файлу конфігурації як основи для створення нашого спеціального файлу допомагає гарантувати, що ми не витрачаємо надто багато часу на дублювання зусиль, які інші люди вже доклали, щоб знайти, що працює, а що ні!
Наступні кроки описують, як налаштувати ядро. Ми будемо використовувати текстову утиліту конфігурації ядра, яка дозволить вам слідкувати за вашим терміналом, незалежно від того, використовуєте ви робоче середовище GUI чи ні.
-
Для початку ми скопіюємо та перейменуємо існуючий файл конфігурації з каталогу
/bootу наше середовище збирання ядра:cp /boot/config-`uname -r` ~/build/kernel/.config
Тут ми використовуємо uname -r, щоб отримати файл конфігурації для працюючого ядра. Команда uname -r виводить версію запущеного ядра. Його використання допомагає гарантувати, що ми отримуємо саме ту версію, яку нам потрібно, на випадок наявності інших версій.
!!! NOTE "Примітка"
```
Редактор конфігурації ядра Linux починає явно шукати та генерувати файл з назвою `.config` (вимовляється «крапка конфіг») у корені дерева вихідних кодів ядра. Цей файл прихований.
```
-
Запустіть утиліту налаштування графічного ядра:
make O=~/build/kernel menuconfig
З’явиться екран, схожий на цей:

Екран конфігурації ядра, що з’являється, поділений приблизно на три області. У верхній частині показано корисну інформацію, комбінації клавіш і легенди, які допоможуть вам орієнтуватися в програмі. Основна частина екрана показує розширюваний деревовидний список загальних настроюваних параметрів ядра. Ви можете детальніше перейти до елементів зі стрілками в батьківському меню, щоб переглянути та/або налаштувати підменю (або дочірні) елементи. Нарешті, у нижній частині екрана відображаються дії/параметри, які користувач може вибрати.
- Далі ми додамо підтримку NTFS у наше спеціальне ядро для демонстраційних цілей.
Перебуваючи на головному екрані конфігурації, використовуйте клавіші зі стрілками, щоб перейти та виділити пункт Файлові системи. Вибравши файлові системи, натисніть enter, щоб переглянути підменю або дочірні елементи для файлових систем.
У розділі «Файлові системи» використовуйте клавіші зі стрілками, щоб перейти до файлових систем DOS/FAT/NT. Натисніть Enter, щоб переглянути дочірні елементи для файлових систем DOS/FAT/NT.
- У розділі файлових систем DOS/FAT/NT перейдіть до пункту підтримки файлової системи NTFS.
Введіть ++M++ (великі літери), щоб увімкнути модулі для підтримки файлової системи NTFS.
Використовуйте клавіші зі стрілками, щоб перейти вниз до підтримки запису NTFS (New), а потім натисніть y, щоб включити її.
Використовуйте клавіші зі стрілками, щоб перейти вниз до підтримки запису в NTFS, і натисніть Y, щоб включити її.
Коли ви закінчите, поруч із кожним параметром має з’явитися літера M або символ зірочки (*), як показано тут:

!!! tip "Підказка"
Для кожного настроюваного параметра в утиліті налаштування ядра порожні кутові дужки <> вказують на те, що відповідну функцію вимкнено. Літера `M` у кутових дужках, <M>, вказує на те, що функцію буде скомпільовано як модуль.
Символ зірочки в кутових дужках, <\*>, вказує на те, що підтримка цієї функції буде безпосередньо вбудована в ядро. Зазвичай ви можете перемикати всі можливі параметри за допомогою пробілу на клавіатурі.
-
Поверніться до головного екрана файлових систем, двічі натиснувши клавішу esc на клавіатурі на екрані файлових систем DOS/FAT/NT. Поверніться до головного екрана налаштування ядра, двічі натиснувши esc на клавіатурі.
-
Зрештою, збережіть ваші зміни у файлі .config у корені дерева вихідних кодів ядра та вийдіть із програми конфігурації ядра після збереження файлу, двічі натиснувши esc на клавіатурі.
-
З’явиться діалогове вікно з пропозицією зберегти нову конфігурацію. Переконайтеся, що вибрано Yes, а потім натисніть enter.
-
Після завершення роботи утиліти конфігурації ядра ви повернетеся до своєї оболонки всередині дерева вихідних кодів ядра. Ви майже готові до створення свого ядра!
-
Нам потрібно виконати ще кілька налаштувань нашого дистрибутива Rocky. Впишіть:
sed -ri '/CONFIG_SYSTEM_TRUSTED_KEYS/s/=.+/=""/g' ~/build/kernel/.config
!!! tip "Підказка"
Щоб переглянути результати деяких змін, внесених за допомогою інструмента menuconfig, скористайтеся утилітою grep для перегляду безпосередньо збереженого файлу .config. Наприклад, щоб переглянути вплив підтримки файлової системи NTFS, яку ми ввімкнули раніше, введіть таку команду:
` $ grep NTFS ~/build/kernel/.config CONFIG_NTFS_FS=m CONFIG_NTFS_DEBUG=y CONFIG_NTFS_RW=y `
!!! NOTE "Коротка примітка про модулі ядра"
```
Підтримка завантажуваних модулів — це функція ядра Linux, яка дозволяє динамічне завантаження (або видалення) модулів ядра.
Модулі ядра — це фрагменти скомпільованого коду, які можна динамічно вставляти в запущене ядро, а не вбудовувати в нього постійно. Таким чином, можна вмикати функції, які не часто використовуються, але вони не займатимуть місце в пам'яті, коли не використовуються.
На щастя, ядро Linux може автоматично визначати, що і коли завантажувати. Звичайно, не кожну функцію можна компілювати як модуль. Ядро повинно знати кілька речей, перш ніж воно зможе завантажувати та вивантажувати модулі, наприклад, як отримати доступ до жорсткого диска та проаналізувати файлову систему, де зберігаються завантажувані модулі. Деякі модулі ядра також зазвичай називають драйверами.
```
Компіляція ядра¶
У попередньому розділі ми розповіли про створення файлу конфігурації для спеціального ядра, яке ми хочемо створити. У цьому розділі ми виконаємо фактичну збірку ядра. Але перш ніж це зробити, ми додамо одну простішу настройку до всього процесу.
Останнім налаштуванням буде додавання додаткової інформації, яка використовується в остаточній назві нашого ядра. Це допоможе нам відрізнити це ядро від будь-якого іншого ядра з таким же номером версії. Ми додамо тег «custom» до інформації про версію ядра. Це можна зробити шляхом редагування основного Makefile і додавання потрібного тегу до змінної EXTRAVERSION.
Етап компіляції процесу збирання ядра, безумовно, найпростіший, але він також займає найбільше часу. Все, що потрібно на цьому етапі, це просто виконати команду make, яка потім автоматично згенерує та вирішить будь-які проблеми залежностей, скомпілює саме ядро та скомпілює будь-які функції (або драйвери), які були активовані як завантажувані модулі.
Через велику кількість коду, який потрібно скомпілювати, будьте готові почекати щонайменше кілька хвилин, залежно від обчислювальної потужності вашої системи. Давайте розглянемо конкретні кроки, необхідні для компіляції вашого нового ядра.
-
По-перше, ми додамо додаткову частину до ідентифікаційного рядка для ядра, яке збираємося створити. Перебуваючи в корені дерева вихідних кодів ядра, ми скористаємося утилітою
sedдля редагування Makefile на місці. Змінна, яку ми хочемо змінити, знаходиться близько до верхньої частини файлу. Ми хочемо змінити рядок у файлі, який виглядає так:EXTRAVERSION =
На такий:
```bash
EXTRAVERSION = -custom
```
Використайте наступну команду sed, щоб внести зміни. Впишіть:
```bash
sed -i 's/^EXTRAVERSION.*/EXTRAVERSION = -custom/' Makefile
```
Звичайно, ви можете використовувати будь-який текстовий редактор, який вам зручний, щоб внести зміни. Тільки не забудьте зберегти зміни у файлі!
-
Передайте ціль kernelversion команді make, щоб переглянути повну версію ядра, яку ви щойно налаштували:
make O=~/build/kernel kernelversion
!!! Tip "Порада"
```
Ви можете скористатися всією цією додатковою обчислювальною потужністю (процесорами, ядрами тощо) на більшості сучасних систем і значно пришвидшити операції, що ресурсомісткі для процесора, такі як компіляція ядра. Для цього ви можете передати команді make параметр, який вказує кількість завдань, що виконуються одночасно. Зазначена кількість завдань потім розподіляється та виконується одночасно на кожному ядрі процесора. Синтаксис команди такий:
```bash
make -j N
```
де N – кількість завдань, що виконуються одночасно. Наприклад, якщо у вас є процесор з восьми (8) ядрами, ви можете ввести:
```bash
make -j 8
```
```
-
Єдина команда, яка потрібна тут для компіляції ядра, це команда make:
$ make O=~/build/kernel make[1]: Entering directory '/home/super/build/kernel' SYNC include/config/auto.conf.cmd GEN Makefile HOSTCC scripts/kconfig/conf.o HOSTLD scripts/kconfig/conf GEN Makefile ...<OUTPUT TRUNCATED>… LD [M] sound/usb/usx2y/snd-usb-usx2y.ko LD [M] sound/x86/snd-hdmi-lpe-audio.ko LD [M] sound/xen/snd_xen_front.ko LD [M] virt/lib/irqbypass.ko make[1]: Leaving directory '/home/super/build/kernel' -
Кінцевий продукт цієї команди (тобто ядро) стоїть і чекає на шляху:
~/build/kernel/arch/x86/boot/bzImage -
Нам потрібно встановити модулі, оскільки ми скомпілювали частини ядра як модулі (наприклад, модуль NTFS). Введіть наступне:
sudo make O=~/build/kernel modules_install
У нашій системі Rocky ця команда встановить усі скомпільовані модулі ядра в каталог /lib/modules/<new_kernel-version>. У цьому прикладі цей шлях буде перетворено на /lib/modules/6.5.7-custom/. Це шлях, з якого ядро буде завантажувати всі завантажувані модулі за потреби.
!!! tip "Підказка"
Розмір модулів ядра, встановлених за допомогою `make modules_install`, може бути досить значним, оскільки модулі містять символи налагодження. В результаті ви можете легко отримати каталог `/lib/modules/6.5.7-custom/` розміром майже 5 ГБ!
У цьому посібнику ми уникаємо такого великого розміру, додавши опцію `INSTALL_MOD_STRIP=1` у наш виклик `make modules_install`. Ви можете зменшити загальний розмір на порядки (наприклад, менше ніж 200 МБ!!), видаливши ці символи налагодження.
Це можна зробити, додавши опцію `INSTALL_MOD_STRIP=1` до команди `make modules_install`.
Встановлення ядра¶
Якщо припустити, що у вас є ПК і ви працюєте в каталозі ~/build/kernel/, скомпільоване ядро, створене в попередній вправі, буде розташовано в цьому шляху - <kernel- build-dir>/arch/x86/boot/bzImage або, якщо бути точним, у нашому прикладі ~/build/kernel/arch/x86/boot/bzImage.
Відповідний файл карти для цього буде розташований за адресою ~/build/kernel/System.map. На етапі встановлення вам знадобляться обидва файли.
Файл System.map корисний, коли ядро поводиться неправильно та генерує повідомлення "Oops". Повідомлення «Oops» генерується під час деяких помилок ядра через помилки ядра або несправне обладнання.
Ця помилка схожа на синій екран смерті (BSOD) у Microsoft Windows. Ці повідомлення містять багато деталей про поточний стан системи, включаючи кілька шістнадцяткових чисел.
System.map дозволяє Linux перетворювати ці шістнадцяткові числа на читабельні імена, що спрощує налагодження. Хоча це в основному на користь розробників, це може бути зручно під час повідомлення про проблему.
Давайте розглянемо кроки, необхідні для встановлення нового образу ядра.
-
Перебуваючи в кореневому каталозі збирання ядра, скопіюйте та перейменуйте файл
bzImageу каталог/boot:sudo cp ~/build/kernel/arch/x86/boot/bzImage \ /boot/vmlinuz-<kernel-version>
Тут <kernel-version> — це номер версії ядра. Ім'я файлу для прикладу ядра, яке ми використовуємо в цьому посібнику, — vmlinuz-6.5.7-custom. Отже, ось точна команда для цього прикладу:
```bash
sudo cp ~/build/kernel/arch/x86/boot/bzImage \
/boot/vmlinuz-6.5.7-custom
```
!!! Note "Примітка"
```
Рішення назвати образ ядра `vmlinuz-6.5.7-custom` є дещо довільним. Це зручно, оскільки образи ядра зазвичай називають vmlinuz, а суфікс номера версії корисний, коли у вас є кілька доступних ядер або ядра, що забезпечують певну функціональність (наприклад, `vmlinuz-6.50.0-ws`).
```
-
Тепер, коли образ ядра на місці, скопіюйте та перейменуйте відповідний файл
System.mapу каталог/boot, використовуючи ті самі імена:sudo cp -v ~/build/kernel/System.map \ /boot/System.map-6.5.7-custom -
З ядром, файлом
System.mapта модулями, ми готові до останнього кроку. Синтаксис необхідної команди:kernel-install add <kernel-version> <kernel-image>
Тут <kernel-version> — це номер версії (і назва) ядра. А <kernel-image> — це шлях до щойно скомпільованого образу ядра.
Для нашого прикладу введіть:
```bash
sudo kernel-install \
add 6.5.7-custom /boot/vmlinuz-6.5.7-custom
```
Команда kernel-install — це зручний скрипт оболонки. Він може бути доступний не в кожному дистрибутиві Linux, але він доступний у новіших дистрибутивах Fedora, RHEL, CentOS. Цей інструмент автоматизує багато останніх ручних дій, які нам зазвичай доводиться робити, щоб налаштувати систему для завантаження нового ядра, яке ми щойно створили.
Зокрема, інструмент робить наступне:
- Він створює відповідний початковий образ файлової системи RAM (образ initramfs, тобто файл
/boot/initramfs-<kernel-version>.img). Щоб зробити це вручну на системах, деkernel-installнедоступний, скористайтеся командоюmkinitramfs. - Він запускає команду
depmod(яка створює список залежностей модуля). - It updates the boot loader configuration.
Для систем, що працюють з новішими версіями GRUB2, файл матиме назву /boot/grub2/grub.cfg. Для систем на основі EFI також оновлено файл /boot/efi/<distro>/fedora/grub.cfg.
А для систем, що працюють зі старими версіями GRUB, це буде файл /boot/grub/grub.conf або /boot/grub/menu.lst. А для зовсім нових дистрибутивів, які реалізували нову специфікацію завантажувача (BLS), новий запис завантажувача буде додано до каталогу /boot/loader/entries/ або до будь-якого каталогу, на який вказує змінна з назвою blsdir.
На нашому демонстраційному сервері Rocky на базі EFI, на якому працює GRUB 2 за допомогою BLS, у файлі завантажувача, розташованому тут, створюється новий запис завантаження: /boot/loader/entries/6fa25ca775f64accb0d3e53f0e4e6e92-6.5.7-custom.conf
$ sudo cat /boot/loader/entries/6fa25ca775f64accb0d3e53f0e4e6e92-6.5.7-custom.conf
title Rocky Linux (6.5.7-custom) 8.5 (Green Obsidian)
version 6.5.7-custom
linux /vmlinuz-6.5.7-custom
initrd /initramfs-6.5.7-custom.img $tuned_initrd
options $kernelopts $tuned_params
id rocky-20220212013135-6.5.7-custom
grub_users $grub_users
grub_arg --unrestricted
grub_class kernel
Примітка
У більшості дистрибутивів є кілька доступних утиліт `grub2-*`, які можна використовувати для виконання різноманітних завдань із обслуговування GRUB2 і завантажувача. Наприклад, ви можете використовувати команду `grub2-set-default`, щоб змінити або встановити ядро за замовчуванням, яке завантажуватиметься під час запуску системи.
Завантаження спеціального ядра¶
Наступним етапом є тестування ядра, щоб переконатися, що система може завантажуватися з ним.
-
Припускаючи, що ви зробили все саме так, як прописав лікар, і все пройшло саме так, як сказав лікар, ви можете безпечно перезавантажити систему та вибрати нове ядро в меню завантажувача під час завантаження системи:
sudo reboot -
Після завантаження системи ви можете скористатися командою uname, щоб дізнатися назву поточного ядра:
$ uname -r 6.5.7-custom -
Ви пам’ятаєте, що однією з функцій, які ми додали до нашого нового ядра, є можливість підтримки файлової системи NTFS. Переконайтеся, що нове ядро справді підтримує NTFS, відобразивши інформацію про модуль NTFS:
[rockstar ~]$ modinfo ntfs filename: /lib/modules/6.5.7-custom/kernel/fs/ntfs/ntfs.ko license: GPL version: 2.1.32 description: NTFS 1.2/3.x driver - Copyright ….. ...OUTPUT TRUNCATED...
І це все!
Author: Wale Soyinka
Contributors: Steven Spencer, Louis Abel, Ganna Zhyrnova