Компіляція ядра Linux: автономна ОС


2

Привіт, хлопці, я новачок у компіляції ядра Linux, тому у мене виникає питання: Складаючи Linux ядро, ми будуємо повністю автономну ОС, яка не залежить від будь-яких вкладів Linux?

Якщо так ... Ну, коли я хочу створити файл initrd за допомогою initramfs command, чому він додає інформацію про мою запущену Linux-деструкцію (я запускаю Ubuntu 10.4)?

Як я повинен компілювати та додавати модулі до мого компільованого Linux та де їх розмістити?

Це літнє те, що я робив:

1.відкриття джерела ядра (3.4.1) та компіляція за допомогою команди "зробити все" (я використовую свій поточний Linux .config)

  1. Встановлення grub на моїй пам'яті

  2. Поміщення складеного bzImage до каталогу / boot моєї пам'яті

  3. Використовуючи команду "initramfs", щоб створити файл initrd і ввести його також у / boot.

  4. Завантаження мого ПК за допомогою флеш-пам’яті та потрапляння в grub> terminal

  5. Використання "root (hd0,0)"; "kernel / boot / bzImage"; "initrd /boot/initrd.img", а потім команди "boot" для завантаження.

  6. Потрапляння в термінал (initramfs) після помилки, яка заявила, що не вдалося знайти файл "/lib/modules/3.4.1/modules.dep" !!!

Що я роблю неправильно?

Відповіді:


10

Складаючи ядро ​​Linux, ми будуємо повністю автономну ОС, яка не залежить від будь-яких розподілів Linux?

Ні. Linux сам по собі не є операційною системою. Це просто ядро. Для полегшення вашої взаємодії з комп'ютером необхідна країна користувачів , що включає набір системних бібліотек та основного програмного забезпечення. Що ми зазвичай маємо на увазі під «Linux», це передбачено окремим проектом під назвою Project GNU. Технічно нам слід (а деякі і так) називати це "GNU / Linux".

Добре, коли я хочу створити файл initrd за допомогою initramfs commmand, чому він додає інформацію про мою запущену Linux-деструкцію (я запускаю Ubuntu 10.4)?

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

Як я повинен компілювати та додавати модулі до мого компільованого Linux та де їх розмістити?

Якщо ви компілюєте власне ядро, імовірно, ви робите make menuconfigв каталозі джерела ядра перед його компіляцією, що дозволяє вам вибрати, які функції будуть складені, і чи будуть вони інтегровані в бінарне ядро ​​або будуть доступні як модулі.

Це літнє те, що я робив:

Існує ряд причин, коли це не працюватиме так, як ви хочете.

отримання джерела ядра (3.4.1) та компіляція його за допомогою команди "зробити все" (я використовую свій поточний Linux .config)

Якщо ви використовуєте Ubuntu 10.04, який передує 3.x-гілці ядра Linux зовсім небагато, не кажучи вже про 3.4. Це, швидше за все, не спрацює правильно, принаймні, не без величезної кількості зайвих робіт. Конфігураційні файли теж трохи змінилися, і я, відверто кажучи, здивований, що не викидаючи помилки зліва та справа щодо речей у вашому (мабуть, для Linux 2.6) конфігураційному файлі, не узгоджуючись з тим, як це робиться в 3.4. Крім того, ви, мабуть, хочете завантажувати пакет джерела ядра Ubuntu, а не звичайне джерело ванільного ядра з kernel.org, оскільки Ubuntu виправляє ядро, щоб включити необхідні функції та змусити його грати добре з усім іншим у системі. Нарешті, вам не вистачає низки кроків, про які я піду пізніше.

Поміщення складеного bzImage до каталогу / boot моєї пам'яті

Я не впевнений, що ви маєте на меті з цим, але якщо це мати повну завантажувальну установку Linux на вашій пам’яті, є трохи більше, ніж це - у вас на цій пам’яті взагалі немає матеріалів користувача. наприклад, палиця. Насправді це буде зроблено, якщо правильно встановити, це (спробувати) запустити інсталяцію Ubuntu на жорсткому диску з ядром на вашій пам'яті. Я вважаю, що це має спрацювати, але чому це робити, а не просто встановлювати ядро ​​на жорсткий диск? Ви можете встановити його поряд з існуючим, щоб ви могли вільно перемикатися між ними.

Потрапляння в термінал (initramfs) після помилки, яка заявила, що не вдалося знайти файл "/lib/modules/3.4.1/modules.dep" !!!

Це повертається до пропущених кроків, про які я згадував раніше. Вам потрібно до make modules_installсвого нового ядра, щоб розмістити його модулі /lib/modules.

ЯКЩО ...

Нічого з цього насправді не має значення, тому що в ідеалі ви взагалі не повинні складати ядро ​​«традиційним» способом, якщо тільки у вас немає дуже конкретної потреби. У ці дні, якщо вам насправді потрібно буде скласти власне ядро, більшість дистрибутивів мають змогу це зробити, використовуючи їх власну версію ядра (якщо застосовується), автоматизує процес збирання, встановлює ядро ​​як пакет, щоб ви могли чисто встановити та видалити він необхідний, і налаштовує завантажувач, щоб дати вам вибір нового чи старого ядра. У Ubuntu слід дотримуватися наступних інструкцій: Kernel / Compile - Ubuntu Wiki

Що не означає, що ви не можете скласти ядро ​​«старомодним» способом лише для ударів / для навчальних цілей - я склав своє перше ядро ​​таким чином, але це було раніше, ніж були кращі способи це зробити. Якщо ваша система не працює, ви маєте важливе значення, використовуйте рекомендований метод для вашого дистрибутива, використовуйте їх джерело та використовуйте їх управління пакетами.


1
Якщо ви справді хочете створити свій власний Linux, з самого початку перегляньте linuxfromscratch.org . Зауважте, що це дуже складний і задіяний процес, і компілювання вашого ядра, мабуть, найлегша його частина.
tgies

1

Коли ви перекомпілюєте або компілюєте ядро ​​Linux, ви НЕ створюєте новий дистрибутив. Ви створюєте лише новішу або іншу версію ядра. Ядро - це єдиний файл, який завантажується, а потім виконується завантажувачем після того, як ваш ПК завершить процес POST.

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

Минуло час, коли я склав власне ядро, але я думаю, що вам потрібно запустити depmod -aпісля makeкоманди.


make module_installвстановлює модулі ядра і, я вважаю, працює depmodдля вас.
tgies

Е, швидше, не потрібно чи доцільно запускати depmod -aпосилання на нове ядро, яке ви тільки що склали, але не запущено під час виклику depmod. depmodімовірно, відбувається під час завантаження, коли це потрібно.
tgies
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.