LINUX.ORG.RU

Компиляция ядра


0

0

Перекомпилил ядро 2.6.4. После перезагрузки такая фигня:

Kernel panic:No init found. Try passing init=option to kernel.

Пробовал init=/sbin/init - не помогло. Что я не так делаю?

★★★

В конфиге загрузчика надо правильно прописать параметры: #grub: title linux kernel (hd0,3)/boot/vmlinuz root=/dev/hda4 initrd (hd0,3)/boot/initrd.img

#lilo: image=/boot/vmlinuz label="Linux" root=/dev/hda4 initrd=/boot/initrd.img read-only

только названия соотв. файлов свои поставьте

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

Все уже было прописано, так как вы указали, только я использую bzImage. Может, проблема в этом?

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

Извините, если я чего не знаю, но разве init зависит от ядра? Это, выходит, он должен собираться с ядром?

Zlyden ★★★
() автор топика

Как меня задрал этот вопрос, ты себе просто не представляешь. Он даже поиском находится.

Еще раз (пока у fagot'а не появилось время собрать в кучу все новые ответы):

Q: Собрал ядро. Запускаю. Kernel panic: no init found. или Unable to find root fs. Что делать?

A: Ну вообще данные надписи сами по себе являются руководством к действию.

1-й случай. Смотрим как собрали поддержку корневой файловой системы. Если она собрана модулем, то у вас должен быть создан initrd (и лежать в папке /boot) и прописан в вашем загрузчике. Данный файл должен создаваться на новое ядро ЗАНОВО!

В загрузчике запись об initrd выглядит примерно так для lilo:

initrd = /boot/initrd-2.6.3-prep5.img

и так для grub:

initrd /boot/initrd-2.6.3-prep5.img

Дело в том, что в этом файле находятся модули ядра и при загрузке ядро в состоянии обратиться к ним в отличие от модулей, что лежат в /lib и не могут быть подключены, т.к. ядро не видит раздел (потому что нет соответствующего модуля - замкнутый круг).

2-й случай. Тут все несколько сложнее. Дело в параметрах загрузчика. Если вы собираете поддержку корневой файловой системы не модулем, то не нужно передавать ядру параметр root=/ или root=LABEL=/ (кстати, root можно прописать отдельно, а не как параметр, например, так: root = /dev/hda2 ) - все эти вещи нужны системе, чтобы нормально запуститься после установки.

Для grub стоит проверить правильность записи о рутовом разделе, т.е. наличие строчки вроде такой: root (hd0,1)

Если вы собираете поддержку корневой файловой системы модулем, а эти строчки прописаны, значит скорее всего не прописан initrd (или он старый и в нем нет или не грузится данный модуль).

Общий совет: Если вы не собираетесь таскать систему с винта на винт, проще собрать поддержку корневой файловой системы в ядре и обойтись без указывания корневого раздела (root =) и создания и использования initrd.

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

косяк имеет место быть (проверено на 2.6.3, 2.6.4, 2.6.5)=)
меняем EXTRAVERSION
make && make install && make modules_install
перезагружаемся
no initrd found! (что-то типа этого)
грузимся в старое ядро
смотрим в /boot - там нету соответствующего initrd 
ладно..НИЧЕГО НЕ МЕНЯЕМ И
make install && make modules_install
- на всякий случай смотрим в /boot - initrd появляется...
соответственно загрузка с новым ядром проходит нормально
причины подобного поведения установить не смог

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

Склоняюсь к тому, что это действительно косяк. В поряде эксперимента поставил в комп пустой винт и заинсталлил туда Mandrake 10. Перекомпилировал ядро также как в прошлый раз, и новое ядро заработало, как часики. Наверное, это есть глюк.

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