Difference between revisions of "Compilazione kernel, busybox e macchine virtuali"

From Sistemi Operativi
Jump to navigation Jump to search
(Created page with "questa è una versione commentata dei comandi digitati nella lezione del 27 febbario 2019 in una directory vuota di una partizione con spazio sufficiente (1G per stare dalla ...")
 
m
 
Line 31: Line 31:
  
 
Scarichiao e decomprimiamo l'immagine
 
Scarichiao e decomprimiamo l'immagine
   wget http://fs.devloop.org.uk/filesystems/BusyBox-1.13.2/BusyBox-1.13.2-amd64-root_fs.bz2
+
   Wget https://www.cs.unibo.it/~renzo/virtualsquare/tutorial_resources/BusyBox-1.21.1-amd64-root_fs.bz2
   bzip2 -d BusyBox-1.13.2-amd64-root_fs.bz2
+
   bzip2 -d BusyBox-1.21.1-amd64-root_fs.bz2
  
 
Lanciamo la macchina virtuale, ed ora il sistema sara' attivo:
 
Lanciamo la macchina virtuale, ed ora il sistema sara' attivo:
   qemu-system-x86_64 -hda BusyBox-1.13.2-amd64-root_fs -kernel /tmp/bzImage -append root=/dev/sda -monitor stdio -k en-us -m 1G
+
   qemu-system-x86_64 -hda BusyBox-1.21.1-amd64-root_fs -kernel /tmp/bzImage -append root=/dev/sda -monitor stdio -k en-us -m 1G
  
 
Dentro la macchina virtuale potete "gironzolare" a guardare cosa c'e'.
 
Dentro la macchina virtuale potete "gironzolare" a guardare cosa c'e'.

Latest revision as of 19:27, 20 February 2026

questa è una versione commentata dei comandi digitati nella lezione del 27 febbario 2019

in una directory vuota di una partizione con spazio sufficiente (1G per stare dalla parte dei bottoni) si fa download dei sorgenti del kernel. oggi l'ultima versione e' 5.0-rc8 (sul web www.kernel.org si decide quale versione scaricare)

 wget https://git.kernel.org/torvalds/t/linux-5.0-rc8.tar.gz

si scompattano i sorgenti e si entra nella dir scompattata

 tar xf linux-5.0-rc8.tar.gz 
 cd linux-5.0-rc8

Ho preparato un file di configurazione minimale per qemu, potete prenderlo via web. Lo scarico in /tmp:

 (cd /tmp; wget http://www.cs.unibo.it/~renzo/vsd/linux-config)

e lo copio come .config nella dir base dei sorgenti del kernel

 cp /tmp/linux-config .config

chiamo menuconfig per configurare il kernel

 make menuconfig

potete configurare il kernel (o lasciare tutto invariato, e' stata caricata la cofigurazione minimale) alla fine uscite salvando. A questo punto si puo' compilare il kernel.

 make -j 5

A seconda di quante opzioni avete abilitato e quanto potente e' la macchina usata potete prendere un caffe' o andare a dormire. Dopo un congruo tempo il kernel sara' pronto)

Spostiamolo il /tmp/vmlinuz

 cp arch/x86_64/boot/bzImage /tmp/vmlinuz
 cd ..

A questo punto possiamo attivare il kernel che partira' regolarmente...

 qemu-system-x86_64 -kernel /tmp/vmlinuz -monitor stdio

Ma si blocchera' perche' una volta attivo non sa cosa fare, manca un init da lanciare. Possiamo prendere una immagine minimale di file system che contenga init. Per esempio una simie immagine puo' essere creata usando busybox (che fara' da solo init, shell e tool di utilita')

Scarichiao e decomprimiamo l'immagine

 Wget https://www.cs.unibo.it/~renzo/virtualsquare/tutorial_resources/BusyBox-1.21.1-amd64-root_fs.bz2
 bzip2 -d BusyBox-1.21.1-amd64-root_fs.bz2

Lanciamo la macchina virtuale, ed ora il sistema sara' attivo:

 qemu-system-x86_64 -hda BusyBox-1.21.1-amd64-root_fs -kernel /tmp/bzImage -append root=/dev/sda -monitor stdio -k en-us -m 1G

Dentro la macchina virtuale potete "gironzolare" a guardare cosa c'e'. Da notare :

 ls -l /bin 

mostra come tutti i comandi siano realizati come link simbolici a busybox.

 uname -a 

mostra la cersione e la data di compilazione del kernel, potete verificare che e' proprio il kernel appena compilato che sta coordinando le attivita; del sistema.

 poweroff

spegne la macchina virtuale.

Le macchine virtuali possono operare anche a livello di processo. Qemu per esempio ha comandi distinti per operare come VM di sistema (qemu-system-...) e di processo (qemu-...). Per fare questa prova facciamo download dei binari di busybox per diverse architetture:

 wget https://busybox.net/downloads/binaries/1.21.1/busybox-binaries.tar.bz2

e decomprimiamo l'archivio

 tar xf busybox-binaries.tar.bz2

Nella dir busybox ci sono gli eseguibili.

 cd busybox/

Quello per la architettura corrente (x86_64 nella macchina usata in aula) funziona

 ./busybox-x86_64 ls

Gli altri dorebbero fallire (se non falliscono e' perche' c'e' un automatisco attivo che chiama qemu)

 ./busybox-mips ls

Possiamo comunque vedere qemu richiamato in modo esplicito che e' in grado di eseguire il binario busybox-mips (virtualizzando la CPU) ma richiama le system call del sistema host.

 qemu-mips busybox-mips ls