Estou tentando seguir vários guias na Internet para emular o Raspberry Pi na minha máquina Fedora 22. Eu encontrei esta pergunta: Emulando o raspbian com o QEMU e o usei para encontrar o kernel-qemu para pegar um kernel. Eu baixei 2015-09-24-raspbian-jessie.img
do pessoal do Raspberry Pi.
Quando tento executar qemu-system-arm
, fico com o kernel panic. Tem algo que estou perdendo?
Aqui está a qemu-system-arm
linha de comando que eu digitei:
qemu-system-arm -cpu arm1176 -m 256 -M versatilepb -no-reboot -nographic -kernel kernel-qemu -appc=2 console=ttyAMA0 rw" -hda 2015-09-24-raspbian-jessie.img -net nic -net user,hostfwd=tcp::9999-:22
Seguido pelas mensagens do kernel:
sd 0:0:0:0: [sda] Attached SCSI disk
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <[email protected]>
eth0: SMC91C11xFD (rev 1) at d089a000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
mousedev: PS/2 mouse device common for all mice
TCP cubic registered
NET: Registered protocol family 17
input: AT Raw Set 2 keyboard as /devices/fpga:06/serio0/input/input0
input: ImExPS/2 Generic Explorer Mouse as /devices/fpga:07/serio1/input/input1
EXT2-fs (sda2): error: couldn't mount because of unsupported optional features (244)
EXT4-fs (sda2): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (sda2): recovery complete
EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 8:2.
devtmpfs: mounted
Freeing init memory: 120K
Kernel panic - not syncing: Attempted to kill init!
[<c0032bec>] (unwind_backtrace+0x0/0xf0) from [<c03064dc>] (panic+0x58/0x170)
[<c03064dc>] (panic+0x58/0x170) from [<c0044054>] (do_exit+0x5d0/0x68c)
[<c0044054>] (do_exit+0x5d0/0x68c) from [<c004435c>] (do_group_exit+0x40/0xb0)
[<c004435c>] (do_group_exit+0x40/0xb0) from [<c004ed48>] (get_signal_to_deliver+0x1a8/0x378)
[<c004ed48>] (get_signal_to_deliver+0x1a8/0x378) from [<c002f124>] (do_signal+0x90/0x518)
[<c002f124>] (do_signal+0x90/0x518) from [<c002fa64>] (do_notify_resume+0x48/0x54)
[<c002fa64>] (do_notify_resume+0x48/0x54) from [<c002cc38>] (work_pending+0x24/0x28)
Respostas:
Como o @dastaan disse, a versão do kernel precisa corresponder ao arquivo img. Eu estava tentando usar um arquivo de imagem da versão do kernel 4.1 com um kernel 3.18.
Agora que estou usando a imagem correta, ela funciona.
Obrigado!
Edit: Fazer isso funcionar é bem simples: Pegue a imagem em https://github.com/dhruvvyas90/qemu-rpi-kernel/ e faça o download da imagem Raspian correspondente desejada em https://www.raspberrypi.org/ downloads / raspbian / . Atualmente, Jessie e Wheezy estão em ambos os lugares, mas não há garantia no futuro de que o kernel apropriado esteja disponível no site do Github. De qualquer forma, eu não estava tão impressionado com a velocidade, então estou pensando em colocar um Pi real na porta de rede com fio do meu laptop e alimentá-lo através de uma bateria auxiliar de celular de 5200 mAh e usar o VNC no laptop como um visor.
Eu não fiz Jessie trabalhar; esse era o problema - eu tinha um núcleo Wheezy e uma imagem de Jessie, mas não tinha um núcleo de Jessie.
fonte
Sinta-se à vontade para dar uma olhada no meu kernel habilitado para qemu: https://github.com/diederikdehaas/raspbian-kernel
Nas mensagens de confirmação, você pode encontrar descrições detalhadas sobre o que e como as coisas foram alteradas.
A maior parte foi baseada neste artigo: https://web.archive.org/web/20131210001638/http://xecdesign.com/compiling-a-kernel/
fonte
A maioria dos guias está desatualizada e contém links quebrados. Você deve usar um kernel corrigido que corresponda à versão raspbian que você está usando.
O guia a seguir funciona a partir de fevereiro de 2017. Ele possui um script que cuida da alteração da imagem raspbian para execução no QEMU e também compartilha sua conexão de rede com o raspbian automaticamente.
https://ownyourbits.com/2017/02/06/raspbian-on-qemu-with-network-access/
fonte
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 27-05-2016, kernel vanilla
Passos:
Compile o QEMU 2.9.0 da fonte:
Faça o download da imagem e extraia o kernel e o dts:
Baixe a imagem e descompacte-a:
Monte a segunda imagem da partição. A maneira mais fácil é:
Isso funciona apenas com as
losetup
versões mais recentes do Ubuntu 16.04, outros métodos em: /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576Isso imprime um dispositivo de loop, por exemplo:
assim fazemos:
Corre:
Você pode fazer login no terminal exibido no terminal host.
Limitações atuais:
-M raspi2
foi adicionado no QEMU 2.6.0 e o Ubuntu 16.04 possui apenas o QEMU 2.5.0, portanto, precisamos compilar o QEMU a partir da fonte. Mas isso não é difícil.Ubuntu 16.04, QEMU 2.5.0, Raspbian 27/05/2016, kernel modificado
Este método usa o
-M versatilepb
que está presente no QEMU 2.5.0 do Ubuntu 16.04.A desvantagem é que você precisa fazer o download de um kernel modificado (consulte Emulando com o Qemu: por que o kernel extra? ) E modificar a imagem, para que seja menos representativo do sistema real.
Faça o download: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie
Nós escolhemos
4.4.12
uma vez que essa é a versão do kernel na imagem Raspbian.O processo para gerar esse blob do kernel está descrito no repositório em: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
Por que essa imagem extra do kernel é necessária: Emulando com o Qemu: por que o kernel extra?
Modifique a imagem Raspbian conforme mencionado em: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
Resumo:
Monte a imagem da mesma maneira que fizemos para o
-M raspi2
, mas use a segunda partição em vez da primeira:Edite a imagem:
Corre:
[falhou] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 27-05-2016, kernel vanilla
Neste Ubuntu mais recente, o QEMU 2.8.0 é o padrão, portanto, não precisamos compilar o QEMU da fonte para
-M raspi2
. No entanto, 2.8.0 trava na inicialização após a mensagem:Isso mostra o quão instável
-M raspi2
ainda é.[falhou] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 16/08/2017, kernel vanilla
Nesta imagem mais recente, usando o mesmo método para 27/05/2016, o kernel entra em pânico na inicialização com:
bztsrc/raspi3-tutorial
Metal desencapado RPI3 em QEMUhttps://github.com/bztsrc/raspi3-tutorial é um bom conjunto de exemplos que funcionam apenas no QEMU, iniciando com ultra-rápida em: Como fazer a emulação QEMU para imagens Raspberry Pi bare metal
fonte
losetup
é excessivamente complicado. Você pode ao invés de apenas usarfdisk -l your-image.img
, e depois usar o deslocamento para a partição namount
opção-o loop,offset=$((512*YOUR_OFFSET))
.Você pode fazer o download do meu kernel personalizado (4.1.7) para o Raspbian Jessie no meu github, polaco1782 . Siga as instruções nos arquivos doc.
fonte
fstab
as entradas mmcblk.