Sto costruendo un'immagine di initramfs personalizzata che sto creando come archivio CPIO nel kernel di Linux (3.2).Initramfs integrato nel kernel Linux personalizzato non è in esecuzione
Il problema che sto avendo è che non importa quello che provo, il kernel non sembra nemmeno tentare di eseguire da initramfs.
I file che ho nel mio archivio 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 è molto semplice, e deve solo dispositivi init e generare una shell (per ora):
#!/bin/sh
mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
/bin/busybox --install -s
exec /bin/sh
nel kernel. config ho:
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 costruisce e la dimensione uImage è maggiore a seconda delle dimensioni initramfs, quindi k ora l'immagine viene imballata. Tuttavia ho questa uscita quando faccio il boot:
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)
Da quel uscita, non sembra come sta ancora cercando di estrarre l'archivio CPIO come initramfs. Mi aspetto di vedere questa uscita printk, che è presente nel codice linux init/initramfs.c:
printk(KERN_INFO "Trying to unpack rootfs image as initramfs...\n");
ho provato il filesystem una volta che avvio è completo (utilizzando chroot) e funziona bene ... quindi credo che il il filesystem/le librerie sono sane.
Qualcuno potrebbe darmi qualche suggerimento su cosa potrei aver sbagliato? Grazie in anticipo per qualsiasi assistenza!
Mi sembra che il tuo kernel stia andando in crash per un motivo probabilmente non correlato, sia durante l'inizializzazione dei dispositivi mmcblk o tra quello e qualunque cosa generi successivamente un messaggio di output. Puoi avere qualche stampino aggiuntivo lì per segnalare i progressi? Sei sicuro che le sorgenti del tuo kernel siano appropriate per questa scheda: hai apportato delle modifiche per adattarle (come l'istanziazione codificata delle cose di mmcblk) in cui potrebbero esserci degli errori? –
Si avvia bene con questo kernel, meno initramfs (usando il filesystem più grande che ho flashato in NAND). Quindi sono dubbioso che sia un problema di bordo. Sto lavorando per ottenere della stampa, ma speravo che qualcuno potesse indicare qualcosa di chiaramente sbagliato nel mio approccio prima che diventassi pazzo con quello. – dag