Buduję niestandardowy obraz initramfs, który buduję jako archiwum CPIO w jądrze systemu Linux (3.2).Initramfs wbudowany w niestandardowe jądro Linuxa nie działa
Problem, który mam, polega na tym, że niezależnie od tego, co próbuję, jądro nie wydaje się nawet próbować uruchomić z initramfs.
Pliki mam w moim archiwum cpio:
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
Init jest bardzo prosta i należy po prostu urządzenia startowe i ikra powłokę (na razie):
#!/bin/sh
mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
/bin/busybox --install -s
exec /bin/sh
w jądrze. config mam:
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
Kernel buduje i wielkość uImage jest większa w zależności od wielkości initramfs, więc k teraz obraz jest pakowany. Jednak mam to wyjście kiedy uruchomić:
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)
Od tego wyjścia, to nie wygląda to nawet próbuje rozpakować archiwum cpio jako initramfs. Spodziewam się, aby zobaczyć ten printk wyjścia, który jest obecny w kodzie linux init/initramfs.c:
printk(KERN_INFO "Trying to unpack rootfs image as initramfs...\n");
Próbowałem raz uruchamianie systemu plików jest pełna (przy użyciu chroot) i działa dobrze ... więc wierzę system plików/biblioteki są w normie.
Czy ktoś mógłby mi podać kilka wskazówek, które mogą być nieprawidłowe? Z góry dziękujemy za wszelką pomoc!
Wygląda na to, że twoje jądro ulega awariom z prawdopodobnie niezwiązanego z nim powodu, albo podczas inicjowania urządzeń mmcblk, albo między tym, a tym, co następnie wygeneruje komunikat wyjściowy. Czy możesz tam dostać dodatkowe wydruki, aby zgłosić postęp? Na ile jesteś pewien, że twoje źródła jądra są odpowiednie dla tej płyty - czy wprowadziłeś zmiany, aby je zaadaptować (takie jak zakodowane na stałe tworzenie elementów mmcblk), w których mogą występować błędy? –
To ładuje się z tym kernelem, minus initramfs (używając większego systemu plików, który błysnąłem na NAND). Mam więc wątpliwości, czy to kwestia płyty. Pracuję nad tym, żeby dostać tam kilka odbitek, ale miałem nadzieję, że ktoś wskaże coś, co jest oczywiście nie tak z moim podejściem, zanim zwariowałem. – dag