Eu baixei a imagem Raspbian nesta página . Estou tentando compilar um kernel que pode ser usado para inicializar a imagem no qemu.
Eu baixei a fonte do kernel Linux do kernel.org e executei:
make versatile_defconfig
make menuconfig
Adicionei os seguintes recursos ao kernel:
- Suporte PCI (CONFIG_PCI)
- Suporte de dispositivo SCSI (CONFIG_SCSI)
- Suporte de disco SCSI (CONFIG_BLK_DEV_SD)
- SYM53C8XX Versão 2 Suporte SCSI (CONFIG_SCSI_SYM53C8XX_2)
- O sistema de arquivos estendido 3 (ext3) (CONFIG_EXT3_FS)
- O sistema de arquivos estendido 4 (ext4) (CONFIG_EXT4_FS)
Também montei em loop a imagem do disco e:
- comentado
/etc/ld.so.preload
- ajustado
/etc/fstab
para usar/dev/sda1
e/dev/sda2
Desmontei a imagem e tentei iniciar a máquina com:
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"
O kernel conseguiu montar o sistema de arquivos, mas imediatamente encontrou alguns problemas:
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
No começo, eu me perguntava se isso não estava relacionado ao SELinux. Eu tentei inicializar o kernel com:
selinux=0 enforcing=0
... mas não fez absolutamente nenhuma diferença.
O que estou fazendo de errado? E o que esse erro significa?
Atualizações
Eu também tentei o seguinte, sem sorte:
- Tentei compilar com e sem
CONFIG_VFP
habilitado - Eu adicionei
CONFIG_DEVTMPFS
eCONFIG_DEVTMPFS_MOUNT
- Aplicando este patch e permitindo
CPU_V6
,CONFIG_MMC_BCM2835
, &CONFIG_MMC_BCM2835_DMA
- Usando a
gcc-linaro-arm-linux-gnueabihf-raspbian
cadeia de ferramentas Compilar um programa C simples com a cadeia de ferramentas e depois passar seu caminho para o kernel via
init=
obras - levando-me a acreditar que há uma discrepância entre os formatos bináriosfile <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`
Eu compilei este programa C simples com a cadeia de ferramentas:
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
... e copiou para /root
a imagem, alterando o init=
parâmetro de inicialização para /root/simple
. Isso me dá o seguinte ao inicializar:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Parece estar sufocando na execv()
ligação.
fonte
cat .config | grep CONFIG_VFP
produzCONFIG_VFP=y
- parece que está ativado.CONFIG_VFP
e não faz diferença.versatilepb
é uma CPU ARM926, mais antiga que a ARM1176 do RPi, portanto os binários Raspbian podem estar usando algum outro recurso que não está sendo emulado. Em unixmen.com/emulating-raspbian-using-qemu , o-cpu arm1176
ajuda?Respostas:
Também tentei inicializar imagens ARM com QEMU sem sucesso confiável. Lamento dizer que você precisará usar hardware real para trabalhar com um sistema ARM ou aguardar pacientemente que os desenvolvedores criem um emulador mais confiável para o ARM.
Seu dezembro de 2018, e ainda há problemas com
qemu-system-arm
.Consegui inicializar o Raspbian Jessie em um emulador QEMU usando um Ubuntu 18 Bionic recém-instalado; no entanto, não era estável para o meu trabalho, então tive que deixá-lo para hardware real. Congelaria com freqüência.
qemu-system-arm
não funcionou no meu sistema operacional, então usei o Virtualbox para instalar o Ubuntu Bionic e, dentro do Bionic, instalei o Raspbian com o QEMU.Segui este tutorial: https://azeria-labs.com/emulate-raspberry-pi-with-qemu/
Boa sorte
fonte
Eu sei que é uma pergunta um tanto antiga, mas como existem ainda não há boas respostas para testar imagens do Raspberry Pi com QEMU, permita-me contribuir com uma resposta parcial.
Eu queria usar a imagem raspi3 do Ubuntu 16.04 com QEMU. Baixei, extraí, montei a partição de inicialização, obtive o arquivo vmlinuz e o arquivo initrd e ... qemu-system-arm -M blabla -cpu ... -kernel ... não funciona. Tela preta.
Então, usando um kernel-qemu-4.4.34-jessie daqui com a imagem xenial / rootfs levou ao mesmo problema "init kill" que você tem.
Mas como estou usando um kernel em bom estado e como o seu programa C vinculado estaticamente simples funciona, é provável que o problema só surja quando se usa o vinculador dinâmico. (E o vinculador não é particularmente sensível aos kernels, porque o ld-2.24 do último raspbian baseado em debian9 (stretch) funciona bem em um kernel 4.4 baseado em debian8 (jessie).)
Mesmo depois de copiar os arquivos que funcionam na / com a imagem "jessie" para a imagem xenial do ubuntu, recebi apenas um erro "chamando preinit: KE" estranho.
Ah, e qualquer pessoa que esteja procurando compilar um kernel para um Raspberry Pi, deve verificar este site, que faz referência direta aos documentos / howto " oficiais ".
fonte
O kernel do linux não roda mais o init, mas sim o systemd, que é como o init, mas recursos um pouco mais avançados e recursos extras de multitarefa, embora contra a filosofia unix, o systemd seja útil.
fonte