Différences entre versions de « QEMU »

De Cliss XXI
Sauter à la navigation Sauter à la recherche
imported>SylvainBeucler
imported>SylvainBeucler
Ligne 158 : Ligne 158 :
 
==== Configuration précise ====
 
==== Configuration précise ====
  
Analyse de la configuration,
+
===== Analyse de la configuration =====
  
 
* Depuis une image qemu qui fonctionne:
 
* Depuis une image qemu qui fonctionne:
Ligne 182 : Ligne 182 :
 
   ne2000 pci macaddr=...
 
   ne2000 pci macaddr=...
  
Configuration du noyau:
+
===== Méthode minimal =====
  
# noyau minimal
 
 
  make allnoconfig
 
  make allnoconfig
  
Méthode
+
Puis amélioration au fur et à mesure:
=======
+
* Erreurs au chargement du noyau
+
* File -> Search dans qconf
Erreurs au chargement du noyau
+
 
File -> Search dans qconf
+
===== Essentiel =====
 
 
Essentiel
 
=========
 
 
   
 
   
 
  Kernel support for ELF binaries (BINFMT_ELF)
 
  Kernel support for ELF binaries (BINFMT_ELF)
Ligne 210 : Ligne 205 :
 
   
 
   
 
   
 
   
La suite
+
===== La suite =====
========
 
 
   
 
   
 
  # Précision du type de processeur
 
  # Précision du type de processeur
Ligne 253 : Ligne 247 :
 
  # TODO: "Qemu can emulate several different models of network card. Valid values for type are ne2k_pci, ne2k_isa, rtl8139, smc91c111 and lance. Not all devices are supported on all targets." [http://qemu.org/qemu-doc.html#SEC10]
 
  # TODO: "Qemu can emulate several different models of network card. Valid values for type are ne2k_pci, ne2k_isa, rtl8139, smc91c111 and lance. Not all devices are supported on all targets." [http://qemu.org/qemu-doc.html#SEC10]
  
+
===== Divers =====
Misc
 
====
 
 
   
 
   
 
  Kernel .config support (IKCONFIG)
 
  Kernel .config support (IKCONFIG)
Ligne 266 : Ligne 258 :
 
  Cirrus Logic support (FB_CIRRUS)
 
  Cirrus Logic support (FB_CIRRUS)
 
   
 
   
IPSec
+
===== IPSec =====
=====
+
 
 +
Cf. http://www.ipsec-howto.org/x299.html
  
 
  #? Transformation user configuration interface (XFRM_USER) # for racoon only?
 
  #? Transformation user configuration interface (XFRM_USER) # for racoon only?
 
  PF_KEY sockets (NET_KEY)
 
  PF_KEY sockets (NET_KEY)
 
   
 
   
  Virtual FAT disk images
+
  IP: AH transformation (INET_AH)
  =======================
+
IP: ESP transformation (INET_ESP)
# ex: qemu debian.img -hdb fat:/tmp
+
#?IP: IPComp transformation (INET_IPCOMP) # strictly necessary?
 +
IP: IPsec transport mode (INET_XFRM_MODE_TRANSPORT)
 +
IP: IPsec tunnel mode (INET_XFRM_MODE_TUNNEL)
 +
#?IP: IPsec BEET mode (INET_XFRM_MODE_BEET)
 +
 +
Null algorithms (CRYPTO_NULL)
 +
  AES cipher algorithms (i586) (CRYPTO_AES_586)
 +
 
 +
===== Virtual FAT disk images =====
 +
 
 +
Ex: qemu debian.img -hdb fat:/tmp
 
   
 
   
 
  VFAT (Windows-95) fs support (VFAT_FS)
 
  VFAT (Windows-95) fs support (VFAT_FS)
Ligne 284 : Ligne 287 :
 
   
 
   
 
   
 
   
Carte graphique
+
===== Carte graphique =====
===============
 
 
   
 
   
 
  0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446
 
  0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446
 
   
 
   
+
===== Supprimé pour l'instant =====
Supprimé pour l'instant
 
=======================
 
 
   
 
   
 
  # Software poweroff:
 
  # Software poweroff:
Ligne 302 : Ligne 302 :
 
  ?generic/default IDE chipset support (IDE_GENERIC)
 
  ?generic/default IDE chipset support (IDE_GENERIC)
 
   
 
   
+
===== Autre matériel =====
Autre matériel
 
==============
 
  
 
  0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI
 
  0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI
Ligne 314 : Ligne 312 :
 
  0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II]
 
  0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II]
 
  ?
 
  ?
 +
 +
===== Automatisation =====
  
 
On peut prédéfinir ces options dans un fichier <code>allno.conf</code>, pris en compte au moment du <code>make allnoconfig</code> (cf. le README du noyau). Le fichier se présente sous cette forme (préfixer par <code>CONFIG_</code> et finir par <code>=y</code> - comme dans un <code>.config</code>):
 
On peut prédéfinir ces options dans un fichier <code>allno.conf</code>, pris en compte au moment du <code>make allnoconfig</code> (cf. le README du noyau). Le fichier se présente sous cette forme (préfixer par <code>CONFIG_</code> et finir par <code>=y</code> - comme dans un <code>.config</code>):

Version du 16 février 2007 à 08:20

aptitude install qemu

Compiler et tester un exécutable de test

Pour obtenir powerpc-linux-gcc: Compilation croisée

$ cat <<EOF > hello.c
#include <stdio.h>

int main(void) {
  return ! printf("Hello world!\n");
}
EOF
$ powerpc-linux-gcc hello.c -Wall -ansi -pedantic -static
$ qemu-ppc a.out
Hello world!

Mais:

$ powerpc-linux-gcc hello.c -Wall -ansi -pedantic
$ qemu-ppc ./a.out
/lib/ld.so.1: No such file or directory
Erreur de segmentation

ToDo: trouver une façon de travailler pour gérer les dépendances (chroot recompilé)? Piste: l'archive gnemul avec quelques bib systèmes.

Des images de systèmes à télécharger

Sur http://free.oszoo.org/download.html

Essayer notamment:

btdownloadcurses http://free.oszoo.org/ftp/images/linux-ppc-20040716.tar.bz2.torrent #20M
btdownloadcurses http://free.oszoo.org/ftp/images/debian_sarge_ppc.tar.torrent #1Go!

Avec l'image de base, en tant que root pour avoir le réseau via /dev/net/tun:

qemu-system-ppc -prep -localtime -kernel zImage.prep linux-ppc.img

À l'intérieur, vous pouvez [1]:

ifconfig eth0 172.20.0.2 # qemu
scp me@172.20.0.1:fichier # système hôte

L'image de 1Go est un système Debian sarge PPC pré-installé complet:

qemu-system-ppc -prep -kernel vmlinuz-2.4.27.001 -hda debian_sarge_ppc.img -user-net

Dans celle-ci le réseau à l'air différent:

  • 10.0.2.2: hôte et... serveur DHCP!
  • 10.0.2.15: qemu

Tester une installation

wget http://cdimage.debian.org/debian-cd/3.1_r2/powerpc/iso-cd/debian-31r2-powerpc-netinst.iso
qemu-img create debian_sarge_ppc.img 500M
qemu-system-ppc -hda debian_sarge_ppc.img -cdrom debian-31r2-powerpc-netinst.iso -boot d

D'après le HOWTO, le noyau 2.6 ne passe pas - utiliser install-powerpc-2.4 ramdisk_size=10000 au boot.

Démarrer sur son propre disque-dur

qemu -snapshot -hda /dev/hda -hdb /dev/hdb

Démarrer sur une image de partition

(et non sur une image de disque complet)

qemu -hda debian.img -kernel bzImage -append "root=/dev/hda" # ...

VNC

Exemple:

qemu -vnc :0 -k fr os.img

Pour y accéder:

vncviewer localhost

Très pratique pour passer une VM en tâche de fond.

Problème: la souris VNC et la souris système de sont pas synchro :/

Partage Samba avec l'hôte

qemu -smb /path os.img

ou plutôt, si vous êtes chez Debian:

sudo qemu -smb /path os.img

Purée, je vais encore râler contre les distros, mais QUEL BESOIN ONT CES FOUTUS PACKAGEURS de coder en dur secrets.tdb dans /var/lib/ alors que c'est sensé être configurable (option private dir)? Cf. debian/patch/fhs.patch. Du coup il n'est plus possible de lancer smbd sans être root, faute de droits >(


Dans la VM, au choix:

mount //10.0.2.4/qemu smb/
mount -t cifs //10.0.2.4/qemu smb/
smbclient //10.0.2.4/qemu

Optimisation PC->PC

KQEMU - QEMU Accelerator Module

KQEMU est libre depuis le 5 février :)

Il permet d'accélérer des systèmes à base de Linux ou de W2K et ultérieur.

Remarque: kqemu ne donne pas nécessairement de bons résultats de toute façon. Win98 fonctionne mieux sans, par exemple. Il paraît que WXP peut être instable, désactiver éventuellement l'ACPI.

Si j'ai bien compris, il y a trois mode:

  • pas d'accélération (option -no-kqemu)
  • accélération normale (pas d'option et /dev/kqemu installé)
  • accélération noyau (-kernel-kqemu)

qvm86

qvm86 permettait d'avoir une émulation plus rapide mais le code n'a pas été touché depuis 2005-09-04 (qemu 0.7.2), et l'auteur encourage [2] de passer à VirtualBox à la place. Il y a un patch plus récent mais je n'arrive pas à savoir sur quelle version de qemu il fonctionne. Apparemment [3] le patch s'applique sur la v0.8.0 mais ne contient que les changements sur qvm86, pas les changements correspondants sur qvm86 (notamment, il manque une mise à jour de patch.qvm86).

Compilation:

cvs -d:pserver:anonymous@cvs.sv.gnu.org:/sources/qemu co -D 2006-09-05 qemu
cd qemu/
cvs -d:pserver:anonymous@cvs.sv.gnu.org:/sources/qvm86 co qvm86
cat qvm86/patch.qvm86 | patch -p0
./configure --target-list=i386-softmmu --cc=gcc-3.3
make
# sudo make install
# cf. i386-softmmu/qemu et qvm86/qvm86.ko

Je ne sais pas trop comment tester l'efficacité du module. En tout cas c'est un excellent moyen de reproduire un BSOD W98 ;) (note: cet OS n'est pas sensé fonctionner avec un accélérateur de toute façon)

Optimisation avec le noyau Linux

Il y a un patch très simple dans les sources de kqemu (linux-2.6.9-qemu-fast.patch) qui notamment (si j'ai bien compris) réserve une plage mémoire pour qemu. Je suppose que c'est de cela qu'il s'agit lorsque l'on voit des références à une commande qemu-fast. Cependant je ne sais pas comment produire cet exécutable.

Désinstallation de la version binaire

tar tzf qemu-0.8.2-i386.tar.gz | (cd / && sudo xargs rm)

QEMU-compatible kernel

Configuration rapide

make defconfig ARCH=i386
make xconfig
# Activer: NE2K_PCI=Y (ns2000 PCI network ethernet card)
make
file arch/i386/boot/bzImage

Ce noyau est malheureusement trop volumineux pour tenir sur une disquette (2.5Mo) - ce qui est nécessaire pour suivre certains HOWTO les séquences d'amorçage ([4][5]).

Utiliser éventuellement make ROOT_DEV=/dev/hda1.

Configuration précise

Analyse de la configuration
  • Depuis une image qemu qui fonctionne:
$ uname --machine
i686
$ cat /proc/cpuinfo
[...]
model name      : Pentium II (Klamath)
[...]
# Remarque: il y a une variante x86_64, avec qemu-system-x86_64
$ lspci
0000:00:00.0 Host bridge: Intel Corp. 440FX - 82441FX PMC [Natoma] (rev 02)
0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II]
0000:00:01.1 IDE interface: Intel Corp. 82371SB PIIX3 IDE [Natoma/Triton II]
0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI
0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446
0000:00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
  • Sur la console qemu (Ctrl+Alt+2):
(qemu) info network
VLAN 0 devices:
  user redirector
  ne2000 pci macaddr=...
Méthode minimal
make allnoconfig

Puis amélioration au fur et à mesure:

  • Erreurs au chargement du noyau
  • File -> Search dans qconf
Essentiel
Kernel support for ELF binaries (BINFMT_ELF)
# Disque-dur
# 0000:00:01.1 IDE interface: Intel Corp. 82371SB PIIX3 IDE [Natoma/Triton II]
ATA/ATAPI/MFM/RLL support (IDE)
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (BLK_DEV_IDE)
Include IDE/ATA-2 DISK support (BLK_DEV_IDEDISK)
#?PCI IDE chipset support (BLK_DEV_IDEPCI)
#?Generic PCI bus-master DMA support (BLK_DEV_IDEDMA_PCI)
#?Intel PIIXn chipsets support (BLK_DEV_PIIX)
#?? DMA?
Ext3 journalling file system support (EXT3_FS)


La suite
# Précision du type de processeur
Pentium-II/Celeron(pre-Coppermine) (MPENTIUMII)

# Servers (Apache...)
System V IPC (SYSVIPC)

# Systèmes de fichiers
Second extended fs support (EXT2_FS)
# /dev/shm
Virtual memory file system support (former shm fs) (TMPFS)
# /dev/log
Unix domain sockets (UNIX)

?
#Deadline I/O scheduler (IOSCHED_DEADLINE)
#Deadline (DEFAULT_DEADLINE)

# Floppy
Normal floppy disk support (BLK_DEV_FD)

# Lecteur CD-ROM
Include IDE/ATAPI CDROM support (BLK_DEV_IDECD)
# ^ À tester! ^
ISO 9660 CDROM file system support (ISO9660_FS)
Microsoft Joliet CDROM extensions (JOLIET)

# Network
# 0000:00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
PCI support (PCI)

Networking support (NET)
TCP/IP networking (INET)
Packet socket (PACKET)

Network device support (NETDEVICES)
Ethernet (10 or 100Mbit) (NET_ETHERNET)
EISA, VLB, PCI and on board controllers (NET_PCI)
PCI NE2000 and clones support (see help) (NE2K_PCI)
# TODO: "Qemu can emulate several different models of network card. Valid values for type are ne2k_pci, ne2k_isa, rtl8139, smc91c111 and lance. Not all devices are supported on all targets." [6]
Divers
Kernel .config support (IKCONFIG)
Enable access to .config through /proc/config.gz (IKCONFIG_PROC)
CIFS support (advanced network filesystem for Samba, Window and other CIFS compliant servers) (CIFS)

# For the vga=ask kernel parameter
Video mode selection support (VIDEO_SELECT)
Support for frame buffer devices (FB)
Cirrus Logic support (FB_CIRRUS)

IPSec

Cf. http://www.ipsec-howto.org/x299.html

#? Transformation user configuration interface (XFRM_USER) # for racoon only?
PF_KEY sockets (NET_KEY)

IP: AH transformation (INET_AH)
IP: ESP transformation (INET_ESP)
#?IP: IPComp transformation (INET_IPCOMP) # strictly necessary?
IP: IPsec transport mode (INET_XFRM_MODE_TRANSPORT)
IP: IPsec tunnel mode (INET_XFRM_MODE_TUNNEL)
#?IP: IPsec BEET mode (INET_XFRM_MODE_BEET)

Null algorithms (CRYPTO_NULL)
AES cipher algorithms (i586) (CRYPTO_AES_586)
Virtual FAT disk images

Ex: qemu debian.img -hdb fat:/tmp

VFAT (Windows-95) fs support (VFAT_FS)
Codepage 437 (United States, Canada) (NLS_CODEPAGE_437)
NLS ISO 8859-1 (Latin 1; Western European Languages) (NLS_ISO8859_1)
# Pas nécessaire pour fat:, mais indispensable pour monter de vraies
# partitions FAT françaises
# Codepage 850 (Europe) (NLS_CODEPAGE_850)


Carte graphique
0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446

Supprimé pour l'instant
# Software poweroff:
Power Management support (PM)
ACPI Support (ACPI)
Button (ACPI_BUTTON)

The IPv6 protocol (IPV6)

?generic/default IDE chipset support (IDE_GENERIC)

Autre matériel
0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI
?

0000:00:00.0 Host bridge: Intel Corp. 440FX - 82441FX PMC [Natoma] (rev 02)
?

0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II]
?
Automatisation

On peut prédéfinir ces options dans un fichier allno.conf, pris en compte au moment du make allnoconfig (cf. le README du noyau). Le fichier se présente sous cette forme (préfixer par CONFIG_ et finir par =y - comme dans un .config):

CONFIG_BINFMT_ELF=y
CONFIG_IDE=y
[...]
CONFIG_CIFS=y
CONFIG_VFAT_FS=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y

Note: en fait, il faut rajouter un certain nombre d'option qui sont automatiquement ajoutées par xconfig (notamment CONFIG_IDE_GENERIC pour le disque-dur...).

Liens