Recherche de site Web

Comment faire fonctionner le Raspberry Pi Os dans une machine virtuelle avec Qemu et Kvm


Bien que de nombreux systèmes d’exploitation soient disponibles pour le Raspberry Pi, le système officiel est le Raspberry Pi Os. Le système d’exploitation est conçu pour fonctionner pour l’architecture arm, et peut être facilement installé sur la carte SD qui sera utilisée comme principal périphérique de stockage Raspberry Pi. Parfois, nous pouvons vouloir effectuer des tests ou essayer certaines applications sans avoir une machine physique Raspberry Pi ; dans ce tutoriel, nous allons voir comment nous pouvons créer une machine virtuelle avec le système Raspberry Pi Os en utilisant Qemu et Kvm (Kernel Virtual Machine).

Dans ce tutoriel, vous allez apprendre :

  • Comment installer qemu et kvm
  • Comment télécharger et vérifier l’intégrité de la dernière version du Raspberry Pi Os (Buster)
  • Comment exécuter le système d’exploitation Raspberry Pi dans une machine virtuelle

Comment faire fonctionner le Raspberry Pi Os dans une machine virtuelle avec Qemu et Kvm

Configuration logicielle requise et conventions utilisées

Installation de qemu

Qemu, tel que défini sur le site officiel, est un « émulateur et virtualiseur de machine générique et open source ». Nous pouvons l’utiliser pour exécuter le système d’exploitation de tout type de machine. Sur Linux, il est souvent utilisé en combinaison avec kvm, qui est une solution de virtualisation complète incluse dans le noyau. Pour pouvoir virtualiser notre système d’exploitation Raspberry Pi, nous devons l’installer sur notre distribution préférée, avec le paquet qemu-system-arm, qui fournit l’émulateur système pour les systèmes ARM. Qemu et kvm sont disponibles dans les dépôts de logiciels des principales distributions Linux. Pour les installer sur Fedora, nous pouvons utiliser le gestionnaire de paquets dnf :

sudo dnf install @virtualization qemu-system-arm

Ici, nous avons installé le groupe de paquets de virtualisation (notez le préfixe @) : il comprend tout ce qui est nécessaire pour la virtualisation sur Fedora, à l’exception du paquet qemu-system-arm, que nous avons installé séparément.

Sur Debian et les distributions basées sur Debian, nous pouvons lancer les commandes suivantes pour synchroniser notre distribution avec les dépôts distants et installer les paquets nécessaires sur notre système :

sudo apt-get update && sudo apt-get install qemu-system-arm qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon virt-manager

Téléchargement et vérification de la dernière image du système d’exploitation Raspberry Pi

Nous pouvons télécharger la dernière version du Raspberry Pi Os sur le site officiel de Raspberry Pi. Nous pouvons essentiellement choisir entre 3 versions du système : certaines sont plus minimales, d’autres sont livrées avec un plus grand ensemble de paquets et un bureau graphique a
déjà installé. Les liens de téléchargement sont les suivants :

  • Raspberry Pi OS Lite
  • Raspberry Pi Os avec ordinateur de bureau
  • Raspberry Pi Os avec ordinateur de bureau et packs supplémentaires

Dans ce tutoriel, nous allons utiliser la version « lite » de Raspberry Pi Os. En le téléchargeant à l’aide d’un navigateur web, il suffit de cliquer sur l’un des liens fournis ci-dessus. Si nous voulons le télécharger à partir de la ligne de commande, nous pouvons utiliser des outils comme wget ou curl :

Using wget
wget https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2021-01-12/2021-01-11-raspios-buster-armhf-lite.zip

Using curl
curl -O https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2021-01-12/2021-01-11-raspios-buster-armhf-lite.zip

En exécutant l’une des deux commandes ci-dessus, l’image sera téléchargée dans le répertoire de travail actuel. Une fois le téléchargement terminé, nous pouvons vérifier l’intégrité de l’image en comparant sa sha256sum avec celle fournie sur le site web.
Dans notre cas, la somme de hachage doit être d49d6fab1b8e533f7efc40416e98ec16019b9c034bc89c59b83d0921c2aefeef. Pour le vérifier, nous pouvons exécuter la commande suivante :

sha256sum 2021-01-11-raspios-buster-armhf-lite.zip

La commande ci-dessus, dans notre cas, renvoie le résultat suivant :

49d6fab1b8e533f7efc40416e98ec16019b9c034bc89c59b83d0921c2aefeef  2021-01-11-raspios-buster-armhf-lite.zip

Vous pouvez voir que les deux hashsums correspondent, donc nous sommes prêts à partir. Ce que nous devons faire maintenant, c’est extraire l’image, car elle est zippée. Pour ce faire, nous pouvons exécuter la commande suivante :

unzip 2021-01-11-raspios-buster-armhf-lite.zip

Comme le noyau inclus dans l’image système officielle ne peut pas être démarré directement à partir de Qemu, nous devons cloner un dépôt git qui contient une série de noyaux construits dans ce but précis. Nous verrons comment procéder dans la section suivante.

Obtenir des noyaux prêts pour qemu à partir de github

Le dépôt que nous devons cloner à partir de github est dhruvvyas90/qemu-rpi-kernel. Tout ce que nous avons à faire est d’exécuter la commande suivante :

git clone https://github.com/dhruvvyas90/qemu-rpi-kernel

Le processus de clonage peut prendre un certain temps, cela dépend de la vitesse de votre connexion Internet. Une fois le dépôt cloné, nous sommes prêts à partir. Voici son contenu :

ls qemu-rpi-kernel
kernel-qemu-3.10.25-wheezy   README.md
kernel-qemu-4.14.79-stretch  tools
kernel-qemu-4.19.50-buster   versatile-pb-buster-5.4.51.dtb
kernel-qemu-4.4.34-jessie    versatile-pb-buster.dtb
kernel-qemu-5.4.51-buster    versatile-pb.dtb
native-emuation

Comme nous voulons émuler la dernière version du Raspberry Pi Os, les fichiers dont nous avons besoin sont kernel-qemu-4.19.50-buster et versatile-pb-buster.dtb. La première est l’image réelle du noyau, la seconde est un objet blob d’arborescence de périphériques. À quoi sert ce fichier ?

Pour décrire le matériel disponible sur un système sur une carte Raspberry Pi, des fichiers DTS (Device Tree Source) sont utilisés ; la version compilée de ces fichiers est appelée DTB et stockée dans des fichiers portant l’extension .dtb. Dans notre cas, nous pourrions également utiliser le fichier kernel-qemu-5.4.51-buster, ainsi que le fichier versatile-pb-buster-5.4.51.dtb.

Émulation du système d’exploitation Raspberry Pi

Avec tous les fichiers nécessaires en place, nous pouvons enfin virtualiser l’image du Raspberry Pi Os. Veuillez noter qu’ici, je suppose que le répertoire de travail est le même que celui où nous avons téléchargé l’image système. Avant d’exécuter la commande proprement dite, ce n’est que sur Debian que nous devons démarrer le réseau ponté NATed par défaut, qui n’est pas démarré automatiquement ; Pour ce faire, nous devons exécuter :

sudo virsh --connect=qemu:///system net-start default

Pour le faire démarrer automatiquement, nous pouvons exécuter :

sudo virsh --connect=qemu://system net-autostart default

Maintenant, pour construire la machine virtuelle, nous devons exécuter la commande suivante :

sudo virt-install \
  --name rpios  \
  --arch armv6l \
  --machine versatilepb \
  --cpu arm1176 \
  --vcpus 1 \
  --memory 256 \
  --import  \
  --disk 2021-01-11-raspios-buster-armhf-lite.img,format=raw,bus=virtio \
  --network bridge,source=virbr0,model=virtio  \
  --video vga  \
  --graphics spice \
  --boot 'dtb=qemu-rpi-kernel/versatile-pb-buster.dtb,kernel=qemu-rpi-kernel/kernel-qemu-4.19.50-buster,kernel_args=root=/dev/vda2 panic=1' \
  --events on_reboot=destroy

Une fenêtre virt-viewer devrait apparaître ; là, nous devrions pouvoir visualiser le démarrage du Raspberry Pi Os :

Jetons un bref coup d’œil aux options que nous avons utilisées pour construire la machine virtuelle avec la commande virt-install ; Certains sont assez évidents, d’autres un peu plus obscurs.

Tout d’abord, nous avons utilisé l’option --name : avec elle, nous pouvons définir le nom de l’instance de la machine virtuelle (il doit être unique). La deuxième option que nous avons utilisée est --arch : il est nécessaire de demander une architecture CPU non native pour le système guest
; Si nous ne l’utilisons pas, l’architecture hôte est supposée.

Avec l’option --machine, nous passons le type de machine à émuler à qemu : dans ce cas, nous avons utilisé versatilepb. Avec l’option --cpu, nous configurons le modèle de processeur et les fonctionnalités exposées à l’invité ; Ici, nous avons utilisé ARM1176, car le Raspberry Pi
est basé sur l’architecture arm.

L’option --vcpus est nécessaire pour définir le nombre de processeurs virtuels pour la machine invitée, un seul dans ce cas. Comme on pourrait le deviner facilement, à la place, l’option --memory est utilisée pour définir la mémoire à allouer à l’invité.

L’option --import est vraiment importante ici, car elle est utilisée pour indiquer à l’application de sauter l’installation du système d’exploitation et de simplement construire un invité autour d’une image déjà existante, qui est ensuite spécifiée avec l’option --disk.

Nous utilisons --network pour connecter l’invité au réseau hôte. Dans ce cas, nous nous connectons via le pont virbr0, qui est créé par défaut par libvirt. Avec l’option --video, nous spécifions quel type de périphérique vidéo doit être attaché à l’invité, et avec --graphics, nous spécifions comment l’affichage graphique de l’invité peut être accédé : dans ce cas, nous avons utilisé spice, pour utiliser le protocole du même nom.

Avec l’option --boot, il est possible de spécifier la dtb et le fichier du noyau à utiliser, mais aussi la ligne de commande du noyau avec kernel_args. Enfin, avec l’option --events, nous spécifions les valeurs des événements pour l’invité. Dans ce cas, nous détruisons pour le on_reboot événement.

Une fois la machine virtuelle démarrée, nous pouvons également la gérer graphiquement via l’application virt-manager. Nous pouvons maintenant profiter de nos Raspberry Pi Os virtualisés !

Conclusion

Dans ce tutoriel, nous avons vu comment nous pouvons exécuter une image brute Raspberry Pi Os en utilisant qemu et kvm, sans matériel Raspberry Pi réel. Nous avons vu comment télécharger et vérifier l’image système, comment l’extraire, comment cloner le dépôt git contenant le noyau et les fichiers dtb nécessaires pour démarrer l’image avec qemu, et la commande que nous devrions exécuter pour démarrer la virtualisation du système.

Articles connexes: