Differences

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

Link to this comparison view

so2:resurse:masini-virtuale [2017/03/03 12:19]
octavian.purdila [Probleme frecvente]
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 +  * ''​bison''​ 
-  * kvm +  * ''​build-essential''​ 
- +  * ''​gcc-multilib''​ 
-Descărcați mașina virtuală de la: [[https://​github.com/​tavip/​qemu-so2]]: ​+  * ''​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>​ <​code>​
-git clone https://​github.com/​tavip/​qemu-so2.git+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>​ </​code>​
  
-Directorul numit ''​qemu-so2''​ conține: +Mașina virtuală este integrată într-un repo ce conține și sursele kernel-ului Linux: [[https://​github.com/​linux-kernel-labs/​linux]]:
-  * un ''​Makefile''; ​ rulați ''​make''​ pentru a construi imaginea mașinii virtuale; +
-  * ''​busybox'',​ pentru utilitare de bază în mașina virtuală+
-  * server ssh (dropbear) compilat static +
-  * alte fișiere necesare rulării mașinii virtuale vor fi create la prima rulare a ''​make''; ​ nu este nevoie să le modificați. +
- +
-Înainte de a folosi mașina virtuală este necesar sa descărcați, compilați și creați link-uri simbolice către imaginea de kernel ​ce va fi folosită de către mașina virtuală:+
  
 <​code>​ <​code>​
-$ make setup-bzImage+git clone https://​github.com/​linux-kernel-labs/​linux.git 
 +</​code>​
  
-~/​src/​qemu-so2$ make setup-bzImage ​ +<​note>​ 
-./setup-bzImage.sh +Puteți accelera clonarea repository-ului folosind argumentul ''​%%--%%depth=1''​ pentru comanda ''​git''​
---2017-02-19 14:​36:​40-- ​ https://cdn.kernel.org/​pub/​linux/​kernel/​v4.x/​linux-4.9.11.tar.xz +Cu acest argumentgit va clona doar ultima versiune a surselornu tot istoricul din repositorydeci nu veți avea acces la commit-urile precedente
-Resolving cdn.kernel.org (cdn.kernel.org)... 151.101.64.69151.101.128.69151.101.192.69..+</note>
-Connecting to cdn.kernel.org (cdn.kernel.org)|151.101.64.69|:​443... connected. +
-HTTP request sent, awaiting response... 200 OK +
-Length: 93211324 (89M) [application/x-xz] +
-Saving to: ‘linux-4.9.11.tar.xz’+
  
-linux-4.9.11.tar.xz ​                        ​100%[========================================================================================>​] ​ 88,89M  10,9MB/s    in 8,3s    ​+Pe lângă sursele kernel-uluiaceastă 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/''​.
  
-2017-02-19 14:36:48 (10,7 MB/s) ‘linux-4.9.11.tar.xz’ saved [93211324/​93211324]+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 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. 
 +  * dupa prima pornire a mașinii virtuale, o imagine a unui sistem de fișiere, generată folosind ''​Yocto''​.
  
-make[1]: Entering directory ​'/home/​tavi/​src/​linux-4.9.11+Următoarele imagini de sistem de fișiere sunt disponibile (cea folosită se specifică în ''qemu/Makefile''): 
-  ​HOSTCC ​ scripts/​basic/​fixdep +  ​* ''​core-image-minimal-qemu''​ 
-  ​HOSTCC ​ scripts/​kconfig/​conf.o +  ​* ''​core-image-minimal-dev-qemu''​ 
-  SHIPPED scripts/​kconfig/​zconf.tab.c +  ​* ​''core-image-sato-dev-qemu'​
-  SHIPPED scripts/​kconfig/​zconf.lex.c +  ​* ​''​core-image-sato-qemu'
-  SHIPPED scripts/​kconfig/​zconf.hash.c +  ​* ''​core-image-sato-sdk-qemu''​ 
-  HOSTCC ​ scripts/​kconfig/​zconf.tab.o + 
-  HOSTLD ​ scripts/​kconfig/​conf +===== Rularea mașinii =====
-scripts/​kconfig/​conf  ​--olddefconfig Kconfig +
-+
-# configuration written to .config +
-+
-make[1]: Leaving directory ​'/​home/​tavi/​src/​linux-4.9.11+
-make[1]: Entering directory ​'/​home/​tavi/​src/​linux-4.9.11+
-scripts/​kconfig/​conf ​ --silentoldconfig Kconfig +
-  ​SYSTBL ​ arch/​x86/​entry/​syscalls/​../​../​include/​generated/​asm/​syscalls_32.h +
-... +
-</​code>​+
  
-Pentru rularea mașinii virtuale folosiți:+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>​
-make+~/​src/​linux/​tools/​labs$ ​make boot 
 +ARCH=x86 qemu/​qemu.sh -kernel zImage.x86 -device virtio-serial \ 
 +             ​-chardev pty,​id=virtiocon0 -device virtconsole,​chardev=virtiocon0 \ 
 +             -net nic,​model=virtio,​vlan=0 -net tap,​ifname=tap0,​vlan=0,​script=no,​downscript=no\ 
 +             ​-drive file=rootfs.img,​if=virtio,​format=raw --append "​root=/​dev/​vda console=hvc0"​ \ 
 +             ​--display none -s 
 +char device redirected to /dev/pts/19 (label virtiocon0)
 </​code>​ </​code>​
  
-Pentru rularea ​mașinii virtuale ​fără ​mode "grafic" folosiți:+<note important>​ 
 +Implicit, ''​qemu''​ pornește ​mașina virtuală ​fără ​suport ​grafic, deci nu veți avea un prompt. Pentru suport grafic, trebuie să setați variabila de mediu ''​QEMU_DISPLAY''​:
  
 <​code>​ <​code>​
-QEMU_DISPLAY=none make+QEMU_DISPLAY=sdl make boot
 </​code>​ </​code>​
 +</​note>​
  
-Fișierele pe care vreți să le puneți în mașina virtuală vor trebui puse în directorul ''​fsimg/​root''​. ​ Ele vor fi accesibile în mașina virtuală din directorul ''/​root''​. ​ Pentru a automatiza copierea în ''​fsimg/​root''​ puteți adăuga un target în makefile-ul modulului, sau puteți crea symlink-uri. +<​note ​tip
- +La prompt-ul de login, folosiți utilizatorul ​''​root'', ​fără parolă.
-<​note>​ +
-GNU Make nu se pricepe prea bine la dependency tracking pe symlink-uri.  Dacă alegeți să faceți symlink-uri în ''​fsimg/root'' ​către fișierele voastreasigurați-vă că imaginea este reconstruită de fiecare dată. ​ Cel mai simplu este să faceți target-ul ''​initrd.cpio''​ phony. ​ Generarea imaginii durează doar câteva secunde.+
 </​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.+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.
  
-===== Inspectare informații din mașina virtuală =====+===== Interacțiunea cu mașina virtuală =====
  
-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ă.+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 89: 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.1488536367.txt.gz · Last modified: 2017/03/03 12:19 by octavian.purdila
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