Автор Гілка: Як компілювати ядро?  (Прочитано 333 раз)

Відсутній Gentux

  • Новачок
  • *
  • дописів: 11
  • Карма: +0/-0
Салют, народ. Сиджу на генту, ядро регенив автоскриптом. Але по-моєму це якось не по гентовськи. Бо філософія стверджує, що повинна бути тільки підтримка того, що насправді треба. І ось питання, як збирати ядро? В мене було трошки з цим досвіду коли качав крюкс лінукс, ядро там вроді як мінімальне, а вроді як і ні, ну я там ставив просто дрова на графіку, відрубав лишні файлові системи і все чудово працювало. Але на генту трошки по іншому. Коли намагався збирати, вроді як врубав підтримку iwlwifі, але на буті все одно не проходило, щось було не так. І так, ключові питання: 1. В чому різниця між build-in та Module в ядрі? Типу що вопще за опції є і що вони роблять? 2. Що таке linux-firmware, і чи треба його качати, якщо треба, то які зміни в ядрі? Залишати модулі чи все одно build-in? 3. На які ключові опції потрібно звертати увагу, типу якщо в мене асус на уефі? Де брати інфу що треба включати в ядро, а що ні?

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3855
  • Карма: +12/-0
  • Програміст
Re: Як компілювати ядро?
« Відповідей #1 : 2025-03-14 08:06:41 »
built-in — це код, який статично лінкується з ядром, що робить доступним його прямо після завантаження, але воно тоді їсть памʼять і коли потрібне і коли не потрібне.

Модулі потрібно завантажувати додатково, а значить вони не доступні на етапі завантаження, але це обходять створюючи маленький образ диску (initrd - initial ram disk) з потрібними модулями та конфігурацією для них, який завантажується у памʼять разом з ядром.

Якщо ви хочете максимізувати швидкість завантаження (навіщо?), то ви можете подивитися які модулі використовуються коли система працює, і вкомпілювати їх статично, щоб позбутися initrd, а також сконфігурувати їх через командний рядок ядра. Але це краще не робити для модулів, які оновлюються окремо від ядра (бо потрібно буде перебудовувати ядро і перевантажуватсия). Також динамічна конфігурація таких модулів буде неможливою, тому напр. plug&play для динамічних пристроїв можливо не працюватиме.

У великих дистрибутивах стараються вкомпілювати в ядро тільки той код, який потрібен всім і завжди, а все решта компілювати як модулі, бо це дає максимальну гнучкість та потужність і економить памʼять, але сповільнює завантаження системи (яке відбувається досить рідко, тому мене це не турбує).

Для вбудованих пристроїв часто роблять майже повністю статичне ядро, яке конфігурується через спеціальне дерево конфігурації пристроїв (Device Tree), що робить процес завантаження швидким навіть на повільному залізі.

Якщо ви плануєте працювати у сфері вбудованих пристроїв, то можете спробувати зробити статичне ядро з конфігурацією через Device Tree і записати його у флеш памʼять компʼютера для мінімізації часу завантаження і здобуття досвіду. Але якщо ні, то тратити тижні часу щоб зекономити кілька секунд на день — воно того не варте, хіба що ви плануєте працювати на Ґуґл чи Амазон.

Список модулів, який завантажений, можна подивитися командою lsmod (видає назва модуля, розмір, кількість інших модулів які його використовують та список цих модулів).

Щодо linux-firmware, то ваш менеджер пакетів може розказати про пакети, які у вас є. Напр. на Федорі, мій dnf каже мені: «This package includes firmware files required for some devices to operate.», тобто це пакет з прошивками для різних пристроїв, які не працюють без цих прошивок. Можете подивитися список файлів, і якщо побачите знайомий пристрій (див. lspci), або якщо у вас щось не працює — вантажте. Якщо все працює без нього — не вантажте.

iwlwifi потребує ще файлу з прошивкою для пристроїв WiFi. Я навіть не знаю як він конфігурується так як у мене на Федорі все запрацювало автоматично.
[Fedora Linux]

Відсутній Gentux

  • Новачок
  • *
  • дописів: 11
  • Карма: +0/-0
Re: Як компілювати ядро?
« Відповідей #2 : 2025-03-14 11:54:48 »
Дякую! На рахунок компіляції під окреме зазізо, виписати на листочку складові, типу там звук, точпад і все інше, і далі просто лазити по менюконфігу і підключати?

Відсутній yvs115

  • Кореспондент
  • ***
  • дописів: 101
  • Карма: +2/-0
Re: Як компілювати ядро?
« Відповідей #3 : 2025-03-14 13:38:10 »
> На рахунок компіляції під окреме зазізо, виписати на листочку складові, типу там звук, точпад і все інше

а яка ціль того всього? - бо в абс.більшості випадків тим ніхто не заморочується

нп мінімілазація по памя'ті: то і з дефолтним конфігом на одній з скретч зборок без DE, нп
% free -h
              total        used        free  ...
Mem:           3.8G       25.5M        3.8G  ...

якщо додати ще графіку то вже буде в сотнях мег - тобто оптимізувати по розміру ядро не дуже сенс є.
Навіть з якою-небудь супермінімалістичною графікою - нп з іншої системи з flwm з одного мін.дистро - сумарно буде значно більш за розміри ядра
% free -h
              total        used        free  ...
Mem:         988.0M      123.9M      658.9M  ...

- якщо ж цікавить оптимізація по швидкості - то доволі часто вона сильно роздуває код (тобто робить його більшим)
у випадку якщо цікавлять супероптимізованні дистро в цьому плані - дивіться в сторону cachyos де зібрано з макс.оптимізацією буквально все (не тільки ядро)

- якщо з education point of view - тоді так - збирайте (але як це educational case only, то можна збирати і в більш user-friendly дистро ніж gentoo)

Відсутній kostiantyn.hermash

  • Новачок
  • *
  • дописів: 26
  • Карма: +1/-0
Re: Як компілювати ядро?
« Відповідей #4 : 2025-03-14 15:48:56 »
Дякую! На рахунок компіляції під окреме зазізо, виписати на листочку складові, типу там звук, точпад і все інше, і далі просто лазити по менюконфігу і підключати?

Так.

Доречі, не забувай про Gentoo Handbook і Gentoo Wiki. Там розказується, як налаштовувати ядро. Принаймні базові речі. В статтях на вікі часто написано, які речі в ядрі треба увімкнути, а які вимкнути. Наприклад, стаття про ALSA (звук) https://wiki.gentoo.org/wiki/ALSA, або стаття про Touchpad Synaptics https://wiki.gentoo.org/wiki/Synaptics.

https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel

Взагалі в Gentoo, мабуть, найкраща Wiki серед усіх дистрибутивів GNU/Linux.

Коли я раніше користувався Генту, я завжди собі вбудовував код прямо в ядро, і ніколи не робив initrd. Найголовніше, щоб ядро запустилося, треба не забути обов'язково увімкнути підтримку накопичувачів (SATA, SSD, NVME і т.д.) і файлових систем (ext3, ext4, vfat, і т.д.), щоб ядро змогло прочитати диск і змонтувати вашу кореневу файлову систему. Усе інше можна збирати модулями, ядро завантажить решту модулів з диску.

Прошивки (firmware) встановлюються окремим пакетом через пакетний менеджер. "emerge linux-firmware".

Загалом, процес компіляції ядра в Gentoo виглядає так:

emerge gentoo-sources (встановлюємо вихідний код ядра в /usr/src/linux)

(фактично, /usr/src/linux --- це символічне посилання на поточну директорію з сирцями ядра,
тобто у вас може бути встановлено декілька версій сирців ядра,
тобто декілька версій пакету gentoo-sources, наприклад /usr/src/linux-x.y.z, /usr/src/linux-a.b.c, і т.д.
Тут вам треба обрати яку саме версію ядра ви хочете за допомогою утиліти eselect,
тобто "eselect kernel list, eselect kernel set").

cd /usr/src/linux

make menuconfig (можна спочатку зробити конфіг за замовчуванням make defconfig,
а потім вже відредагувати дефолтний конфіг за допомогою make menuconfig)

Конфігурація ядра буде записана в файл "/usr/src/linux/.config"

make (компіляція, можна додати кількість ядер у процесора для паралельної компіляції, наприклад make -jN).

make modules_install (встановлюємо скомпільовані модулі в директорію /lib/modules).

make install (встановити скомпільоване ядро в /boot) (якщо /boot на окремому розділі, спочатку його треба примонтувати).

update-grub (оновити конфігурацію завантажувача).

Ще, під час конфігурації ядра в Gentoo, треба обрати, яку систему ініціалізації ви збираєтесь використовувати (systemd або OpenRC).

Після оновлення ядра, не забуваємо перекомпілювати усі сторонні модулі (драйвери), наприклад "emerge nvidia-drivers".
« Змінено: 2025-03-14 16:19:29 від kostiantyn.hermash »

Відсутній kostiantyn.hermash

  • Новачок
  • *
  • дописів: 26
  • Карма: +1/-0
Re: Як компілювати ядро?
« Відповідей #5 : 2025-03-14 16:59:55 »
якщо в мене асус на уефі? Де брати інфу що треба включати в ядро, а що ні?

А який саме? Може для вашого Асуса вже є сторінка на Вікі.

https://wiki.gentoo.org/wiki/Category:ASUS_laptops_(AMD64)

P.S. Трошки оффтопу: для ноутбуків Асус існує спеціальна утиліта asusctl, за допомогою якої можна налаштовувати, наприклад, колір підсвітки клавіатури або режим роботи вентиляторів. Її немає в офіційному дереві Portage, але її можна встановити окремо.

Відсутній kostiantyn.hermash

  • Новачок
  • *
  • дописів: 26
  • Карма: +1/-0
Re: Як компілювати ядро?
« Відповідей #6 : 2025-03-14 17:15:30 »
Дякую! На рахунок компіляції під окреме зазізо, виписати на листочку складові, типу там звук, точпад і все інше, і далі просто лазити по менюконфігу і підключати?

Загалом ви праві. Для того, аби скомпілювати ядро, спочатку треба дослідити ваше залізо. Ви маєте точно знати, який у вас процесор, яка материнка, які у вас накопичувачі, яка у вас відеокарта, яка у вас мережева карта, який у вас wifi, який bluetooth, який кардрідер, яка вебкамера, які ви збираєтесь використовувати файлові системи, яку систему ініціалізації, який у вас тачпад. Це комплексний процес. Для початку, існують утиліти lspci, lshw, які можна запустити, наприклад, з якогось LiveCD/LiveUSB дистрибутиву (та хоч з Ubuntu). Також з-під Ubuntu можна запустити команду lsmod і подивитись, які модулі завантажені, це вкаже на ваше залізо. Можна прочитати специфікації вашого заліза, які пише виробник вашого ПК. Треба використовувати додаткові джерела інформації: гентушна вікі, гентушний форум: forums.gentoo.org, гугл.

Відсутній Gentux

  • Новачок
  • *
  • дописів: 11
  • Карма: +0/-0
Re: Як компілювати ядро?
« Відповідей #7 : 2025-03-16 17:07:55 »
Велике дякую! На рахунок асусу, VivoBook 15. (K513E)