Initramfs wbudowane w niestandardowe jądro Linuksa nie działa
Buduję niestandardowy obraz initramfs, który buduję jako archiwum CPIO w jądrze Linuksa (3.2).
Problem, który mam, polega na tym, że bez względu na to, co spróbuję, kernel nie wydaje się nawet próbować uruchomić z initramfs.
Pliki, które mam w moim archiwum CPIO:
<code>cpio -it < initramfs.cpio . init usr usr/sbin lib lib/libcrypt.so.1 lib/libm.so lib/libc.so.6 lib/libgcc_s.so lib/libcrypt-2.12.2.so lib/libgcc_s.so.1 lib/libm-2.12.2.so lib/libc.so lib/libc-2.12.2.so lib/ld-linux.so.3 lib/ld-2.12.2.so lib/libm.so.6 proc sbin mnt mnt/root root etc bin bin/sh bin/mknod bin/mount bin/busybox sys dev 4468 blocks </code>
Init jest bardzo prosty i powinien po prostu inicjować urządzenia i tworzyć powłokę (na razie):
<code>#!/bin/sh mount -t devtmpfs none /dev mount -t proc none /proc mount -t sysfs none /sys /bin/busybox --install -s exec /bin/sh </code>
W jądrze .config mam:
<code>CONFIG_INITRAMFS_SOURCE="../initramfs.cpio" CONFIG_INITRAMFS_ROOT_UID=0 CONFIG_INITRAMFS_ROOT_GID=0 CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=1 CONFIG_BLK_DEV_RAM_SIZE=32768 </code>
Kompilacje jądra i rozmiar uImage są większe w zależności od rozmiaru initramfs, więc wiem, że obraz jest pakowany. Jednak otrzymuję ten wynik po uruchomieniu:
<code>console [netcon0] enabled netconsole: network logging started omap_rtc omap_rtc: setting system clock to 2000-01-02 00:48:38 UTC (946774118) Warning: unable to open an initial console. Freeing init memory: 1252K mmc0: host does not support reading read-only switch. assuming write-enable. mmc0: new high speed SDHC card at address e624 mmcblk0: mmc0:e624 SU08G 7.40 GiB mmcblk0: p1 Kernel panic - not syncing: Attempted to kill init! [<c000d518>] (unwind_backtrace+0x0/0xe0) from [<c0315cf8>] (panic+0x58/0x188) [<c0315cf8>] (panic+0x58/0x188) from [<c0021520>] (do_exit+0x98/0x6c0) [<c0021520>] (do_exit+0x98/0x6c0) from [<c0021e88>] (do_group_exit+0xb0/0xdc) [<c0021e88>] (do_group_exit+0xb0/0xdc) from [<c0021ec4>] (sys_exit_group+0x10/0x18) [<c0021ec4>] (sys_exit_group+0x10/0x18) from [<c00093a0>] (ret_fast_syscall+0x0/0x2c) </code>
Z tego wyjścia nie wygląda na to, żeby próbowało wyodrębnić archiwum CPIO jako initramfs. Spodziewam się zobaczyć to wyjście printk, które jest obecne w kodzie linux init / initramfs.c:
<code>printk(KERN_INFO "Trying to unpack rootfs image as initramfs...\n"); </code>
Próbowałem systemu plików po zakończeniu uruchamiania (za pomocą chroot) i działa dobrze ... wierzę, że system plików / biblioteki są rozsądne.
Czy ktoś może mi dać jakieś wskazówki, co może być niepoprawne? Z góry dziękuję za wszelką pomoc!