Из-за чего возникает kernel panic при добавлении утилит?
Собираю в образовательных целях самопальный дистрибутив linux. Пока только ядро и initrd. В initrd набор утилит busybox, mc, либы и init. Ну и файлики по мелочи для mc. init печатает приветствие и запускает /bin/sh. Решил добавить утилиты mkfs.ext4, grub-install и grub-mkconfig.
Делал следующим образом:
Сначала
cp /sbin/mkfs.ext4 initrd/bin/
cp /usr/sbin/grub-install initrd/usr/bin/
cp /usr/sbin/grub-mkconfig initrd/usr/bin/
Затем сделал ldd для каждой (кроме grub-mkconfig) и все найденные либы ручками скопировал в initrd/lib/x86_64-linux-gnu.
После этого ядро стало выдавать ошибку:
[ 12.723299] /dev/root: Can't open blockdev
[ 12.729577] VFS: Cannot open root device "" or unknown-block(0,0): error -6
[ 12.730955] Please append a correct "root=" boot option; here are the available partitions:
[ 12.732713] 0b00 1048575 sr0
[ 12.733226] driver: sr
[ 12.734156] List of all bdev filesystems:
[ 12.734539] ext3
[ 12.734622] ext2
[ 12.734789] ext4
[ 12.735345] squashfs
[ 12.735532] vfat
[ 12.735719] fuseblk
[ 12.736165]
[ 12.736949] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[ 12.738153] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.8.0-45-generic #45-Ubuntu
[ 12.739057] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 12.740487] Call Trace:
[ 12.743510] <TASK>
[ 12.745903] dump_stack_lvl+0x27/0xa0
[ 12.747451] dump_stack+0x10/0x20
[ 12.747832] panic+0x366/0x3c0
[ 12.748166] mount_root_generic+0x1a5/0x360
[ 12.748808] mount_root+0x98/0x100
[ 12.749218] ? __pfx_kernel_init+0x10/0x10
[ 12.749573] prepare_namespace+0x6c/0x2f0
[ 12.749863] kernel_init_freeable+0x1c6/0x210
[ 12.750166] kernel_init+0x1b/0x200
[ 12.750468] ret_from_fork+0x47/0x70
[ 12.750756] ? __pfx_kernel_init+0x10/0x10
[ 12.751092] ret_from_fork_asm+0x1b/0x30
[ 12.751612] </TASK>
[ 12.753174] Kernel Offset: 0xe00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[ 12.754630] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---
Если вернуть всё обратно - работает
Заметил также особенность - если скопировать из /bin в /home mc, то ядро выдаст ту же ошибку! А если из home удалить его, то опять все работатет.
Из-за чего так? Казалось бы, все есть, работает, а если скопировать, то уже все...
Может кто-то объяснить?
initrd
Ядро
Чтобы работало без ошибок, удалите mc из /home