Table des matières

QEMU, l'émulateur multi-processeurs qui permet d'exécuter des OS pour toute sorte d'Ordinateur

Logo de l'émulateur QEMU :

Sites sur QEMU

Sites officiels QEMU :

Présentation de QEMU

QEMU (Quick Emulator) est un émulateur de type multiplate-forme, qui est compatible avec les 3/4 des OS comme Linux, Windows, macOS, tous les BSD actuels et les systèmes UNIX en général mais encore d'autres OS. Il est installable sur ses OS étant en autres, sous architecture processeur de type x86, x64, PPC, Sparc, MIPS ou encore ARM. Par défaut QEMU est un logiciel en ligne de commande mais il existe de nombreuses interface graphique tel que AQEMU, Virt-Manager, GNOME Boxes,…, il existe aussi des interfaces Web.

QEMU permet d'émuler les jeux d'instructions de processeurs suivants : x86 , x86-64 (nommé aussi AMD64), MIPS (MIPS 32 bits ou 64 bits), ARMv7 (ARM 32 bits) , ARMv8 (ARM64 aussi appelé AArch64), PowerPC (PowerPC 32 bits ou 64 bits) RISC-V (RISC-V 32 bits ou 64 bits), SPARC (SPARC 32 bits ou 64 bits), ETRAX CRIS, MicroBlaze, AVR (Atmel AVR), Xtensa, s390x, SH-4(SuperH), OpenRISC et il y aussi les architectures du passé tel que M68k (famille Motorala 68000), Alpha, HPPA (PA-RISC), Z80, et d'autres.

QEMU n'est pas seulement un émulateur mais permet d'agir comme un logiciel de virtualisation (back-end), par exemple avec l'hyperviseur par défaut de Linux nommé KVM (Kernel-based Virtual Machine) mais il peut aussi servir de back-end pour les hyperviseurs comme Xen, HVF d'Apple, WHPX de Windows ou NVMM de NetBSD. Niveau virtualisation, QEMU peut virtualiser des environnements invités (machines virtuelles) x86, ARM, PowerPC, MIPS (32 bits seulement), Sparc, ColdFire (Motorola M68K), S3903,… Par contre, pour permettre de virtualiser un OS invité, il faut qu'il soit de la même architecture processeur que l'OS de l'ordinateur hôte, par exemple pour virtualiser un OS pour processeur de type AMD64, il faut que votre OS Hôte soit aussi un OS de type AMD64.

À l'origine QEMU a été développé par Fabrice Bellard en 2003, puis en 2006, la fondation QEMU a été créée pour pousuivre le développement avec de nombreux contributeurs externes. C'est dans les années 2008 que QEMU a été adopté par l'hyperviseur de Linux, KVM. La dernière version stable de QEMU est QEMU 9.2.0, sortie le 10 décembre 2024, QEMU est sous licence GNU GPLv2.

Caractéristiques de QEMU

Composition de de QEMU

QEMU est un logiciel de type émulateur et virtualiseur associé à un hyperviseur comme KVM, de base, en ligne de commande. QEMU intègre différents composants en mode texte qui permettent une gestion complète de l'émulateur, ses composants sont les suivants :

Si vous sohaitez créer un disque virtuelle au format par défaut .qcow2, voici la commande :

qemu-img create -f qcow2 image_file.qcow2 4G

créée une image disque d'une taille de 4G, au format .qcow2 (vous n'êtes pas obligé de mettre .qcow2 à la fin de l'image). Puis pour avoir des infos sur l'image disque créée, tapez :

qemu-img info image_file.qcow2

vous affiche les détails de l'image disque :

image: image_file.qcow2
file format: qcow2
virtual size: 4 GiB (4294967296 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false
Avec les images disque de type .qcow2 vous pouvez, tout comme les .vdi de VirtualBox, avoir une image disque de 32 Go qui n'est pas fixe, c'est à dire, qui ne prenne que 2 Go (la taille de l'OS après installation) sur le média de stockage de votre ordinateur et qui ne grossisse qu'au fur et à mesure que vous installez des logiciels ou ajouter des fichiers à votre image disque.

QEMU en tant qu'émulateur

L'émulation consite à simuler un OS qui n'a absolument pas la même architecture processeur que l'OS Hôte, comme par exemple émuler un OS à processeur de type ARM sur un OS Hôte à processeur de type Intel x86_64, pour se faire, sous QEMU vous utiliserez qemu-system-aarch64 et là vous émulerez la totalité du matériels (processeur (CPU), mémoire vive (RAM), carte graphique (GPU), carte réseau,…etc) de la VM (Virtual Machine et machine virtuelle en français) de l'OS invité sur votre hôte à processeur de type x86_64. En définitive vous pourez émuler toute les VM qui n'ont aucun lien avec le processeur de votre ordinateur hôte mais avec des performances médiocre comparées à la virtualisation sous QEMU grâce à KVM.

QEMU permet d'émuler les architectures processeur suivantes : x86 , x86-64 (nommé aussi AMD64), MIPS (MIPS 32 bits ou 64 bits), ARMv7 (ARM 32 bits) , ARMv8 (ARM64 aussi appelé AArch64), PowerPC (PowerPC 32 bits ou 64 bits) RISC-V (RISC-V 32 bits ou 64 bits), SPARC (SPARC 32 bits ou 64 bits), ETRAX CRIS, MicroBlaze, AVR (Atmel AVR), Xtensa, s390x, SH-4(SuperH), OpenRISC, M68k (famille Motorala 68000), Alpha, HPPA (PA-RISC), Z80, et d'autres.

Exemple d'exécution de SunOS 4.1.4 sur processeur de type Sun Sparc via ordinateur hôte avec OS sous processeur de type Intel x86-64 :

qemu-system-sparc -monitor tcp::4444,server,nowait -bios ss5.bin -m 32 -nographic -hda SunOS-4.1.4.qcow2 -net nic,id=tap0 -net tap,ifname=tap0,script=no,downscript=no

pour décortiquer la commande, qemu-system-sparc appelle l'émulateur de type SPARC (Sun4m), la option de commande -monitor permet de se connecter avec telnet via le port réseau 4444, -bios permet de spécifier le bios pour le démarrage, -m 32 alloue 32 Mo de RAM, -nographic affiche dirextement d'OS dans le terminal (ou console), -hda SunOS-4.1.4.qcow2 spécifie l'image disque sur laquelle est installé l'OS, -net nic,id=tap0 -net tap,ifname=tap0,script=no,downscript=no permet de choisir le mode de connexion (en l'occurence avec l'interface réseau tap0 qui est une interface de type bridge nommé aussi pont réseau).

QEMU pour la virtualisation sous KVM

QEMU a aussi le rôle de virtualiseur lorsque l'on l'associe avec l'hyperviseur nommé KVM (d'autres hyperviseurs sont compatibles avec QEMU) qui est directement intégré au noyau Linux, donc vous n'avez rien à faire sous Linux, pour utiliser le mode de virtualisation de QEMU, le seul prérequis est que l'architecture processeur simulée soit la même que celui de l'ordinateur hôte. Ainsi QEMU utilise directement le CPU, RAM, GPU,…,donc les ressrouces de l'ordinateur hôte ce qui n'est plus une émulation du matériels mais une virtualisation et de se fait les performances sont quasiment natives.
Nous allons prendre l'exemple d'un hôte linux avec processeur de type Intel x86_64 qui virtualise un OS pour Intel x86_64 ou même un Intel x86 :

qemu-system-x86_64 -m 128 -cpu 486 -hda openserver-5.0.7-x86_2003_2G.qcow2 -cdrom SCO_OpenServer_5.0.7.iso -net nic,model=pcnet,id=br0 -net user -rtc base=localtime -boot c -k fr &

l'option -boot c permet de booter l'image disque de l'OS (-boot d permettrait de booter sur le CD), -cpu 486 spécifie le processeur Intel 80486, vous pouvez également utilisez cette commande:

kvm -m 128 -cpu 486 -hda openserver-5.0.7-x86_2003_2G.qcow2 -cdrom SCO_OpenServer_5.0.7.iso -net nic,model=pcnet,id=br0 -net user -rtc base=localtime -boot c -k fr &

qui est exactement la même commande car kvm n'est qu'un lien symbolique vers qemu-system-x86_64 sur les hôte de type Intel 64 bits.

Les interfaces graphiques sous QEMU

QEMU peut également être utiliser via des interfaces graphiques tel que :

Sachez que QEMU a servi de base et d'inspiration à VirtualBox, Xen-HVM, KVM, Win4Lin Pro Desktop, SerialICE, WinUAE, Unicorn, Limbo x86 PC Emulator et d'autres projet d'émulation ou virtualisation.

Documentation Complémentaire sur QEMU

Vous trouverez une large documentation sur l'émulateur, dans les tutoriels sur QEMU