initramfs не удается смонтировать корневую файловую систему

#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 параметр, он работает.