Na prvom cvičení je vašou úlohou pripraviť si prostredie pre vývoj xv6 na počítačoch v učebni a svojich vlastných počítačoch. V rámci toho vytvoríte vlastný repozitár na platforme GitLab, v ktorom budete udržiavať zdrojový kód xv6.
Prvé tri týždne semestra musíte pracovať na školských počítačoch. Testy v priebehu semestra budete riešiť na nich a preto si musíte zvyknúť na toto prostredie. Zvyšok semestra (samozrejme okrem testov) už budete môcť pracovať na vlastných počítačoch.
Na konci cvičenia by ste mali vedieť:
pull
).add
, commit
) a nahrať ich na vzdialený repozitár (push
).Týchto 13 bodov budete robiť iba raz, resp. v prípade nutnosti opätovného vytvorenia virtuálneho stroja. Nie je potrebné, aby ste si kroky zapamätali.
Ďalej postupujte podľa návodu na Vytvorenie vzdialeného repozitára a prvé nahratie na stránke synchronizácie repozitára.
Na domácu úlohu ste si mali nainštalovať nástroje potrebné na vývoj xv6. Ak ste tak ešte neurobili, postupujte podľa príslušných návodov. Pokracujte rozbehanim vzdialeneho repozitara na sluzbe GitLab (Stiahnutie repozitára na vlastný PC).
Ak ho ešte nemáte, naklonujte repozitár xv6 (v prostredí WSL):
1 2 3 4 |
$ git clone git://g.csail.mit.edu/xv6-labs-2024 Cloning into 'xv6-labs-2024'... ... $ cd xv6-labs-2024 |
Skompilujte a spustite xv6:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ make qemu riscv64-unknown-elf-gcc -c -o kernel/entry.o kernel/entry.S riscv64-unknown-elf-gcc -Wall -Werror -O -fno-omit-frame-pointer -ggdb -DSOL_UTIL -MD -mcmodel=medany -ffreestanding -fno-common -nostdlib -mno-relax -I. -fno-stack-protector -fno-pie -no-pie -c -o kernel/start.o kernel/start.c ... riscv64-unknown-elf-ld -z max-page-size=4096 -N -e main -Ttext 0 -o user/_zombie user/zombie.o user/ulib.o user/usys.o user/printf.o user/umalloc.o riscv64-unknown-elf-objdump -S user/_zombie > user/zombie.asm riscv64-unknown-elf-objdump -t user/_zombie | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$/d' > user/zombie.sym mkfs/mkfs fs.img README user/xargstest.sh user/_cat user/_echo user/_forktest user/_grep user/_init user/_kill user/_ln user/_ls user/_mkdir user/_rm user/_sh user/_stressfs user/_usertests user/_grind user/_wc user/_zombie nmeta 46 (boot, super, log blocks 30 inode blocks 13, bitmap blocks 1) blocks 954 total 1000 balloc: first 591 blocks have been allocated balloc: write bitmap block at sector 45 qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 3 -nographic -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 xv6 kernel is booting hart 2 starting hart 1 starting init: starting sh $ |
Ak do príkazového riadka napíšete ls, mali by ste uvidieť podobný výstup:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ ls . 1 1 1024 .. 1 1 1024 README 2 2 2227 xargstest.sh 2 3 93 cat 2 4 32864 echo 2 5 31720 forktest 2 6 15856 grep 2 7 36240 init 2 8 32216 kill 2 9 31680 ln 2 10 31504 ls 2 11 34808 mkdir 2 12 31736 rm 2 13 31720 sh 2 14 54168 stressfs 2 15 32608 usertests 2 16 178800 grind 2 17 47528 wc 2 18 33816 zombie 2 19 31080 |
Tieto súbory vytvorí program mkfs počas inicializácie súborového systému; väčšina z nich sú programy, ktoré môžete spustiť. Pred chvíľou ste jeden z nich spustili: ls.
Na vypnutie qemu stlačte postupne: spolu Ctrl+A a potom samostatne X.
Teraz si natrénujete úpravu repozitára a jeho synchronizáciu so vzdialeným repozitárom na GitLabe. Začneme úpravou súboru README na vašom počítači.
Otvorte súbor README a urobte v ňom nejakú úpravu (môžete sa napríklad podpísať a pridať krátky popis).
Svoje aktuálne zmeny môžete zobraziť pomocou príkazu git diff. Týmto príkazom zobrazíte zmeny, ktoré ste urobili od posledného commitu.
Ak ste postupovali podľa návodu (posledný príkaz bol git push gitlab), teraz by mali byť vaše zmeny uložené vo vzdialenom repozitári. V ďalšej časti cvičenia tieto zmeny prenesiete na školský počítač, odkiaľ urobíte ďalšiu úpravu.
Prezrite si súbory v repozitári. Sústreďte sa na priečinky user a kernel. V priečinku user sa nachádzajú používateľské programy, ktoré môžete spúšťať z príkazového riadka systému xv6. Priečinok kernel obsahuje zdrojové kódy jadra. Otvorte si niektoré zdrojové súbory a prezrite si ich obsah. Dobrá orientácia v zdrojových kódoch bude počas celého semestra dôležitá. Zatiaľ si ale môžete vydýchnuť, bližšie sa tomu budeme venovať na druhej prednáške.
Vráťte sa na Kontrolný zoznam a overte, či ovládate potrebné zručnosti.