Чи завантажується все ядро ​​в пам'ять під час завантаження?


14

Я читав цей популярний документ IBM (я його бачу досить часто в Інтернеті), пояснюючи функцію початкового диску RAM.

Я вдарив об стіну, розуміючи, як це працює.

У документі сказано

Завантажувач, такий як GRUB, ідентифікує ядро, яке слід завантажувати, і копіює це зображення ядра та будь-який пов'язаний з ним initrd в пам'ять

Я вже розгублений: чи копіює це все ядро ​​в пам'ять, чи просто його частину? Якщо все ядро ​​знаходиться в пам'яті, то навіщо нам взагалі потрібний диск RAM?

Я думав, що мета initrd - мати можливість мати невелике узагальнене зображення ядра, і initrd встановить у ньому правильні модулі до завантаження зображення ядра. Але якщо все ядро ​​вже в пам'яті, то для чого нам потрібен initrd?

Це також викликає ще одне, що мене бентежить - де розташовані модулі, які завантажуються в ядро? Чи всі модулі ядра зберігаються всередині initrd?


Так. Все ядро. І її перші корінці. Але ядра Linux не використовували initrd протягом багатьох років.
mikeserv

Правильно я це читав. Його значною мірою замінили initramfs, чи не так? І все ж подібний процес із initramfs правильний?
користувач1028270

1
його повністю замінено для всіх ядер, починаючи з серії 2.6. Але процес дещо подібний, за винятком того, що initramfs ніколи не вимикається - він завжди є і завжди є коренем. Насправді ви маєте змонтувати свій кореневий розробник. Є й переваги того, що не потрібно емулювати окремий блок розробника тощо.
мікесерв

Класно, я буду читати ту статтю, з якою ви пов’язані. Отже, модулі ядра зберігаються в коренях initramfs?
користувач1028270

1
@edwardtorvalds - це все обробляється udevзазвичай, і так, автоматично.
mikeserv

Відповіді:


17

Все ядро ​​завантажується в пам'ять під час завантаження, як правило, поряд із initramfsсучасним. (Ще можна встановити систему для завантаження без, initramfsале це незвично на настільних комп'ютерах та серверах.)

initramfsРоль » в тому , щоб забезпечити функціональні можливості, необхідні для установки" реальні "файлових систем і продовжити завантаження системи. Це включає модулі ядра, а також різні бінарні файли: вам потрібно принаймні udev, можливо, деяка мережа, і kmodякі завантажують модулі.

Модулі можна завантажувати в ядро ​​пізніше, ніж просто завантажувати, тому спеціальна підготовка ядра не використовується initramfs . Вони можуть зберігатися в будь-якому місці: initramfs, /lib/modulesна реальній файлової системи, в дереві розробки , якщо ви розробляєте модуль ... The initramfsповинен містити тільки ті модулі , які необхідні для монтування кореневої файлової системи (який містить залишок).


Добре, що для мене має сенс. Я думаю, що я плутав зображення ядра та файлової системи, яку він використовує, але, очевидно, зовсім окремо.
користувач1028270

5

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


3

Ядро в сучасних установках Linux базується на модулях, тобто власне ядро ​​(завантажується під час завантаження в оперативну пам'ять) включає лише мінімальний функціонал, все інше складається у вигляді модулів (завантажуваних під час виконання). Щоб зробити цю роботу навіть тоді, коли наприклад пристрої або файлові системи, необхідні для завантаження, є модулями, а initramfsзавантажується ядром (як випливає з назви, це область ОЗУ з простою файловою системою, встановленою на завантаженні). Ця тимчасова файлова система змонтована /і містить програми запуску та необхідні модулі. Після завершення запуску initramfsLinux виконує функцію pivot_root(8), нарікаючи реальне /і викидаючи initramfsвміст.

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


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