This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux-kernel-dev:capitole:capitol-01 [2015/09/07 01:22] razvan [Mediul de dezvoltare pentru cod kernel] |
linux-kernel-dev:capitole:capitol-01 [2016/08/29 12:09] (current) razvan [Alterarea opțiunilor de pornire a nucleului] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Mediul de dezvoltare pentru cod kernel ====== | + | ====== 1. Mediul de dezvoltare pentru cod kernel ====== |
Vom face primi pași în investigarea nucleului Linux și ne vom acomoda cu infrastructura (minimalistă) de dezvoltare la nivelul nucleului. Infrastructura folosește o mașină virtuală [[http://wiki.qemu.org/Main_Page|QEMU]]. | Vom face primi pași în investigarea nucleului Linux și ne vom acomoda cu infrastructura (minimalistă) de dezvoltare la nivelul nucleului. Infrastructura folosește o mașină virtuală [[http://wiki.qemu.org/Main_Page|QEMU]]. | ||
Line 19: | Line 19: | ||
* https://www.kernel.org/doc/Documentation/kernel-parameters.txt | * https://www.kernel.org/doc/Documentation/kernel-parameters.txt | ||
* https://matt.ucc.asn.au/dropbear/dropbear.html | * https://matt.ucc.asn.au/dropbear/dropbear.html | ||
+ | |||
===== Exerciții ===== | ===== Exerciții ===== | ||
+ | Arhiva de suport pentru exerciții se găsește [[http://koala.cs.pub.ro/training/res/linux-kernel-dev/arc/cap-01-tasks.zip|aici]]. Descărcați arhiva și apoi decomprimați-o folosind comanda<code> | ||
+ | unzip cap-01-tasks.zip | ||
+ | </code> | ||
==== Pornirea mediului QEMU ==== | ==== Pornirea mediului QEMU ==== | ||
Line 38: | Line 42: | ||
În acest mod vom porni mereu mașina virtuală QEMU | În acest mod vom porni mereu mașina virtuală QEMU | ||
- | Pentru oprirea mașinii virtuale folosim comanda ''poweroff'' în cadrul mașinii virtuale QEMU sau folosim combinația de taste ''Ctrl+c'' în fereastra din mașina virtuală VirtualBox în care am rualt comanda ''make''. | + | Pentru oprirea mașinii virtuale folosim comanda ''poweroff'' în cadrul mașinii virtuale QEMU sau folosim combinația de taste ''Ctrl+c'' în fereastra din mașina virtuală VirtualBox în care am rulat comanda ''make''. |
+ | <note important> | ||
+ | Ca să "intrați" în mediul QEMU dați click în cadrul ferestrei QEMU. | ||
+ | |||
+ | Ca să "ieșiți" din mediul QEMU apăsați pe ''Alt'' și ''Ctrl''. | ||
+ | </note> | ||
==== Investigarea stării sistemului ==== | ==== Investigarea stării sistemului ==== | ||
Line 111: | Line 120: | ||
- Se oprește mașina virtuală QEMU folosind combinația de taste ''Ctrl+c''. | - Se oprește mașina virtuală QEMU folosind combinația de taste ''Ctrl+c''. | ||
- Se șterge interfața ''tap0'' folosind comanda<code> | - Se șterge interfața ''tap0'' folosind comanda<code> | ||
- | ip link del dev tap0 | + | sudo ip link del dev tap0 |
</code> | </code> | ||
- Se repornește mașina virtuală QEMU folosind comanda<code> | - Se repornește mașina virtuală QEMU folosind comanda<code> | ||
Line 160: | Line 169: | ||
==== Folosirea netcat pentru comunicarea între mașini virtuale ==== | ==== Folosirea netcat pentru comunicarea între mașini virtuale ==== | ||
- | Pentru a face ceva mai interesant, veți copia în mașina virtuală QEMU un fișier ''netcat'' compilat static. Îl găsiți în ''/home/training/linux-kernel-dev/''. Copiați-l în ''fsimg/root/programs/''. | + | Pentru a face ceva mai interesant, veți copia în mașina virtuală QEMU un fișier ''netcat'' compilat static. |
+ | |||
+ | <note> | ||
+ | Este vorba de fișierul ''nc-static'' din directorul ''/home/training/linux-kernel-dev/''. Copiați acest fișier în ''fsimg/root/programs/''. | ||
+ | </note> | ||
O dată copiat acest utilitar static, îl puteți folosi pentru comunicare cu mașina virtuală VirtualBox. Porniți pe mașina virtuală QEMU un server care ascultă mesaje pe un port UDP. Iar apoi trimiteți un mesaj de pe mașina virtuală VirtualBox folosind tot ''netcat''. | O dată copiat acest utilitar static, îl puteți folosi pentru comunicare cu mașina virtuală VirtualBox. Porniți pe mașina virtuală QEMU un server care ascultă mesaje pe un port UDP. Iar apoi trimiteți un mesaj de pe mașina virtuală VirtualBox folosind tot ''netcat''. | ||
Line 167: | Line 180: | ||
La nevoie puteți transmite și fișiere în acest mod folosind comenzi de forma:<code> | La nevoie puteți transmite și fișiere în acest mod folosind comenzi de forma:<code> | ||
(receiver/server) netcat -u -l -p 12345 > <filename> | (receiver/server) netcat -u -l -p 12345 > <filename> | ||
- | (sender/client) cat <filename> | netcat <IP-receiver> 12345 | + | (sender/client) cat <filename> | ./nc-static -u <IP-receiver> 12345 |
</code> | </code> | ||
unde ''<filename>'' este numele fișierului (sau calea către fișier) iar ''<IP-receiver>'' este adresa IP a a receiver-ului> | unde ''<filename>'' este numele fișierului (sau calea către fișier) iar ''<IP-receiver>'' este adresa IP a a receiver-ului> | ||
Line 193: | Line 206: | ||
append root=/dev/ram ro quiet rdinit=/init initrd=ramdisk.gz nodebug apci=off noapic | append root=/dev/ram ro quiet rdinit=/init initrd=ramdisk.gz nodebug apci=off noapic | ||
</code> | </code> | ||
+ | |||
+ | <note tip> | ||
+ | Mai sus am schimbat opțiunea ''noquiet'' în opțiunea ''quiet'' și ''debug'' în ''nodebug''. | ||
+ | </note> | ||
Pornim mașina virtuală QEMU folosind comanda<code> | Pornim mașina virtuală QEMU folosind comanda<code> | ||
Line 201: | Line 218: | ||
==== Adăugarea unei opțiuni de bootare a nucleului ==== | ==== Adăugarea unei opțiuni de bootare a nucleului ==== | ||
- | Urmăriți opțiunile de bootare ale nucleului și dezactivați folosirea ''vdso''. | + | Urmăriți [[https://www.kernel.org/doc/Documentation/kernel-parameters.txt|opțiunile de bootare ale nucleului]] și dezactivați folosirea ''vdso''. |
Pentru a verifica faptul că un proces folosește sau nu ''vdso'' urmăriți spațiul său de adresă folosind comanda<code> | Pentru a verifica faptul că un proces folosește sau nu ''vdso'' urmăriți spațiul său de adresă folosind comanda<code> |