Differences

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

Link to this comparison view

so2:resurse:masini-virtuale [2018/02/19 15:48]
ionel.ghita [Mașina virtuală]
so2:resurse:masini-virtuale [2019/03/16 09:46] (current)
razvan.deaconescu [Rularea mașinii]
Line 5: Line 5:
 Mașina virtuală este un setup bazat pe qemu.  Ea nu include facilități pentru a edita, compila și depana module, deci va trebui să faceți acest lucru pe mașina fizică. ​ Mașina virtuală doar rulează un kernel minimal, modulele voastre și eventuale programe de test. Mașina virtuală este un setup bazat pe qemu.  Ea nu include facilități pentru a edita, compila și depana module, deci va trebui să faceți acest lucru pe mașina fizică. ​ Mașina virtuală doar rulează un kernel minimal, modulele voastre și eventuale programe de test.
  
-Pentru a rula mașina virtuală veți avea nevoie de o mașină Linux cu următoarele pachete: +Pentru a rula mașina virtuală ​și pentru a putea compila și folosi module de kernel ​veți avea nevoie de o mașină Linux la care să aveți un utilizator ​cu permisiuni de ''​root''/''​sudo''​ și pe care să instalați ​următoarele pachete: 
-  * build-essential +  * ''​flex''​ 
-  * qemu-system-x86 +  * ''​bison''​ 
-  * qemu-system-arm +  * ''​build-essential''​ 
-  * kvm +  * ''​gcc-multilib''​ 
-  * python3+  * ''​libncurses5-dev''​ 
 +  * ''​qemu-system-x86''​ 
 +  * ''​qemu-system-arm''​ 
 +  * ''​qemu-kvm''​ 
 +  * ''​python3''​ 
 +  * ''​minicom''​ 
 + 
 +Pentru instalarea pachetelor pe un sistem Debian/​Ubuntu,​ veți rula comanda: 
 +<​code>​ 
 +sudo apt update 
 +sudo apt install -y flex bison build-essential gcc-multilib libncurses5-dev qemu-system-x86 qemu-system-arm qemu-kvm python3 minicom 
 +</​code>​
  
 Mașina virtuală este integrată într-un repo ce conține și sursele kernel-ului Linux: [[https://​github.com/​linux-kernel-labs/​linux]]:​ Mașina virtuală este integrată într-un repo ce conține și sursele kernel-ului Linux: [[https://​github.com/​linux-kernel-labs/​linux]]:​
Line 18: Line 29:
 </​code>​ </​code>​
  
-Pe lângă sursele kernel-ului,​ această mașină virtuală conține fișierele necesare pentru desfășurarea laboratorului (schelete de cod) și configurația mașinii virtuale de qemu, în directorul ''​tools/​labs''​.+<​note>​ 
 +Puteți accelera clonarea repository-ului folosind argumentul ''​%%--%%depth=1''​ pentru comanda ''​git''​. 
 +Cu acest argument, git va clona doar ultima versiune a surselor, nu tot istoricul din repository, deci nu veți avea acces la commit-urile precedente. 
 +</​note>​ 
 + 
 +Pe lângă sursele kernel-ului,​ această mașină virtuală conține fișierele necesare pentru desfășurarea laboratorului (schelete de cod) și configurația mașinii virtuale de qemu, în directorul ''​tools/​labs/''​.
  
-Directorul ''​tools/​labs''​ conține:+Directorul ''​tools/​labs/''​ conține:
   * un ''​Makefile'',​ pe care il vom folosi pentru a porni mașina virtuală și pentru a genera scheletele de cod pentru laborator.   * un ''​Makefile'',​ pe care il vom folosi pentru a porni mașina virtuală și pentru a genera scheletele de cod pentru laborator.
-  * un director ''​qemu'',​ ce conține script-uri necesare pentru mașina virtuală și un fișier de configurare folosit pentru compilarea kernel-ului din surse (''​qemu/​kernel_config.x86''​). +  * un director ''​qemu/'',​ ce conține script-uri necesare pentru mașina virtuală și un fișier de configurare folosit pentru compilarea kernel-ului din surse (''​qemu/​kernel_config.x86''​). 
-  * un director ''​templates'',​ care conține fișierele din care se generează scheletele de laborator.+  * un director ''​templates/'',​ care conține fișierele din care se generează scheletele de laborator.
   * dupa prima pornire a mașinii virtuale, o imagine a unui sistem de fișiere, generată folosind ''​Yocto''​.   * dupa prima pornire a mașinii virtuale, o imagine a unui sistem de fișiere, generată folosind ''​Yocto''​.
  
 Următoarele imagini de sistem de fișiere sunt disponibile (cea folosită se specifică în ''​qemu/​Makefile''​):​ Următoarele imagini de sistem de fișiere sunt disponibile (cea folosită se specifică în ''​qemu/​Makefile''​):​
-  * core-image-minimal-qemu +  * ''​core-image-minimal-qemu''​ 
-  * core-image-minimal-dev-qemu +  * ''​core-image-minimal-dev-qemu''​ 
-  * core-image-sato-dev-qemu +  * ''​core-image-sato-dev-qemu''​ 
-  * core-image-sato-qemu +  * ''​core-image-sato-qemu''​ 
-  * core-image-sato-sdk-qemu+  * ''​core-image-sato-sdk-qemu''​
  
 +===== Rularea mașinii =====
  
-======= Rularea mașinii ======= +Mașina virtuală se pornește rulând comanda ''​make boot''​ în directorul ''​tools/​labs/''​. Prima rulare a acestei comenzi va dura mai mult, deoarece se va compila kernel-ul (din sursele existente în același repo, folosind config-ul din ''​tools/​labs/​qemu/​kernel_config.x86''​) și se va descărca imaginea sistemului de fișiere specificată in ''​tools/​labs/​qemu/​Makefile''​.
- +
-Mașina virtuală se pornește rulând comanda ''​make boot''​ în directorul ''​tools/​labs''​. Prima rulare a acestei comenzi va dura mai mult, deoarece se va compila kernel-ul (din sursele existente în același repo, folosind config-ul din ''​tools/​labs/​qemu/​kernel_config.x86''​) și se va descărca imaginea sistemului de fișiere specificată in ''​tools/​labs/​qemu/​Makefile''​.+
  
 <​code>​ <​code>​
Line 56: Line 71:
 </​note>​ </​note>​
  
-Veți compila modulele de kernel și programele de test pe mașina fizică. ​ Dacă aveți un sistem pe 64 de biți, folosiți flag-ul ''​-m32''​ pentru gcc, pentru a genera binare pe 32 de biți. De asemenea, folosiți ​opțiunea ​''​-static'' ​pentru programele de test.+<note tip> 
 +La prompt-ul de login, folosiți ​utilizatorul ​''​root''​, fără parolă. 
 +</​note>​
  
-===== Inspectare informații din mașina ​virtuală =====+Veți compila modulele de kernel și programele de test pe mașina ​fizică.  Dacă aveți un sistem pe 64 de biți, folosiți flag-ul ''​-m32''​ pentru gcc, pentru a genera binare (module, executabile de rulat în user mode) pe 32 de biți. De asemenea, folosiți opțiunea ''​-static''​ pentru programele de test care vor rula în user mode.
  
-Dacă aveți multe mesaje afișate în mașina virtuală puteți folosi combinațiile de taste ''​Shift+PgUp'',​ respectiv ''​Shift+PgDn''​ pentru a parcurge output-ul (//​scrolling//​) din consolă.+===== Interacțiunea cu mașina virtuală ===== 
 + 
 +Dacă aveți multe mesaje afișate în mașina virtuală ​(în modul grafic) ​puteți folosi combinațiile de taste ''​Shift+PgUp'',​ respectiv ''​Shift+PgDn''​ pentru a parcurge output-ul (//​scrolling//​) din consolă.
  
 În afară de consola din modul grafic, setup-ul mașinii virtuale oferă o consolă adițională prin intermediul unui "pty - pseudoterminal interface"​. Atunci când mașina virtuală este pornită căutați un mesaj de genul: În afară de consola din modul grafic, setup-ul mașinii virtuale oferă o consolă adițională prin intermediul unui "pty - pseudoterminal interface"​. Atunci când mașina virtuală este pornită căutați un mesaj de genul:
Line 68: Line 87:
 </​code>​ </​code>​
  
 +De asemenea, un link simbolic este creat cu numele ''​serial.pts''​ către acest fișiere, așa că îl puteți folosi pe oricare.
 Vă puteți conecta la această consolă folosind minicom sau screen: Vă puteți conecta la această consolă folosind minicom sau screen:
  
 <​code>​ <​code>​
-$ minicom -D /dev/pts/20 +$ minicom -D serial.pts 
 </​code>​ </​code>​
 +
 +<​note>​
 +Folosind consola adițională,​ puteți folosi consola mașinii virtule direct dintr-un terminal de pe mașina fizică, fără a avea nevoie de suportul grafic al ''​qemu''​.
 +</​note>​
 +
 +Mașina virtuală are și suport de networking, așa că puteți folosi ''​ssh''​ pentru a vă conecta la ea după ce ați aflat adresa IP.
 +Imaginea de sistem de fișiere de bază (minimal) nu are suport de networking, va trebui sa folosiți, de exemplu, ''​core-image-sato-dev-qemu''​ (modificați variabila ''​YOCTO_IMAGE''​ în ''​qemu/​Makefile''​).
 +
 +<​code>​
 +$ minicom -D serial.pts
 +
 +Poky (Yocto Project Reference Distro) 2.3 qemux86 /dev/hvc0
 +
 +qemux86 login: root
 +root@qemux86:​~#​ ifconfig
 +eth0      Link encap:​Ethernet ​ HWaddr 52:​54:​00:​12:​34:​56
 +          inet addr:​172.20.0.6 ​ Bcast:​172.20.0.255 ​ Mask:​255.255.255.0
 +          UP BROADCAST RUNNING MULTICAST ​ MTU:​1500 ​ Metric:1
 +          RX packets:41 errors:0 dropped:0 overruns:0 frame:0
 +          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
 +          collisions:​0 txqueuelen:​1000
 +          RX bytes:7578 (7.4 KiB)  TX bytes:1296 (1.2 KiB)
 +
 +lo        Link encap:Local Loopback
 +          inet addr:​127.0.0.1 ​ Mask:​255.0.0.0
 +          inet6 addr: ::​1%134535719/​128 Scope:Host
 +          UP LOOPBACK RUNNING ​ MTU:​65536 ​ Metric:1
 +          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 +          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 +          collisions:​0 txqueuelen:​1000
 +          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 +
 +$ ssh root@172.20.0.6
 +The authenticity of host '​172.20.0.6 (172.20.0.6)'​ can't be established.
 +RSA key fingerprint is SHA256:​CW1opJUHi4LDt1lnKjBVv12kXZ4s+8rreMBm5Jsdm00.
 +Are you sure you want to continue connecting (yes/no)? yes
 +Warning: Permanently added '​172.20.0.6'​ (RSA) to the list of known hosts.
 +root@qemux86:​~#​
 +</​code>​
 +
 +===== Recompilarea imaginii de kernel =====
 +
 +Imaginea kernel-ului Linux este compilată automat la prima pornire a mașinii virtuale. Pentru a recompila această imagine, este necesar să ștergeți fișierul ''​zImage''​ și să rulați target-ul de ''​make''​ ''​zImage''​ (sau să porniți mașina virtuală din nou).
  
 ===== Probleme frecvente ===== ===== Probleme frecvente =====
so2/resurse/masini-virtuale.1519048120.txt.gz · Last modified: 2018/02/19 15:48 by ionel.ghita
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0