
Можно ли встроить образ initramfs в существующее ядро без перекомпиляции всего этого? У меня нет на это ресурсов.
решение1
initramfs может быть встроен в ядро во время сборки (конечно, это разрешено в menuconfig, выбрав дерево rootfs). И может быть полезно в некоторых особых обстоятельствах. Только учтите, что после внедрения любой собственный инструмент rootfs в конечном бинарнике может нарушить GPL. Но пока ваш initramfs просто не содержит какой-то busybox-материал, никаких проблем быть не должно.
решение2
Обычно никто не интегрирует образ initramfs в ядро, насколько мне известно, это даже невозможно (без переписывания кода в соответствии с концепцией), по крайней мере, это не предполагается.
initrd — это всегда отдельный поток данных (файл), который загружается вместе с ядром для облегчения загрузки; он необязателен, но почти всегда включен в современные дистрибутивы gnu/linux.
поэтому вам не нужно задавать себе вопрос, как его встроить, а как его изменить, поэтому взгляните на конфигурацию вашего загрузчика, обычно вы должны определить 3 вещи (также в основном в этом порядке)
- образ ядра (то, что направляет ваш загрузчик к образу ядра (чаще всего файлу) для загрузки его в оперативную память)
- командная строка (строка, которая также записывается в оперативную память для доступа ядра и его использования (как передача параметров в ОС, но за ее пределами это просто запись и вызов (ассемблерного кода)) (в большинстве случаев эта штука имеет какую-то опцию root=/dev/xy ro любая
- образ initrd (необязательный образ начального ramdisk, который загружается в оперативную память после ядра, затем ядро использует его как виртуальный диск, который в основном (но есть живые системы, которые работают полностью на нем, например) используется для помощи в загрузке до того, как будет найдена и смонтирована корневая файловая система (например, диски медленные и нестабильные (порядок дисков, SCSI-вещи, загрузка по сети, шифрование файловой системы, аварийная оболочка восстановления в случае сбоя fsck и т. д.)
Итак, отвечая на ваш вопрос, если ваш загрузчик не может напрямую использовать initrd и вы не можете его заменить, просто загрузите с ним другой загрузчик (например, очень архаичные вещи могут по-прежнему загружать grub как ядро), в противном случае просто обновите путь к отдельному файлу initrd в конфигурации вашего загрузчика.
Кстати, если вы используете grub2, не редактируйте конфигурацию напрямую, она генерируется update-grub с использованием данных из /etc/default/grub и /etc/default/grub.d/, в grub legacy вы все равно редактируете menu.lst непосредственно в загрузочном разделе, но grub2 слишком сложен для этого, вы все равно можете редактировать что-то напрямую, но, скорее всего, впоследствии все будет перезаписано, так что это не очень хорошая идея...