LINUX.ORG.RU

[initramfs][PXE]Загрузка по сети ядра с initramfs, жалуется на отсутствие /init.

 ,


0

0

Набросал файлов в /usr/src/initramfs, написал /usr/src/initramfs/init, права на него 777. Сжал всё это

cd /usr/src/initramfs; find . | cpio -o -H newc | gzip -9 > ../initramfs.img

В ядре "Initial RAM filesystem and RAM disk (initramfs/initrd) support" и "RAM block device support" статически, в смысле не модулями. В основном ядро модульное, в смысле что очень много чего собрано модулями. Может надо что-то ещё статически?

Конфигурационный файл PXELINUX (/var/lib/tftpboot/pxelinux.cfg/default) у меня такой:

DEFAULT LINUX

LABEL LINUX
kernel linux
append initrd=initramfs.img
PROMPT 1
TIMEOUT 10

linux и initramfs.img лежат где и следует, точно загружаются, и вроде бы даже ядро initramfs подхватывает.

Однако при загрузке я наблюдаю сообщение.

Failed to execute /init
Kernel panic - not syncing: No init found. Try passing init= option to kernel.

Что может быть тому причиной?

★★★★★

Какой-то замысловатый алгоритм используется для создания initramfs :) Там надо-то всего лишь сказать в конфиге ядра что initramfs нужна: CONFIG_BLK_DEV_INITRD=y и где находится корень твоей initramfs например так: CONFIG_INITRAMFS_SOURCE="/home/х/sam9work/dataflash" при сборке ядра архив cpio будет создан автоматом и слинкуется с ядром статически.

anonymous
()

>Загрузка по сети ядра с initramfs >append initrd=initramfs.img

Да - почитай еще в чем разница между initial ramdisk (initrd) и initramfs, потому что ты описываешь загрузку системы с рамдиска а говоришь про initramfs (hint - при использовании initramfs никаких рамдисков не создается - она подобна tmpfs).

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

man initramfs

>Да - почитай еще в чем разница между initial ramdisk (initrd) и initramfs, потому что ты описываешь загрузку системы с рамдиска а говоришь про initramfs (hint - при использовании initramfs никаких рамдисков не создается - она подобна tmpfs).

Отнюдь-отнюдь. initramfs может быть собран отдельным файлом и передан ядру при загрузке.

Попробовал, кстати, собрать всё одним файлом, не помогло.

Camel ★★★★★
() автор топика
Ответ на: man initramfs от Camel

>Отнюдь-отнюдь. initramfs может быть собран отдельным файлом и передан ядру при загрузке.

Разве я утверждал обратное ? Смысл initrd - _загрузчик_ готовит ramdisk и сообщает ядру где он находится, ядро может его потом использовать как корневую фс на виртуальном блочном устройстве. initramfs, имхо ее преимущество как раз в том что корневая фс находится в ядре, не нужны никакие лишние телодвижения со стороны загрузчика :) Более того в ядрах версии 2.6 даже когда ты используешь старый метод с initrd все равно создается маленькая пустая initramfs в ядре. Преимуществ еще очень много - динамическое распределение памяти, отсутствие оверхеда на имитацию блочного устройства и тд и тп.
По теме - что имидж содержит ? Я так понял init это самописный скрипт - а есть там вообще то что должно его выполнять (busybox например - ash или sh ?)

anonymous
()

вроде всё просто. у человека нет корневого раздела nfs. типа не настраивается автоматом сетка или что-то в этом роде.

scaldov ★★
()
Ответ на: комментарий от anonymous

man hands

>По теме - что имидж содержит ? Я так понял init это самописный скрипт - а есть там вообще то что должно его выполнять (busybox например - ash или sh ?)

Я знал, что всесведующий all натолкнёт на правильную мысль! Кажися я забыл #/bin/bash в начале файла прописать. Завтра проверю. Анонимус, целую вас всех с размаху.

Camel ★★★★★
() автор топика
Ответ на: Не то. от Camel

Модуля.

Не знаю в чём дело, но похоже в модулях. Собрал ядро монолитно, всё нормально загрузилось.

Camel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.