LINUX.ORG.RU

Неправильно загружается initramfs при загрузке из grub?

 , ,


0

1

Всем привет!

Пытаюсь скомпилить ядро линукса и сейчас я не могу собрать его в isoшник. Есть валидные файлы bzImage и initramfs.cpio.gz, которые через qemu замечательно подгружаются. Собираю следующими командами:

mkdir -p iso/boot/grub/
wget http://littleosbook.github.io/files/stage2_eltorito -O iso/boot/grub/eltorito
cp bzImage iso/boot/bzImage
cp initramfs.cpio.gz iso/boot/initramfs.cpio.gz
echo "default=0\n\
timeout=5\n\
\n\
menuentry 'znix' {\n\
	insmod gzio\n\
	insmod part_msdos\n\
	echo 'Loading znix kernel'\n\
	linux /boot/bzImage init=/bin/sh\n\
	echo 'Loading znix fs'\n\
	initrd /boot/initramfs.cpio.gz\n\
}"\
> iso/boot/grub/grub.cfg
grub-mkrescue -o znix.iso iso/

Пишется:

[...] Unpacking initramfs...
[...] Freeing initrd memory: 364K
...
[...] Run /bin/sh as init process
[...] Kernel panic - not syncing: Requested init /bin/sh failed (error -2).

Причём пишется такое только при запуске через iso. Если запускать с двух файлов, я попадаю в консольку. В чём может быть проблема? Подтолкните новичка в нужном направлении, пожалуйста)

Ответ на: комментарий от anonymous

Если запускать вашу команду, то ничего, кроме количества блоков не выводится:

user@pc:~/Documents/GitHub/znix/fs_build$ zcat initramfs.cpio.gz | cpio -it | grep /bin/sh
1606 blocks

Однако если запускать её же без первого слеша, то она выводит название файла и возвращает 0:

user@pc:~/Documents/GitHub/znix/fs_build$ zcat initramfs.cpio.gz | cpio -it | grep bin/sh
1606 blocks
bin/sh

Я погуглю, но кажется, что всё ок

milk_cool
() автор топика
Ответ на: комментарий от milk_cool

У тебя в grub.cfg стоит запуск init=/bin/sh -D вместо просто init=/bin/sh. Если в qemu запустить iso, затем в меню grub нажать e, временно отредактировать конфиг и нажать f10, то шелл загружается.

anonymous
()

Кстати, если ядро самосборное, то можно вкомпилировать все нужные для загрузки модули в ядро (Y) и вообще не использовать initramfs. Единственный минус такой системы: если ядро внезапно не сможет смонтировать корневую ФС, то понадобится загрузка live-системы с носителя, тогда как с initramfs будет доступна убогая обрезанная недосистема, из которой есть шанс что-то продиагностировать и даже исправить.

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от anonymous

Можно. Но на десктопе особо не нужно. Если содержимое initramfs не настраивается вручную, то по-умолчанию в него запихивается куча драйверов на все случаи жизни. В результате, после загрузки такой системы в lsmod куча хлама, которого при прямой загрузке с rootfs нет, а это значит 1) минус память; 2) минус время загрузки.

annulen ★★★★★
()