User Tools

Site Tools


doc:appunti:prog:qemu_arm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:prog:qemu_arm [2014/02/15 23:32] – [Debian Squeeze da installer] niccolodoc:appunti:prog:qemu_arm [2014/02/20 23:07] (current) – [Debian armel su QEMU] niccolo
Line 1: Line 1:
 ====== Debian armel su QEMU ====== ====== Debian armel su QEMU ======
  
 +La necessità è quella di avere un box Arm dove fare compilazione nativa di pacchetti Debian. Su alcune architetture (LaCie, QNAP, ecc.) potrebbe essere troppo pesante o impossibile effettuare la compilazione. Anche l'ipotesi di cross-compilazione è sicuramente più complessa.
 ===== Debian Squeeze o Wheezy ===== ===== Debian Squeeze o Wheezy =====
  
Line 12: Line 13:
  
 <code> <code>
-qemu-system-arm -M versatileab -m 256 \+qemu-system-arm -M versatilepb -m 256 \
     -kernel vmlinuz-2.6.32-5-versatile -initrd initrd.img-2.6.32-5-versatile \     -kernel vmlinuz-2.6.32-5-versatile -initrd initrd.img-2.6.32-5-versatile \
     -hda "debian_squeeze_armel_standard.qcow2" -boot order=c \     -hda "debian_squeeze_armel_standard.qcow2" -boot order=c \
     -netdev tap,id=hostnet0,ifname=tap72,script=/home/kvm/armel/qemu-ifup \     -netdev tap,id=hostnet0,ifname=tap72,script=/home/kvm/armel/qemu-ifup \
     -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:00:03:72 \     -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:00:03:72 \
-    -nographic -serial telnet::4000,server,nowait,nodelay \+    -nographic -serial telnet::4072,server,nowait,nodelay \
     -append "root=/dev/sda1 console=ttyAMA0"     -append "root=/dev/sda1 console=ttyAMA0"
 </code> </code>
  
-Il comando avvia un host con architettura versatileab, 256 Mb di RAM, un'interfaccia di rete che viene connessa al device tap72 della macchina ospite, nessuna scheda grafica, una seriale connessa ad un server telnet sulla porta 4000/TCP, la console sulla stessa porta seriale.+Il comando avvia un host con architettura versatilepb, 256 Mb di RAM, un'interfaccia di rete che viene connessa al device tap72 della macchina ospite, nessuna scheda grafica, una seriale connessa ad un server telnet sulla porta 4072/TCP, la console sulla stessa porta seriale.
  
 Lo script **''/home/kvm/armel/qemu-ifup''** contiene le seguenti istruzioni: Lo script **''/home/kvm/armel/qemu-ifup''** contiene le seguenti istruzioni:
Line 40: Line 41:
  
 e consentendo il login dalla seriale aggiungendo ''ttyAMA0'' a **''/etc/securetty''**. e consentendo il login dalla seriale aggiungendo ''ttyAMA0'' a **''/etc/securetty''**.
 +
 +QEMU può emulare l'architettura **versatileab** e **versatilepb**. La //Application Baseboard// (AB) è considerata ormai obsoleta ed è stata sostituita dalla //Platform Baseboards// (PB), vedere la presentazione dell'architettura ARM **[[http://arm.com/products/tools/development-boards/versatile/|versatile]]**. Al fine di compilare nativamente per Arm non ci sono sostanziali differenze.
 +
 ===== Debian Squeeze da installer ===== ===== Debian Squeeze da installer =====
  
Line 53: Line 57:
 Si tratta dell' immagine **kernel** e dell'immagine **initrd** contenuti nell'installer. Si tratta dell' immagine **kernel** e dell'immagine **initrd** contenuti nell'installer.
  
-L'emulazione QEMU arm non dispone di un boot loader adeguato, l'immagine del kernel e della initrd devono essere presenti sulla macchina ospitante e passati sulla riga di comando a **''qemu-system-arm''**.+L'emulazione QEMU Arm non dispone di un boot loader adeguato, l'immagine del kernel e della initrd devono essere presenti sulla macchina ospitante e passati sulla riga di comando a **''qemu-system-arm''**.
  
-Dopo aver creato un'immagine disco da 4 Gb con **''qemu-img''**, si avvia l'installazione del sistema:+Dopo aver creato un'immagine disco di dimensioni adeguate (almeno 4 Gbcon **''qemu-img''**, si avvia l'installazione con:
  
 <code> <code>
Line 62: Line 66:
 </code> </code>
  
-Al termine dell'installazione si copia il kernel e l'immagine initrd installati nel sistema emulato sul sistema ospite. Quindi per avviare il sistema dall'immagine dell'hard disk emulato: +Al termine dell'installazione si copia il kernel e l'immagine initrd installati nel sistema emulato sul sistema ospite. Quindi si avvia l'emulatore con un comando come visto al paragrafo precedente.
- +
-<code> +
-qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.32-5-versatile \ +
-    -initrd initrd.img-2.6.32-5-versatile \ +
-    -hda hda.img -append "root=/dev/sda1" +
-</code> +
 ===== Con libvirt ===== ===== Con libvirt =====
  
-In teoria **[[http://libvirt.org/|libvirt]]** dovrebbe supportare QEMU, in pratica la libreria non passa all'emulatore **''qemu-system-arm''** i parametri giusti per farlo avviare.+Con **[[http://libvirt.org/|libvirt]]** 0.9.12.3 fornito da Debian Wheezy non si riesce a creare un file di configurazione adeguato che avvii l'emulatore QEMU per arm come visto sopra. Si potrebbe scrivere un wrapper da eseguire in sostituzione di **''/usr/bin/qemu-system-arm''**, che modifica i parametri passati all'emulatore.
  
-Il file di configurazione .xml che più si avvicina ad una configurazione funzionante è il seguente:+Tuttavia il problema è risolvibile installando libvirt 1.2.1-1~bpo70 dai Debian backports, questa è un file di configurazione per ''/etc/libvirt/qemu/armel.xml'' che ottiene più o meno la stessa della riga di comando vista sopra:
  
 <code xml> <code xml>
-<domain type='kvm'>+<domain type='qemu'>
   <name>armel</name>   <name>armel</name>
   <uuid>bf9adc6c-f05c-2698-1cf0-278fd86dc19a</uuid>   <uuid>bf9adc6c-f05c-2698-1cf0-278fd86dc19a</uuid>
Line 84: Line 81:
   <vcpu>1</vcpu>   <vcpu>1</vcpu>
   <os>   <os>
-    <type arch='arm' machine='versatileab'>hvm</type>+    <type arch='armv7l' machine='versatileab'>hvm</type>
     <kernel>/home/kvm/armel/vmlinuz-2.6.32-5-versatile</kernel>     <kernel>/home/kvm/armel/vmlinuz-2.6.32-5-versatile</kernel>
     <initrd>/home/kvm/armel/initrd.img-2.6.32-5-versatile</initrd>     <initrd>/home/kvm/armel/initrd.img-2.6.32-5-versatile</initrd>
-    <cmdline>root=/dev/sda1</cmdline> +    <!-- <initrd>/home/kvm/armel/initrd-installer.gz</initrd> --
-    <!--  +    <cmdline>root=/dev/sda1 console=ttyAMA0</cmdline>
-    <initrd>/home/kvm/armel/initrd-installer.gz</initrd> +
-    <cmdline>root=/dev/ram</cmdline+
-    -->+
     <boot dev='hd'/>     <boot dev='hd'/>
   </os>   </os>
Line 102: Line 96:
   <on_crash>destroy</on_crash>   <on_crash>destroy</on_crash>
   <devices>   <devices>
-    <!-- <emulator>/usr/bin/qemu-system-arm</emulator> --> +    <emulator>/usr/bin/qemu-system-arm</emulator>
-    <emulator>/usr/local/bin/qemu-system-arm-wrapper</emulator>+
     <disk type='file' device='disk'>     <disk type='file' device='disk'>
-      <source file='/home/kvm/armel/hda.img'/>+      <driver name='qemu' type='qcow2'/> 
 +      <source file='/home/kvm/armel/debian_squeeze_armel_standard.qcow2'/>
       <target dev='hda' bus='scsi'/>       <target dev='hda' bus='scsi'/>
     </disk>     </disk>
     <interface type='bridge'>     <interface type='bridge'>
-      <model type='virtio'/>+      <model type='rtl8139'/>
       <mac address='52:54:00:00:03:72'/>       <mac address='52:54:00:00:03:72'/>
       <source bridge='br0'/>       <source bridge='br0'/>
       <target dev='tap72'/>       <target dev='tap72'/>
-      <script path='no'/> 
     </interface>     </interface>
-    <graphics type='vnc' port='-1' listen='192.168.3.1'/> +    <serial type="tcp"> 
-    <serial type="null">+        <source mode="bind" host="127.0.0.1" service="4072"/> 
 +        <protocol type="telnet"/>
     </serial>     </serial>
   </devices>   </devices>
Line 124: Line 118:
 Alcune note: Alcune note:
  
-  * Se si tenta di allocare più di **256 Mb di RAM** all'emulatore, si ha un segmentation fault (pacchetto Debian quemy-system 0.12.5+dfsg-3).+  * Questa architettura emulata non consente più di **256 Mb di RAM**.
   * La configurazione di cui sopra la scheda di rete viene posta in [[..:linux:sa:virtualization#modalita_bridge|modalità bridge]], quindi la macchina ospite deve avere l'opportuna scheda **br0** configurata, la rete locale fornisce l'indirizzo via DHCP, ecc.   * La configurazione di cui sopra la scheda di rete viene posta in [[..:linux:sa:virtualization#modalita_bridge|modalità bridge]], quindi la macchina ospite deve avere l'opportuna scheda **br0** configurata, la rete locale fornisce l'indirizzo via DHCP, ecc.
 +  * Si è scelta l'architettura **versatileab** perché la versatilepb viene avviata con dei parametri sbagliati e si ha un errore **No PCI buses available**.
  
-Con questa configurazione vengono passati all'emulatore alcuni parametri errati o inutili, in particolare: 
- 
-  * **''-device virtio-net-pci,...''** 
-  * ... 
- 
-Per //filtrare// questi parametri ho scritto un piccolo wrapper, che riceve i parametri sbagliati, li corregge e quindi chiama l'emulatore in modo che funzioni. Lo potete scaricare qui: **{{qemu-system-arm-wrapper.txt|qemu-system-arm-wrapper}}** (togliere l'estensione .txt). 
doc/appunti/prog/qemu_arm.1392503541.txt.gz · Last modified: 2014/02/15 23:32 by niccolo