Ho scaricato l'immagine Raspbian su questa pagina. Sto cercando di compilare un kernel che può essere utilizzato per avviare l'immagine all'interno di qemu.
Ho scaricato il sorgente del kernel Linux da kernel.org ed ho eseguito:
make versatile_defconfig
make menuconfig
Ho quindi aggiunto le seguenti funzionalità al kernel:
- Supporto PCI (CONFIG_PCI)
- Supporto per dispositivi SCSI (CONFIG_SCSI)
- Supporto disco SCSI (CONFIG_BLK_DEV_SD)
- Supporto SCSI SYM53C8XX versione 2 (CONFIG_SCSI_SYM53C8XX_2)
- Il filesystem Extended 3 (ext3) (CONFIG_EXT3_FS)
- Il filesystem Extended 4 (ext4) (CONFIG_EXT4_FS)
Ho anche montato in loop l'immagine del disco e:
- ha commentato
/etc/ld.so.preload
- regolato
/etc/fstab
per usare/dev/sda1
e/dev/sda2
Ho quindi smontato l'immagine e ho tentato di avviare la macchina con:
qemu-system-arm \
-M versatilepb \
-m 256 \
-kernel linux-4.3/arch/arm/boot/zImage \
-hda 2015-09-24-raspbian-jessie.img \
-serial stdio \
-append "root=/dev/sda2 rootfstype=ext4 rw console=ttyAMA0"
Il kernel è stato in grado di montare il filesystem ma ha subito riscontrato dei problemi:
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
CPU: 0 PID: 1 Comm: init Not tainted 4.3.0 #1
Hardware name: ARM-Versatile PB
[<c001b5c0>] (unwind_backtrace) from [<c0017e18>] (show_stack+0x10/0x14)
[<c0017e18>] (show_stack) from [<c0069860>] (panic+0x84/0x1ec)
[<c0069860>] (panic) from [<c0025b98>] (do_exit+0x81c/0x850)
[<c0025b98>] (do_exit) from [<c0025c5c>] (do_group_exit+0x3c/0xb8)
[<c0025c5c>] (do_group_exit) from [<c002dfcc>] (get_signal+0x14c/0x59c)
[<c002dfcc>] (get_signal) from [<c001bf28>] (do_signal+0x84/0x3a0)
[<c001bf28>] (do_signal) from [<c0017a94>] (do_work_pending+0xb8/0xc8)
[<c0017a94>] (do_work_pending) from [<c0014f30>] (slow_work_pending+0xc/0x20)
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
All'inizio, mi chiedevo se questo non fosse correlato a SELinux. Ho provato ad avviare il kernel con:
selinux=0 enforcing=0
…ma non faceva assolutamente alcuna differenza.
Che cosa sto facendo di sbagliato? E cosa significa questo errore?
Aggiornamenti
Ho anche provato quanto segue, senza fortuna:
- Ho provato a compilare con e senza
CONFIG_VFP
abilitato - Ho aggiunto
CONFIG_DEVTMPFS
eCONFIG_DEVTMPFS_MOUNT
- Applicare questa patch e abilitare
CPU_V6
,CONFIG_MMC_BCM2835
, &CONFIG_MMC_BCM2835_DMA
- Utilizzo di
gcc-linaro-arm-linux-gnueabihf-raspbian
catena di strumenti -
Compilare un semplice programma C con la toolchain e quindi passare il suo percorso al kernel tramite
init=
funziona, portandomi a credere che ci sia una discrepanza tra i formati binari-
file <sample program>
:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.26, BuildID[sha1]=e5ec8884499c51b248df60aedddfc9acf72cdbd4, not stripped
-
file <file from the image>
:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3e92423821f3325f8cb0ec5d918a7a1c76bbd72c, stripped`
-
diff dell'intestazione ELF
-
Ho compilato questo semplice programma C con la toolchain:
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
…e l'ho copiato in /root
nell'immagine, cambiando il init=
parametro di avvio su /root/simple
. Questo mi dà quanto segue all'avvio:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Sembra soffocare su execv()
chiama.
Risposta accettata:
Ho anche provato ad avviare le immagini ARM con QEMU senza successo affidabile. Mi dispiace dover dire che dovrai utilizzare hardware reale per lavorare con un sistema operativo ARM o attendere pazientemente che gli sviluppatori creino un emulatore più affidabile per ARM.
Correlati:cercare file i cui percorsi contengono più parole senza un ordine specifico tra di loro?
È dicembre 2018 e ci sono ancora problemi con qemu-system-arm
.
Sono stato in grado di avviare Raspbian Jessie su un emulatore QEMU utilizzando Ubuntu 18 Bionic appena installato, tuttavia non era stabile per il mio lavoro, quindi ho dovuto lasciarlo per l'hardware reale. Si bloccherebbe frequentemente.
qemu-system-arm
non funzionava sul mio sistema operativo, quindi ho usato Virtualbox per installare Ubuntu Bionic e all'interno di Bionic ho installato Raspbian con QEMU.
Ho seguito questo tutorial:https://azeria-labs.com/emulate-raspberry-pi-with-qemu/
Buona fortuna