Différences entre versions de « Émulation »

De Cliss XXI
Sauter à la navigation Sauter à la recherche
imported>SylvainBeucler
imported>SylvainBeucler
m
 
(15 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é)?
 
 
 
=== 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" # ...
 
 
 
=== 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]
 

Version actuelle datée du 25 février 2007 à 22: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