This is an old revision of the document!
Desfășurarea laboratorului și testarea temelor pentru Sisteme de Operare 2 se realizează cu ajutorul unei mașini virtuale. Recomandăm descărcarea acesteia și folosirea sa pentru pregătirea și aprofundarea laboratorului și pentru implementarea și verificarea temelor.
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:
Mașina virtuală este integrată într-un repo ce conține și sursele kernel-ului Linux: https://github.com/linux-kernel-labs/linux:
git clone https://github.com/linux-kernel-labs/linux.git
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:
Makefile
, pe care il vom folosi pentru a porni mașina virtuală și pentru a genera scheletele de cod pentru laborator.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
).templates
, care conține fișierele din care se generează scheletele de laborator.Yocto
.
Următoarele imagini de sistem de fișiere sunt disponibile (cea folosită se specifică în 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
.
~/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)
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
:
QEMU_DISPLAY=sdl make boot
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.
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ă.
Î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:
char device redirected to /dev/pts/20 (label virtiocon0)
Vă puteți conecta la această consolă folosind minicom sau screen:
$ minicom -D /dev/pts/20
minicom
?Ctrl+a
și apoi, separat, x
. Apoi vă apare promptul de închidere a aplicației minicom
.ssh root@172.20.0.2 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:DijYADI/vj9Q5FAZPaPxqxh7BjpwQECvhuQGBcW433w. Please contact your system administrator. Add correct host key in /home/tavi/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/tavi/.ssh/known_hosts:50 remove with: ssh-keygen -f "/home/tavi/.ssh/known_hosts" -R 172.20.0.2 ECDSA host key for 172.20.0.2 has changed and you have requested strict checking. Host key verification failed.
ssh root@172.20.0.2 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no