#linux-kernel #filesystems #root #mount #panic
#linux-ядро #файловые системы #root #смонтировать #паника
Вопрос:
Я скомпилировал ядро Linux с файловой системой cpio, которая включает busybox.
Технические характеристики
- Linux 4.8
- Busybox 12.5.1
- набор инструментов GNU Binutils
- GCC, целью которого является i486-linux-uclibc
- Библиотека uClibc, скомпилированная с помощью этого набора инструментов.
Конфигурация ядра Linux — i386_defconfig и некоторые изменения. Указан префикс компилятора Toolchain, имя хоста, режим сжатия ядра — XZ, включена поддержка initramfs только XZ, оптимизация размера включена в конфигурации ядра Linux.
Я успешно скомпилировал ядро Linux.
После того, как я протестировал initramfs с QEMU 2.5.0. Эти параметры qemu-system-i386 -m 256 -kernel bzImage -display curses
.
Но ядро Linux выдает ошибку. Эта ошибка указана ниже:
[ 3.745110] 00000000 00000086 cf8adef8 c12276e0 cf8adf00 cf0ae000 cf8adf10 c
10cb4c6
[ 3.745110] cf0ae000 cf8adf44 cf0ae000 cffc15c0 cf8adf70 c19aaef3 c17e967e c
f8adf44
[ 3.745110] c17e962d c17e95fa 00000000 cf8adf44 fffffffa cf0ae15a c17e96e2 0
0000000
[ 3.745110] Call Trace:
[ 3.745110] [<c12276e0>] dump_stack 0x47/0x5b
[ 3.745110] [<c10cb4c6>] panic 0x8f/0x1ae
[ 3.745110] [<c19aaef3>] mount_block_root 0x12c/0x1b9
[ 3.745110] [<c1002930>] ? x86_pmu_hw_config 0x80/0x1a6
[ 3.745110] [<c19ab146>] mount_root 0x10e/0x115
[ 3.745110] [<c110ea97>] ? SyS_unlink 0x10/0x12
[ 3.745110] [<c19ab263>] prepare_namespace 0x116/0x147
[ 3.745110] [<c19aac38>] kernel_init_freeable 0x191/0x1a3
[ 3.745110] [<c165307a>] kernel_init 0x8/0xd0
[ 3.745110] [<c16561a2>] ret_from_kernel_thread 0xe/0x24
[ 3.745110] [<c1653072>] ? rest_init 0x5f/0x5f
[ 3.745110] Kernel Offset: disabled
[ 3.745110] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs
on unknown-block(0,0)
Как я могу решить эту проблему?
Редактировать: я использовал параметр ядра rootfstype=ramfs
, и ядро выдало другую ошибку:
[ 4.212083] 00000000 00000086 cf89bf88 c121c501 cf8a0000 c1906560 cf89bfa0 c
10c5bdf
[ 4.212083] c1906560 cf8a0000 c1906560 cfdd3980 cf89bfac c1645fe3 c17db667 c
18ddf04
[ 4.212083] c1649022 c1645f17 00000000 00000000 00000000 00000000 00000000 0
0000000
[ 4.212083] Call Trace:
[ 4.212083] [<c121c501>] dump_stack 0x47/0x5b
[ 4.212083] [<c10c5bdf>] panic 0x8f/0x1ae
[ 4.212083] [<c1645fe3>] kernel_init 0xcc/0xd0
[ 4.212083] [<c1649022>] ret_from_kernel_thread 0xe/0x24
[ 4.212083] [<c1645f17>] ? rest_init 0x5f/0x5f
[ 4.212083] Kernel Offset: disabled
[ 4.212083] ---[ end Kernel panic - not syncing: No working init found. Try
passing init= option to kernel. See Linux Documentation/init.txt for guidance.
Как ядро Linux может обнаружить инициализацию? Спасибо за ответы.
Комментарии:
1. «Как я могу решить эту проблему?» — Что вы создали? Что такое командная строка ядра? initramfs не обязательно монтировать. Если архив cpio правильно добавлен к образу ядра, то ядро всегда будет использовать initramfs и никогда не будет пытаться искать или монтировать корневую файловую систему.
2. Я знаю, что bzImage может не понадобиться командная строка. Просто
rootfstype=ramfs
команда выполнена, но я выдал другую ошибку, которая является следующим шагом.3. Также добавлен
rdinit=/sbin/init
параметр, он работает.