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ă ș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:
flex
bison
build-essential
gcc-multilib
libncurses5-dev
qemu-system-x86
qemu-system-arm
qemu-kvm
python3
minicom
Pentru instalarea pachetelor pe un sistem Debian/Ubuntu, veți rula comanda:
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
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
--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.
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
):
core-image-minimal-qemu
core-image-minimal-dev-qemu
core-image-sato-dev-qemu
core-image-sato-qemu
core-image-sato-sdk-qemu
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
root
, fără parolă.
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ă (î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:
char device redirected to /dev/pts/20 (label virtiocon0)
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:
$ minicom -D serial.pts
qemu
.
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
).
$ 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:~#
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).
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