Запуск bzImage в QEMU: невозможно смонтировать root fs на unknown-block (0.0)


8

Я скомпилировал ядро, выполнив make menuconfigи make. Я пытался запустить bzImage в qemu, qemu -kernel bzImageно не с сообщением об ошибке:

Unable to mount root fs on unknown-block(0.0)

Ошибка ядра Linux

Как я могу это исправить? Как я могу запустить bzImage в qemu?


5
Ядро загрузилось нормально, но не может найти корневую файловую систему. Какие диски вы установили в ВМ? Какой тип файловой системы является корневой файловой системой, какой тип диска? Все ли необходимые драйверы скомпилированы в ядре (забывание одного из драйверов является распространенной ошибкой)?
Жиль "ТАК - перестать быть злым"

@ Жиль, я не монтировал файловую систему. После компиляции я пошел прямо в файл, где находится bzImage (../arch/x86/boot), и выполнил команду "qemu -kernel bzImage". вот когда я получил ошибку.
Coder404

Ответы:


11

Это сработало. Ядро загрузилось нормально. Ошибка:

Невозможно смонтировать root fs на unknown-block (0.0)

Ядро ищет корневую файловую систему. Вы должны предоставить один. Вы не можете взаимодействовать с ядром без запуска процессов на нем, и начальный процесс должен быть откуда-то загружен: когда ядро ​​запускается, оно монтирует файловую систему (корневую файловую систему) в каталоге /, а затем запускает программу /sbin/init. Программа init обычно отвечает за запуск загрузочных скриптов и запуск служб, включая программы, позволяющие пользователям входить в систему.

Вы должны убедиться, что ядро ​​способно смонтировать корневую файловую систему. Он должен иметь драйверы для типа файловой системы и для всех слоев, задействованных в блочном устройстве (контроллер диска (адаптер SCSI / SATA / IDE / USB /…), тип раздела и т. Д.).

Linux предлагает дополнительную возможность, которая заключается в загрузке исходной файловой системы в ОЗУ, которая используется во время процесса загрузки, чтобы найти и смонтировать корневую файловую систему. Эта исходная файловая система может содержать модули, которые обрабатывают тип устройства и файловой системы корневой файловой системы. Есть два слегка разных механизма: initrd и initramfs.


Спасибо за ответ! Могу ли я создать виртуальную файловую систему для загрузки? Если так, как бы я поступил так?
Coder404

@ Coder404 Вы имеете в виду виртуальную файловую систему для использования в качестве корневой файловой системы? Сделайте это в оперативной памяти.
Жиль "ТАК - перестань быть злым"

Я хочу использовать виртуальную файловую систему в качестве корневой файловой системы для ядра, которое я собираю в QEMU. Как бы я сделал виртуальную файловую систему?
Coder404

1

Даже если файловые системы будут скомпилированы отдельно от ядра, необходимо создать исходную файловую систему, которая будет присутствовать в ОЗУ для запуска ядра. Для создания этой исходной файловой системы ram используется mkinitrd. В Ubuntu вместо этого используется mkinitramfs

cd ~ / linux / linux-2.6.32.59 / arch / i386 / boot

mkinitramfs -o initrd.img-2.6.32.59

после этого запустите ядро ​​на qemu

qemu-system-i386 -kernel bzImage -initrd initrd.img-2.6.32.59 -m 512M

-initrd представляет начальную файловую систему RAM

Вы можете найти файловую систему ram в /boot/initramfs-linux.img

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.