Создание нового initrd без установки ядра

3

Как я могу создать образ initrd для нового (экспериментального) ядра без фактической его установки. (Существующие инструменты для создания initrd на основе конфигурации и деталей из установленного ядра.)

Скажем, я собираю новое ядро ​​с включенными экспериментальными функциями, у меня это в другом отдельном разделе. Я хотел бы загрузиться в это ядро, для этого будет работать старый initrd? если я хочу создать новый initrd.img для нового ядра без фактической установки ядра, как я могу это сделать?

Кстати, кто-то может уточнить про initramfs? это будет полезно для моего сценария?

rajaganesh87
источник
Как вы создали свой текущий initrd?
phunehehe
Если вы скомпилируете ядро ​​с заданной версией, а модули в initrd являются более старой версией, ядро ​​не загрузит их.
LawrenceC
@phunehehe в настоящее время я собираю ядро ​​из / usr / linux, куда копируется исходный код ядра. который затем устанавливает связанный файл непосредственно в / boot. Но я хочу скомпилировать ядро ​​в некотором каталоге с песочницей и использовать только образ ядра и initrd вместо обновления других системных файлов.
rajaganesh87
Я действительно не понимаю. Что мешает вам собрать initrd, не мешая прикасаться к ядру?
phunehehe
@phunehehe в настоящее время я пытаюсь собрать с помощью "mkinitramfs -o initrd.img 2.6.37", но мое текущее работающее ядро ​​не 2.6.37. Я получаю сообщение об ошибке, не могу найти «/lib/modules/2.6.37». Я скомпилировал 2.6.37, но не установил его (пропущены шаги «make install» и «make modules_install»). Разве невозможно загрузиться только с vmlinuz и initrd? я должен сделать сделать установку тоже?
rajaganesh87

Ответы:

3

Создание initrd не имеет ничего общего с установкой ядра. Все, что вам нужно сделать, это создать файловую структуру для initrd, скопировать необходимые файлы, написать скрипт init и упаковать все это в архив cpio. Я использовал инструкции в Gentoo Wiki, чтобы создать свой initrd. В некоторых дистрибутивах создаются инструменты для генерации initrds, и для этого вам нужно будет назвать ваш дистрибутив. Например, Арк имеет mkinitcpio .

initramfs - это просто еще одна (более новая) реализация исходного виртуального диска . Я не знаю наверняка, но я думаю, что все современные дистрибутивы используют initramfs. Когда вы видите «initrd», это может быть сокращением для «начального виртуального диска», и, таким образом, оно охватывает как initrd, так и initramfs.

phunehehe
источник