Différences entre versions de « QEMU »

De Cliss XXI
Sauter à la navigation Sauter à la recherche
imported>SylvainBeucler
imported>SylvainBeucler
Ligne 265 : Ligne 265 :
 
  Support for frame buffer devices (FB)
 
  Support for frame buffer devices (FB)
 
  Cirrus Logic support (FB_CIRRUS)
 
  Cirrus Logic support (FB_CIRRUS)
 +
 +
IPSec
 +
=====
 +
 +
#? Transformation user configuration interface (XFRM_USER) # for racoon only?
 +
PF_KEY sockets (NET_KEY)
 
   
 
   
 
  Virtual FAT disk images
 
  Virtual FAT disk images
Ligne 313 : Ligne 319 :
 
  CONFIG_BINFMT_ELF=y
 
  CONFIG_BINFMT_ELF=y
 
  CONFIG_IDE=y
 
  CONFIG_IDE=y
  CONFIG_BLK_DEV_IDE=y
+
  [...]
CONFIG_BLK_DEV_IDEDISK=y
 
CONFIG_EXT3_FS=y
 
CONFIG_MPENTIUMII=y
 
CONFIG_EXT2_FS=y
 
CONFIG_TMPFS=y
 
CONFIG_UNIX=y
 
CONFIG_BLK_DEV_FD=y
 
CONFIG_BLK_DEV_IDECD=y
 
CONFIG_ISO9660_FS=y
 
CONFIG_JOLIET=y
 
CONFIG_PCI=y
 
CONFIG_NET=y
 
CONFIG_INET=y
 
CONFIG_PACKET=y
 
CONFIG_NETDEVICES=y
 
CONFIG_NET_ETHERNET=y
 
CONFIG_NET_PCI=y
 
CONFIG_NE2K_PCI=y
 
CONFIG_IKCONFIG=y
 
CONFIG_IKCONFIG_PROC=y
 
 
  CONFIG_CIFS=y
 
  CONFIG_CIFS=y
 
  CONFIG_VFAT_FS=y
 
  CONFIG_VFAT_FS=y

Version du 15 février 2007 à 17:24

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=...

Configuration du noyau:

# noyau minimal
make allnoconfig
Méthode
=======

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]


Misc
====

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
=====
#? Transformation user configuration interface (XFRM_USER) # for racoon only?
PF_KEY sockets (NET_KEY)

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]
?

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