This shows you the differences between two versions of the page.
|
so2:resurse:masini-virtuale [2018/02/20 07:57] ionel.ghita [Interacțiunea cu 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 60: | Line 75: | ||
| </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. |
| ===== Interacțiunea cu mașina virtuală ===== | ===== Interacțiunea cu mașina virtuală ===== | ||
| Line 87: | Line 102: | ||
| <code> | <code> | ||
| - | $ mincom -D serial.pts | + | $ minicom -D serial.pts |
| Poky (Yocto Project Reference Distro) 2.3 qemux86 /dev/hvc0 | Poky (Yocto Project Reference Distro) 2.3 qemux86 /dev/hvc0 | ||
| Line 121: | Line 136: | ||
| 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). | 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 ===== | ||