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/20 22:23] – [Debian Squeeze o Wheezy] 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 56: 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 65: 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 87: 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 105: 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 127: 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.1392931387.txt.gz · Last modified: 2014/02/20 22:23 by niccolo