J'ai téléchargé l'image Raspbian sur cette page. J'essaie de compiler un noyau qui peut être utilisé pour démarrer l'image dans qemu.
J'ai téléchargé la source du noyau Linux à partir de kernel.org et j'ai exécuté :
make versatile_defconfig
make menuconfig
J'ai ensuite ajouté les fonctionnalités suivantes au noyau :
- Prise en charge PCI (CONFIG_PCI)
- Prise en charge des périphériques SCSI (CONFIG_SCSI)
- Prise en charge des disques SCSI (CONFIG_BLK_DEV_SD)
- SYM53C8XX Prise en charge SCSI version 2 (CONFIG_SCSI_SYM53C8XX_2)
- Le système de fichiers Extended 3 (ext3) (CONFIG_EXT3_FS)
- Le système de fichiers Extended 4 (ext4) (CONFIG_EXT4_FS)
J'ai également monté en boucle l'image disque et :
- commenté
/etc/ld.so.preload
/etc/fstab
ajusté utiliser/dev/sda1
et/dev/sda2
J'ai ensuite démonté l'image et tenté de démarrer la machine avec :
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"
Le noyau a pu monter le système de fichiers mais il a immédiatement rencontré des problèmes :
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
Au début, je me suis demandé si ce n'était pas lié à SELinux. J'ai essayé de démarrer le noyau avec :
selinux=0 enforcing=0
…mais cela n'a fait aucune différence.
Qu'est-ce que je fais mal? Et que signifie cette erreur ?
Mises à jour
J'ai également essayé ce qui suit, sans succès :
- J'ai essayé de compiler avec et sans
CONFIG_VFP
activé - J'ai ajouté
CONFIG_DEVTMPFS
etCONFIG_DEVTMPFS_MOUNT
- Appliquer ce correctif et activer
CPU_V6
,CONFIG_MMC_BCM2835
, &CONFIG_MMC_BCM2835_DMA
- Utilisation de
gcc-linaro-arm-linux-gnueabihf-raspbian
chaîne d'outils -
Compiler un programme C simple avec la chaîne d'outils, puis transmettre son chemin au noyau via
init=
fonctionne - me laissant croire qu'il existe une différence entre les formats binaires-
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 de l'en-tête ELF
-
J'ai compilé ce programme C simple avec la chaîne d'outils :
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
…et l'a copié dans /root
dans l'image, en changeant le init=
paramètre de démarrage sur /root/simple
. Cela me donne ce qui suit lors du démarrage :
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Il semble s'étouffer avec le execv()
appeler.
Réponse acceptée :
J'ai également essayé de démarrer des images ARM avec QEMU sans succès fiable. Je suis désolé de dire que vous devrez utiliser du matériel réel pour travailler avec un système d'exploitation ARM, ou attendre patiemment que les développeurs créent un émulateur plus fiable pour ARM.
Connexe :rechercher des fichiers dont les noms de chemin contiennent plusieurs mots sans ordre spécifique entre eux ?
C'est en décembre 2018, et il y a toujours des problèmes avec qemu-system-arm
.
J'ai pu démarrer Raspbian Jessie sur un émulateur QEMU en utilisant un Ubuntu 18 Bionic fraîchement installé, mais ce n'était pas stable pour mon travail, j'ai donc dû le laisser pour du vrai matériel. Il gèlerait fréquemment.
qemu-system-arm
ne fonctionnait pas sur mon système d'exploitation, j'ai donc utilisé Virtualbox pour installer Ubuntu Bionic et à l'intérieur de Bionic j'ai installé Raspbian avec QEMU.
J'ai suivi ce tuto :https://azeria-labs.com/emulate-raspberry-pi-with-qemu/
Bonne chance