This shows you the differences between two versions of the page.
so2:laboratoare:lab01 [2018/02/21 11:12] razvan.deaconescu [Soluții] |
so2:laboratoare:lab01 [2019/02/25 16:44] (current) razvan.deaconescu [2. Adăugarea și utilizarea unui disc virtual] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Laborator 1 - Introducere ====== | ====== Laborator 1 - Introducere ====== | ||
+ | |||
+ | New lab is translated in English and available here: | ||
+ | |||
+ | https://linux-kernel-labs.github.io/master/labs/introduction.html | ||
+ | |||
+ | Please always try to use the new labs. | ||
+ | |||
+ | If you find any problem (typo, bad wording, broken links, etc), please do the following | ||
+ | * submit an issue: https://github.com/linux-kernel-labs/linux-kernel-labs.github.io/issues | ||
+ | |||
+ | OR | ||
+ | |||
+ | * send a patch via a Pull Request: https://github.com/linux-kernel-labs/linux | ||
+ | |||
===== Obiectivele laboratorului ===== | ===== Obiectivele laboratorului ===== | ||
Line 45: | Line 59: | ||
==== cscope ==== | ==== cscope ==== | ||
- | [[http://cscope.sourceforge.net/|Cscope]] este un program pentru parcurgerea eficientă a surselor C. Pentru a-l folosi, trebuie generată o bază de date cscope din sursele existente. Într-un tree Linux, este suficientă folosirea ''make ARCH=x86 cscope''. Precizarea arhitecturii prin variabila ARCH este opțională, dar recomandată; altfel, unele funcții dependente de arhitectură vor apărea de mai multe ori în baza de date. | + | [[http://cscope.sourceforge.net/|Cscope]] este un program pentru parcurgerea eficientă a surselor C. Pentru a-l folosi, trebuie generată o bază de date cscope din sursele existente. Într-un tree Linux, este suficientă folosirea: |
+ | <code bash>COMPILED_SOURCE=1 make ARCH=x86 cscope | ||
+ | </code> | ||
+ | Specificarea variabilei ''COMPILED_SOURCE'' cu valoarea 1 determină ''cscope'' să ia în considerare doar sursele compilate. Precizarea arhitecturii prin variabila ARCH este opțională, dar recomandată; altfel, unele funcții dependente de arhitectură vor apărea de mai multe ori în baza de date. | ||
Cscope poate fi folosit și stand-alone, dar este mult mai util în combinație cu un editor. Pentru a folosi cscope cu Vim, este necesar să instalați ambele pachete și să adăugați următoarele linii în fișierul ''.vimrc'' (mașina din laborator are deja configurările făcute): | Cscope poate fi folosit și stand-alone, dar este mult mai util în combinație cu un editor. Pentru a folosi cscope cu Vim, este necesar să instalați ambele pachete și să adăugați următoarele linii în fișierul ''.vimrc'' (mașina din laborator are deja configurările făcute): | ||
Line 98: | Line 115: | ||
Pentru mai multe informații, folosiți help-ul integrat al Vim: '':h cscope'' sau '':h copen''. | Pentru mai multe informații, folosiți help-ul integrat al Vim: '':h cscope'' sau '':h copen''. | ||
</note> | </note> | ||
+ | |||
+ | ''cscope'' suportă următoarele tipuri de căutari: | ||
+ | * 's' symbol: găsește toate referințele simbolului marcat de cursor | ||
+ | * 'g' global: găsește definițiile globale ale simbolului marcat de cursor | ||
+ | * 'c' calls: găsește toate apelurile funcției marcate de cursor | ||
+ | * 't' text: găsește toate instanțele textului marcat de cursor | ||
+ | * 'e' egrep: căutare ''egrep'' pentu cuvântul marcat de cursor | ||
+ | * 'f' file: deschide fișierul cu numele marcat de cursor | ||
+ | * 'i' includes: găsește fișiere care includ numele fișierului marcat de cursor | ||
+ | * 'd' called: găsește funcțiile apelate de către funcția marcată de cursor | ||
+ | Mai multe informații găsiți [[http://cscope.sourceforge.net/cscope_maps.vim| aici]]. | ||
Dacă sunteți utilizatori emacs, instalați pachetul xcscope-el și adăugați următoarele linii în ~/.emacs: | Dacă sunteți utilizatori emacs, instalați pachetul xcscope-el și adăugați următoarele linii în ~/.emacs: | ||
Line 260: | Line 288: | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
+ | ==== 0. Înscriere pe lista de discuții ==== | ||
+ | |||
+ | Urmăriți informațiile de pe pagina [[so2:resurse:lista-discutii|]] pentru a vă abona la lista de discuții. | ||
==== Precizări ==== | ==== Precizări ==== | ||
Line 269: | Line 300: | ||
* pornirea mașinii virtuale folosind qemu. Acest pas și cel precedent se execută automat lansând ''make''. | * pornirea mașinii virtuale folosind qemu. Acest pas și cel precedent se execută automat lansând ''make''. | ||
* rularea testelor în mașina virtuală. | * rularea testelor în mașina virtuală. | ||
- | * În cazul folosirii cscope, folosiți ''/home/student/so2/linux-4.9.11''. Dacă nu există deja un fișier ''cscope.out'', îl puteți genera folosind ''make ARCH=x86 cscope''. | + | * În cazul folosirii cscope, generați un fișier ''cscope.out'', folosind: ''COMPILED_SOURCE=1 make ARCH=x86 cscope''. |
</note> | </note> | ||
Line 279: | Line 310: | ||
Pe scurt, infrastructura mașinii virtuale: | Pe scurt, infrastructura mașinii virtuale: | ||
* ''/home/student/so2/linux'' - sursele kernel-ului Linux, de care aveți nevoie pentru a compila module. Directorul include și fișierul ''cscope.out'', pentru inspectarea facilă a surselor. | * ''/home/student/so2/linux'' - sursele kernel-ului Linux, de care aveți nevoie pentru a compila module. Directorul include și fișierul ''cscope.out'', pentru inspectarea facilă a surselor. | ||
- | * ''/home/student/so2/linux/tools/labs'' - fișiere suplimentare, necesare pentru rularea mașinii virtuale, labrator și teme | + | * ''/home/student/so2/linux/tools/labs'' - fișiere suplimentare, necesare pentru rularea mașinii virtuale, laborator și teme |
Pentru a rula mașina virtuală este suficient să intrați în directorul ''so2/linux/tools/labs'' și să rulați comanda ''make boot'': | Pentru a rula mașina virtuală este suficient să intrați în directorul ''so2/linux/tools/labs'' și să rulați comanda ''make boot'': | ||
Line 314: | Line 345: | ||
</note> | </note> | ||
- | În subdirectorul ''so2/linux/tools/labs/qemu/'' aveți un nou disc de mașină virtuală în cadrul fișierului ''mydisk.img''. Vrem să adăugăm discul la mașina virtuală și să îl folosim în cadrul mașinii virtuale. | + | În subdirectorul ''so2/linux/tools/labs/'' aveți un nou disc de mașină virtuală în cadrul fișierului ''mydisk.img''. Vrem să adăugăm discul la mașina virtuală și să îl folosim în cadrul mașinii virtuale. |
Editați fișierul ''qemu/Makefile'' pentru a adăuga, în variabila ''QEMU_OPTS'', parametrul ''-drive file=qemu/mydisk.img,if=virtio,format=raw''. Rulați ''make'' pentru a boota mașina virtuală. | Editați fișierul ''qemu/Makefile'' pentru a adăuga, în variabila ''QEMU_OPTS'', parametrul ''-drive file=qemu/mydisk.img,if=virtio,format=raw''. Rulați ''make'' pentru a boota mașina virtuală. | ||
+ | |||
+ | <note warning> | ||
+ | Este posibil să existe deja adăugate alte două discuri (''disk1.img'' și ''disk2.img''). În acest caz, adăugați noul disc înainte de ''disk1.img'' | ||
+ | </note> | ||
În cadrul mașinii virtuale configurați accesul la disc. | În cadrul mașinii virtuale configurați accesul la disc. | ||
Line 381: | Line 416: | ||
</note> | </note> | ||
- | Pentru aceasta pornim, în primă fază, mașina virtuală QEMU. Apoi, ne putem conecta cu ''gdb'' la un mașina vituală QEMU **aflată în rulare**, folosind comanda | + | Pentru aceasta pornim, în primă fază, mașina virtuală QEMU. Apoi, ne putem conecta cu ''gdb'' la mașina vituală QEMU **aflată în rulare**, folosind comanda |
<code bash> | <code bash> | ||
make gdb | make gdb | ||
Line 481: | Line 516: | ||
<note tip> | <note tip> | ||
- | Pentru aceasta folosiți în Vim o comandă de forma '':cs f g <symbol>'' (unde construcția ''<symbol>'' reprezintă numele simbolului căutat). | + | Pentru aceasta folosiți în Vim o comandă de forma '':cs f g <symbol>'' (unde construcția ''<symbol>'' reprezintă numele simbolului căutat). Dacă simbolul nu este găsit, încercați căutarea textuala folosind comanda: '':cs f t <text>''. |
</note> | </note> | ||