Différences entre versions de « Émulation »

De Cliss XXI
Sauter à la navigation Sauter à la recherche
imported>SylvainBeucler
imported>SylvainBeucler
m
 
(9 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
But du jeu: tester des exécutables Debian-PPC avant de les installer chez l'usager - mais depuis mon PC.
+
Utilisations:
 +
* tester des exécutables Debian-PPC avant de les installer chez l'usager - mais depuis mon PC.
 +
* fournir des systèmes complets facilement installables (ex: une instance de Apache/PHP/MySQL/TikiWiki pré-installée)
 +
* tester rapidement les phases d'initialisation d'un PC (ex: configurations LILO/GRUB)
  
== QEMU ==
+
Les émulateurs libres du moment:
 +
* [[QEMU]]: * -> (x86, x86_64, ARM, MIPS, PPC, ARM, SPARC) - lance une VM ou un exécutable
 +
* [http://www.virtualbox.org/ VirtualBox]: PC->PC (nécessiste module noyau de virtualisation); plusieurs [http://www.virtualbox.org/wiki/Editions versions], une libre et une propriétaire
 +
* [http://bochs.sourceforge.net/ Bochs]: * -> PC (lent?, 32/64bits)
 +
* [[PearPC]]: * -> PPC
 +
* [http://maconlinux.org/ Mac-on-Linux]: PPC->PPC
  
* http://fabrice.bellard.free.fr/qemu
+
== Autres techniques ==
* [http://fabrice.bellard.free.fr/qemu/download.html Dernière version précompilée]
 
aptitude install qemu
 
  
Attention, le module kqemu du même auteur pour aller plus vite est propriétaire - à éviter donc. Utilisez à la place [http://savannah.nongnu.org/projects/qvm86/ qvm86].
+
* [http://kvm.sf.net/ KVM] et [http://xensource.com/ Xen]: peuvent faire GNU/Linux (paravirtualisation) mais aussi Windows (s'il y a virtualization [http://en.wikipedia.org/wiki/X86_virtualization au niveau processeur])
 +
* [[UserModeLinux]]: un cas à part, fonctionnement autonome
  
=== Compiler et tester un exécutable de test ===
+
== Perfs ==
  
Pour obtenir powerpc-linux-gcc: [[Compilation croisée]]
+
Disque:
 
+
* Physique:
  $ cat <<EOF > hello.c
+
$ sudo hdparm -tT /dev/sda
  #include <stdio.h>
+
 +
/dev/sda:
 +
  Timing cached reads:  1412 MB in  2.00 seconds = 706.25 MB/sec
 +
  Timing buffered disk reads:  72 MB in  3.01 seconds =  23.96 MB/sec
 +
* QEMU sur partition physique:
 +
$ qemu /dev/hda -kernel bzImage -append "root=/dev/hda7 clocksource=pit"
 +
qemu$ hdparm -tT /dev/hda
 +
 +
/dev/hda:
 +
  Timing cached reads:  636 MB in  2.00 seconds = 318.33 MB/sec
 +
  Timing buffered disk reads:  38 MB in  3.11 seconds =  12.22 MB/sec
 +
* QEMU sur partition physique + kqemu:
 +
/dev/hda:
 +
  Timing cached reads:  1840 MB in  2.00 seconds = 921.23 MB/sec
 +
  Timing buffered disk reads:  34 MB in  3.17 seconds =  10.73 MB/sec
 +
* QEMU sur image disque:
 +
  $ qemu debian.img -kernel-kqemu
 +
  qemu$ hdparm -tT /dev/hda
 
   
 
   
  int main(void) {
+
  /dev/hda:
  return ! printf("Hello world!\n");
+
  Timing cached reads:   1884 MB in 1.99 seconds = 946.45 MB/sec
}
+
  Timing buffered disk reads:   22 MB in 3.21 seconds =  6.86 MB/sec
EOF
+
* UML sur partition physique
$ powerpc-linux-gcc hello.c -Wall -ansi -pedantic -static
+
  [TODO]
$ qemu-ppc a.out
+
* UML sur image disque
Hello world!
+
  [TODO]
 
 
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 [http://fabrice.bellard.free.fr/qemu/download.html 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 <code>/dev/net/tun</code>:
 
qemu-system-ppc -prep -localtime -kernel zImage.prep linux-ppc.img
 
 
 
À l'intérieur, vous pouvez [http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC25]:
 
  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
 
 
 
* [http://www.overselfresearch.com/kb/qemu.html Installing from Scratch...]: HOWTO pour recréer l'image Debian Sarge
 
 
 
=== 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 <code>install-powerpc-2.4 ramdisk_size=10000</code> au boot.
 
 
 
=== Démarrer sur son 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" # ...
 
 
 
=== Optimisation PC->PC ===
 
 
 
[http://savannah.nongnu.org/projects/qvm86 qvm86] permettait d'avoir une émulation plus rapide mais le code n'a pas été touché depuis 2005-09-04 (qemu 0.7.1), le code ne compile plus de toute façon (probablement des changements dans gcc) et l'auteur encourage [http://savannah.nongnu.org/forum/forum.php?forum_id=4748] de passer à VirtualBox à la place. Il y a un [http://lists.gnu.org/archive/html/qvm86-devel/2006-02/msg00000.html patch] plus récent mais je n'arrive pas à savoir sur quelle version de qemu il fonctionne.
 
 
 
Remarque: l'équivalent propriétaire de qvm86 ne donne pas nécessairement de bons résultats de toute façon. Win98 fonctionne mieux sans, par exemple. Ce n'est donc pas indispensable. VirtualBox en revanche ne fonctionne apparement pas sans le module noyau - et ne fournit certaines fonctionnalités que dans sa [http://www.virtualbox.org/wiki/Editions version] propriétaire.
 
 
 
=== 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 ([http://users.rsise.anu.edu.au/~okeefe/p2b/power2bash/power2bash.html][http://www.tldp.org/HOWTO/Bootdisk-HOWTO/]).
 
 
 
==== Configuration précise ====
 
 
 
Analyse de la configuration,
 
 
 
* Depuis une image qemu qui fonctionne:
 
$ uname --machine
 
i686
 
$ cat /proc/cpuinfo
 
[...]
 
model name      : Pentium II (Klamath)
 
[...]
 
$ 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
 
 
 
== PearPC ==
 
 
 
http://pearpc.sourceforge.net/
 
  aptitude install pearpc
 
 
 
Créer un disque de 3GB [http://pearpc.sourceforge.net/idesetup.html]:
 
dd if=/dev/zero of=myharddisk.img bs=516096 seek=6241 count=0
 
 
 
Note: le fichier image est composé initialement de blocks vides, qui sont optimisés par ext2:
 
$ ls -lh myharddisk.img
 
-rw-r--r--  1 sylvain sylvain 3,0G 2006-05-05 01:36 myharddisk.img
 
$ du -sh myharddisk.img
 
0      myharddisk.img
 
 
 
Choisir l'image à lancer: modifier <code>/etc/ppc.conf</code>:
 
pci_ide0_master_image = "myharddisk.img"
 
pci_ide0_slave_image = "debian-31r2-powerpc-netinst.iso"
 
 
 
Lancer l'émulateur:
 
ppc
 
  
 
== Liens ==
 
== Liens ==
  
 
* [http://en.wikipedia.org/wiki/Comparison_of_virtual_machines Comparison of virtual machines] sur Wikipédia
 
* [http://en.wikipedia.org/wiki/Comparison_of_virtual_machines Comparison of virtual machines] sur Wikipédia
* [http://esaracco.free.fr/documentations/qemu/qemu/ Guide simplifié pour QEMU]
+
* [http://www.osdev.org/osfaq2/index.php/Disk%20Images%20Under%20Linux Disk Images Under Linux]: créer des images disques complètes avec table de partition, et comment les monter (mount -o loop,offset=32256)
* [http://www.osdev.org/osfaq2/index.php/Disk%20Images%20Under%20Linux Disk Images Under Linux]: créer des images disques complètes avec table de partition, et comment les monter
 
* [http://www.kidsquid.com/cgi-bin/moin.cgi/FrontPage Unofficial #qemu Wiki]
 
* [http://bochs.sourceforge.net/ Bochs]: émulateur pour x86&x64 uniquement
 
* [http://kvm.sf.net/ KVM] et [http://xensource.com/ Xen]: peuvent faire GNU/Linux mais aussi Windows, mais s'il y a virtualization [http://en.wikipedia.org/wiki/X86_virtualization au niveau processeur]
 
* [[UserModeLinux]]
 

Version actuelle datée du 25 février 2007 à 23:54

Utilisations:

  • tester des exécutables Debian-PPC avant de les installer chez l'usager - mais depuis mon PC.
  • fournir des systèmes complets facilement installables (ex: une instance de Apache/PHP/MySQL/TikiWiki pré-installée)
  • tester rapidement les phases d'initialisation d'un PC (ex: configurations LILO/GRUB)

Les émulateurs libres du moment:

  • QEMU: * -> (x86, x86_64, ARM, MIPS, PPC, ARM, SPARC) - lance une VM ou un exécutable
  • VirtualBox: PC->PC (nécessiste module noyau de virtualisation); plusieurs versions, une libre et une propriétaire
  • Bochs: * -> PC (lent?, 32/64bits)
  • PearPC: * -> PPC
  • Mac-on-Linux: PPC->PPC

Autres techniques

Perfs

Disque:

  • Physique:
$ sudo hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   1412 MB in  2.00 seconds = 706.25 MB/sec
 Timing buffered disk reads:   72 MB in  3.01 seconds =  23.96 MB/sec
  • QEMU sur partition physique:
$ qemu /dev/hda -kernel bzImage -append "root=/dev/hda7 clocksource=pit"
qemu$ hdparm -tT /dev/hda

/dev/hda:
 Timing cached reads:   636 MB in  2.00 seconds = 318.33 MB/sec
 Timing buffered disk reads:   38 MB in  3.11 seconds =  12.22 MB/sec
  • QEMU sur partition physique + kqemu:
/dev/hda:
 Timing cached reads:   1840 MB in  2.00 seconds = 921.23 MB/sec
 Timing buffered disk reads:   34 MB in  3.17 seconds =  10.73 MB/sec
  • QEMU sur image disque:
$ qemu debian.img -kernel-kqemu
qemu$ hdparm -tT /dev/hda

/dev/hda:
 Timing cached reads:   1884 MB in  1.99 seconds = 946.45 MB/sec
 Timing buffered disk reads:   22 MB in  3.21 seconds =   6.86 MB/sec
  • UML sur partition physique
[TODO]
  • UML sur image disque
[TODO]

Liens