Emulation sur un PC Linux

48

Comment puis-je connecter une carte SD contenant un système d'exploitation Raspberry Pi à mon PC Linux et démarrer le système d'exploitation dans un émulateur?

Pourquoi VMWare ne fonctionne-t-il pas?

Quelles sont les limites de cette méthode?

Connexes: émulation sur un PC Windows

Alex L
la source
N'est-ce pas une question de virtualisation au lieu d'une question d'émulation?
Zoot
1
Je n'aime pas l'émulation vers la virtualisation ... pouvons-nous en discuter?
Alex Chamberlain
2
Le problème fondamental est que le Pi possède un processeur ARM incompatible avec x86, ce que VMWare sait exécuter. Vous avez besoin d'un émulateur.
Thorbjørn Ravn Andersen
Notez qu’une version de debian personnalisée avec de nombreuses fonctionnalités de Raspbian (y compris l’environnement de bureau PIXEL et la plupart des applications) est disponible au téléchargement sur le site Web de Raspberry Pi
angussidney

Réponses:

52

Oui c'est tout à fait possible. Cependant, en réalité, votre façon de penser est un peu différente.


Préambule

La carte SD contient une image du système d'exploitation. Et fonctionne en gonflant cette image lorsque l'appareil est allumé.

Comme vous le savez déjà, vous devez afficher cette image sur la carte SD afin de créer un système opérationnel. Cependant, ce que vous pouvez faire avant de flasher l’image, c’est de jouer avec QEMU , qui est un émulateur de processeur , et qui nous permet d’émuler le jeu d’instructions ARM.

De cette manière, toute modification apportée à l'image (installation, compilation, etc.) sera toujours présente une fois que vous l'aurez flashée sur la carte SD.

Je vais maintenant vous expliquer comment utiliser QEMU pour charger l'image. Je vais faire la démonstration avec l’image Arch Linux, mais le processus devrait être le même.


Utiliser QEMU

Pré-requis

Vous devrez acquérir QEMU pour votre système. QEMU ne devrait avoir qu’une seule exigence. Pour que les périphériques d’entrée fonctionnent, vous devez installer le package de développement SDL, qui devrait être disponible à partir de votre gestionnaire de packages.

Je recommande de télécharger le paquet en utilisant votre gestionnaire de paquets habituel:

Arch :

sudo pacman -S sdl qemu

Ubuntu :

Les versions plus récentes (depuis 14.04) ont un paquet pour cela:

sudo apt-get install qemu-system-arm

Pour les anciennes versions:

sudo apt-get install libsdl-dev
sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get update
sudo apt-get install qemu-system

Construire vous-même QEMU

Alternativement, vous pouvez construire QEMU vous-même. C'est très bien si vous voulez essayer une nouvelle version, mais elle peut être lente et être préparée à de nombreuses erreurs lors de la compilation! Notez que si QEMU est créé à partir de leur site Web, il doit être compilé pour le support ARM. Vérifiez donc d’abord vos dépôts de distribution. Cela peut être fait comme ça;

mkdir rpi-emu && cd rpi-emu
wget http://wiki.qemu.org/download/qemu-1.1.0-1.tar.bz2
tar xvjf qemu-1.1.0-1.tar.bz2
cd qemu-1.1.0-1
./configure –target-list=arm-softmmu,arm-linux-user
make
sudo make install

Vérifiez que vous disposez du support ARM avec:

qemu-system-arm --version
QEMU emulator version 1.0,1, Copyright (c) 2003-2008 Fabrice Bellard

Obtention de l'image

Nous travaillons avec Arch Linux, nous allons donc utiliser l'image Arch Arm. Mais remplacez-le par ce que vous souhaitez utiliser, ou peut-être avez-vous déjà une image. Dans ce cas, ignorez cette étape.

wget http://anorien.csc.warwick.ac.uk/mirrors/raspberrypi.org/images/archlinuxarm/archlinuxarm-29-04-2012/archlinuxarm-29-04-2012.zip
unzip archlinuxarm-29-04-2012.zip 

Pour que QEMU fonctionne, nous avons également besoin de l’image du noyau (qui se trouve dans le fichier .img).

Note: Je ne pense pas que cette étape soit nécessaire pour Debian. Quelqu'un s'il vous plaît confirmer.

Heureusement, des images précompilées sont disponibles et vous pouvez utiliser celle d’ ici ( téléchargement direct ).

TODO: Démontrez comment compiler une image du noyau ici?

Démarrer la VM

Vous devriez maintenant avoir:

  • Un fichier img que vous pouvez vérifier à l'aide du sha1 fourni (recommandé).
  • Une image du noyau (zImage).
  • QEMU pour ARM.

La machine virtuelle peut maintenant être démarrée à l'aide de la commande longue suivante:

qemu-system-arm -kernel zImage -cpu arm1176 -M versatilepb -serial stdio -append "root=/dev/sda2" -hda archlinuxarm-29-04-2012.img -clock dynticks

Notez que vous ne disposerez que de plusieurs centaines de mégaoctets de stockage à l'aide de cette méthode (tout ce qui est en réserve sur l'image). Un disque dur virtuel peut être créé en suivant le guide de l'utilisateur QEMU .

Jivings
la source
C'est plus ce que je cherchais - merci! Ceci est une excellente réponse de référence
Alex L
@ Alex Pas de problème, laissez-moi savoir si vous avez besoin de moi pour élaborer. De plus, dites-moi si une image Debian fonctionne et nous pouvons l’ajouter aux instructions si elle est différente.
Jivings
Il y a une procédure assez complète ici
Alex L
@ Alex C'est un bon, je n'avais pas vu ça.
Jivings
2
L'autre est fermé, je ne peux donc que voter pour rouvrir
Jivings
8

Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, noyau vanille

entrez la description de l'image ici

  1. Compilez QEMU 2.9.0 à partir des sources:

    sudo apt-get build-dep qemu-system-arm
    git clone --recursive git://git.qemu-project.org/qemu.git
    cd qemu
    git checkout v2.9.0
    ./configure
    make `nproc`
    
  2. Téléchargez l'image et extrayez le noyau et les dts:

    1. Téléchargez l'image et décompressez-la:

      wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip
      unzip 2016-05-27-raspbian-jessie.zip
      
    2. Montez la deuxième image de la partition. Le moyen le plus simple est:

      sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
      

      Ceci ne fonctionne qu'avec la dernière version losetupde Ubuntu 16.04, d’autres méthodes sont disponibles à l’ adresse suivante : https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576

      Ceci imprime un périphérique en boucle, par exemple:

      /dev/loop0
      

      alors nous faisons:

      sudo mkdir /mnt/rpi
      sudo mount /dev/loop0p1 /mnt/rpi
      cp /mnt/rpi/kernel7.img bcm2709-rpi-2-b.dtb .
      sudo umount /mnt/rpi
      sudo losetup -d /dev/loop0
      
  3. Courir:

    ./arm-softmmu/qemu-system-arm \
        -M raspi2 \
        -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2" \
        -cpu arm1176 \
        -dtb bcm2709-rpi-2-b.dtb \
        -sd 2016-05-27-raspbian-jessie.img \
        -kernel kernel7.img \
        -m 1G \
        -smp 4 \
        -serial stdio \
    ;
    

Vous pouvez ensuite vous connecter sur le terminal affiché sur votre terminal hôte.

Limites actuelles:

  • -M raspi2a été ajouté dans QEMU 2.6.0, et Ubuntu 16.04 n’a que QEMU 2.5.0, nous devons donc compiler QEMU à partir du code source. Mais ce n'est pas difficile.
  • l'interface graphique indique, mais ne répond pas à la souris / au clavier, testé à la fois en SDL et en VNC. Mais CLI fonctionne parfaitement cependant. Vous pouvez donc aussi bien utiliser l’image Lite qui a une interface graphique pour le moment.
  • pas de réseautage

Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, noyau modifié

Cette méthode utilise -M versatilepbce qui est présent sur le QEMU 2.5.0 d’Ubuntu 16.04.

L'inconvénient est que vous devez télécharger un noyau modifié (voir Emulation avec Qemu: pourquoi le noyau supplémentaire? ) Et modifier l'image afin qu'elle soit moins représentative du système réel.

  1. Téléchargement: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie

    Nous choisissons 4.4.12puisque c'est la version du noyau dans l'image Raspbian.

    Le processus permettant de générer ce blob de noyau est décrit à dans le référentiel à l' adresse : https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools.

    Pourquoi cette image de noyau supplémentaire est-elle nécessaire? Emulation avec Qemu: pourquoi le noyau supplémentaire?

  2. Modifiez l'image Raspbian comme indiqué à l' adresse : https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cadac

    Sommaire:

    1. Montez l'image comme nous l'avons fait pour le -M raspi2, mais utilisez la deuxième partition au lieu de la première:

      sudo mount /dev/loop0p2 /mnt/rpi
      
    2. Modifier l'image:

      # Comment out the line present there with #
      sudo vim /mnt/rpi/etc/ld.so.preload
      # Comment out the lines of type: "/dev/mmcblk*"
      sudo vim /mnt/rpi/etc/fstab
      
  3. Courir:

    sudo apt-get install qemu-system-arm
    qemu-system-arm \
        -kernel kernel-qemu-4.4.12-jessie \
        -cpu arm1176 \
        -m 256 \
        -M versatilepb \
        -no-reboot \
        -serial stdio \
        -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
        -hda 2016-05-27-raspbian-jessie.img
    

[Echec] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, noyau vanille

Sur cette nouvelle Ubuntu, QEMU 2.8.0 est la valeur par défaut, il n’est donc pas nécessaire de compiler QEMU à partir de la source pour -M raspi2. Cependant, 2.8.0 se bloque au démarrage après le message:

Console: switching to colour frame buffer device 100x30

Cela montre à quel point l'instabilité -M raspi2est encore.

[Echec] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, noyau vanille

Sur cette nouvelle image, en utilisant la même méthode que pour le 27/05/2016, le noyau panique au démarrage avec:

Please append a correct "root=" boot option; here are the available partitions:
...
[    4.138114] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

bztsrc/raspi3-tutorial RPI3 métal nu sur QEMU

https://github.com/bztsrc/raspi3-tutorial est une bonne série d'exemples qui fonctionnent uniquement avec QEMU, un démarrage ultra-rapide sur: Comment émuler QEMU pour des images Raspberry Pi en métal nu

Ciro Santilli 改造 中心 六四 事件
la source
2
Mec, tu es génial!
Subin
4

Vous ne pouvez pas faire ce que vous suggérez, car Raspberry Pi a une architecture de processeur différente de celle de la plupart des PC. Alors que la plupart des ordinateurs sont basés sur x86, RPi est un ordinateur basé sur ARM.

C'est la même raison que vous ne pouvez pas exécuter, par exemple, Microsoft Windows sur RPi.

VmWare ne fonctionnera pas, car il ne peut virtualiser que les systèmes d'exploitation x86 (32 bits et 64 bits). Certains émulateurs peuvent virtualiser ARM, tels que QEMU, mais ils exécutent une émulation logicielle complète sans prise en charge native de la virtualisation du processeur. Vous pouvez donc vous attendre à ce qu'ils soient assez lents.

Communauté
la source
3
Pourriez-vous inclure plus d'informations sur la manière d' émuler RasPi sur x86 (c'est-à-dire avec QEMU)? C'est ce sur quoi je voulais vraiment concentrer cette question, même si l'explication est appréciée.
Alex L
3
Désolé de voter, mais cela n'explique pas comment obtenir ce dont le demandeur a besoin.
G-.
D'autre part, il aborde d'autres points de la question auxquels l'autre ne répond pas. Je pense que vos votes ne sont pas mérités (ce n'est pas comme si cette question nous menait non plus)
3
Même sans support virtuel natal, slow est assez relatif puisque vous virtualisez probablement sur une machine beaucoup plus puissante qu'une framboise pi
Kenneth Wilke
0

Vous pouvez facilement essayer un simulateur Raspberry Pi inclus avec l'éditeur de capteurs, de lignes de commande et de fichiers sur iotify.io. Consultez notre documentation à l' adresse https://docs.iotify.io/ pour vous familiariser avec les différents projets et systèmes d'exploitation et vous familiariser avec l'environnement de travail de Raspberry Pi.

entrez la description de l'image ici

iotify
la source
1
Bien que cela soit techniquement une réponse, vous utilisez très clairement notre site pour de la publicité gratuite. Bien que ce que vous proposez puisse être gratuit, il n’est toujours pas acceptable. Nous apprécions votre contribution à la communauté, mais nous vous prions d’emporter votre publicité ailleurs.
Darth Vader
4
@DarthVader: Depuis que l'affiche a fait savoir qu'elle est affiliée au produit et qu'elle répond à la question, je suis encline à dire que c'est acceptable.
Jacobm001