J'ai téléchargé l'image Raspbian sur cette page . J'essaye de comstackr un kernel qui peut être utilisé pour démarrer l'image dans qemu.
J'ai téléchargé la source du kernel Linux de kernel.org et j'ai exécuté:
make versatile_defconfig make menuconfig
J'ai ensuite ajouté les fonctionnalités suivantes au kernel:
J'ai également monté en boucle l'image disque et:
/etc/ld.so.preload
/etc/fstab
pour utiliser /dev/sda1
et /dev/sda2
J'ai ensuite démonté l'image et essayé 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 kernel a pu monter le système de files mais il a immédiatement eu quelques 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 demandais si cela n'était pas lié à SELinux. J'ai essayé de démarrer le kernel 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?
J'ai aussi essayé ce qui suit, sans succès:
CONFIG_VFP
activé CONFIG_DEVTMPFS
et CONFIG_DEVTMPFS_MOUNT
CPU_V6
, CONFIG_MMC_BCM2835
, & CONFIG_MMC_BCM2835_DMA
gcc-linaro-arm-linux-gnueabihf-raspbian
Comstackr un programme C simple avec la chaine d'outils, puis passer son path au kernel via init=
works – m'amener à croire qu'il y a un décalage entre les formats binarys
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 ssortingpped
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, ssortingpped`
diff de l'en-tête ELF
J'ai compilé ce programme C simple avec la string d'outils:
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
… et copié dans /root
dans l'image, en changeant le paramètre init=
boot en /root/simple
. Cela me donne les éléments suivants lors du démarrage:
Starting bash... Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Il semble être étouffant sur l'appel execv()
.
Je sais que c'est une question assez ancienne, mais comme il n'y a toujours pas de bonnes réponses pour tester les images Raspberry Pi avec QEMU, permettez-moi de vous apporter une réponse partielle.
Je voulais utiliser l' image Ubuntu 16.04 raspi3 avec QEMU. Il a téléchargé, extrait, monté la partition de démarrage, a obtenu le file vmlinuz et le file initrd, et … qemu-system-arm -M blabla -cpu … -kernel … ne fonctionne pas. Écran noir.
Ensuite, en utilisant un kernel-qemu-4.4.34-jessie d' ici avec l'image xenial / rootfs conduit à la même init tué problème que vous avez.
Mais puisque j'utilise un kernel bien connu et que votre programme C simple lié statiquement fonctionne, il est probable que le problème ne concerne que les surfaces lorsque l'on utilise l'éditeur de liens dynamic. (Et l'éditeur de liens n'est pas particulièrement sensible aux kernelx, car le ld-2.24 du dernier raspbian basé sur debian9 (étirement) fonctionne bien sur un kernel basé sur la version debian8 (jessie) 4.4).
Même après avoir copié les files qui fonctionnent sur / avec l'image "jessie" dans l'image xenial ubuntu, je n'ai eu qu'une étrange erreur "calling preinit: KE".
Oh, et quiconque cherche à comstackr un kernel pour un Raspberry Pi, devrait vérifier ce site (qui fait directement reference aux docs / howto " officiels ").