Я скомпилировал ядро, выполнив make menuconfig
и make
. Я пытался запустить bzImage в qemu, qemu -kernel bzImage
но не с сообщением об ошибке:
Unable to mount root fs on unknown-block(0.0)
Как я могу это исправить? Как я могу запустить bzImage в qemu?
linux
linux-kernel
qemu
Coder404
источник
источник
Ответы:
Это сработало. Ядро загрузилось нормально. Ошибка:
Ядро ищет корневую файловую систему. Вы должны предоставить один. Вы не можете взаимодействовать с ядром без запуска процессов на нем, и начальный процесс должен быть откуда-то загружен: когда ядро запускается, оно монтирует файловую систему (корневую файловую систему) в каталоге
/
, а затем запускает программу/sbin/init
. Программа init обычно отвечает за запуск загрузочных скриптов и запуск служб, включая программы, позволяющие пользователям входить в систему.Вы должны убедиться, что ядро способно смонтировать корневую файловую систему. Он должен иметь драйверы для типа файловой системы и для всех слоев, задействованных в блочном устройстве (контроллер диска (адаптер SCSI / SATA / IDE / USB /…), тип раздела и т. Д.).
Linux предлагает дополнительную возможность, которая заключается в загрузке исходной файловой системы в ОЗУ, которая используется во время процесса загрузки, чтобы найти и смонтировать корневую файловую систему. Эта исходная файловая система может содержать модули, которые обрабатывают тип устройства и файловой системы корневой файловой системы. Есть два слегка разных механизма: initrd и initramfs.
источник
Даже если файловые системы будут скомпилированы отдельно от ядра, необходимо создать исходную файловую систему, которая будет присутствовать в ОЗУ для запуска ядра. Для создания этой исходной файловой системы ram используется mkinitrd. В Ubuntu вместо этого используется mkinitramfs
после этого запустите ядро на qemu
-initrd представляет начальную файловую систему RAM
Вы можете найти файловую систему ram в /boot/initramfs-linux.img
источник