Instalacja xv6 (x86)

Pobierz z github system operacyjny xv6 z łatą xv6.patch. Łata pozwala na kompilację dla nowszych wersji gcc np. 13.x.x:

$ git clone https://github.com/mit-pdos/xv6-public.git
Cloning into 'xv6-public'...
...
$ cd xv6-public
$ wget https://cs.pwr.edu.pl/zawada/akiso/xv6.patch
$ patch -p1 -i xv6.patch

Możesz teraz zbudować i uruchomić ten system. Na początek musisz zainstalować emulator qemu (np. apt install qemu lub pacman -S qemu-desktop):

$ make qemu

Można też uruchomić bezpośrednio w terminalu (bez środowiska graficznego) przez emulator qemu tak:

$ make qemu-nox

Wyjście z emulatora mamy przez kombinację klawiszy ctrl+a x, czyli jednocześnie naciskamy ctrl i a, potem klawisz x. Pomoc skrótów pokazuje kombinacja ctrl+a h np. ctrl+a c - konsola qemu gdzie można zobaczyć dużo informacji o maszynie emulującej przez qemu np. info, info mem, info block, info registers, info qtree. System możemy śledzić przez debugger gdb uruchamiając:

$ make qemu-gdb  # lub make qemu-nox-gdb

i w drugim terminalu na początek pozwolmy gdb na automatyczne ładownie pliku .gdbinit który jest przygotowany w źródłach xv6:

$ echo "set auto-load safe-path /" >>~/.gdbinit  # komendę uruchamiamy tylko raz!

Uruchamiamy gdb:

$ cd xv6-public
$ gdb ./kernel
GNU gdb (GDB) 13.2
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./kernel...
+ target remote localhost:26000
The target architecture is set to "i8086".
[f000:fff0]    0xffff0:	ljmp   $0x3630,$0xf000e05b
0x0000fff0 in ?? ()
+ symbol-file kernel
(gdb) break *0x7c00
Breakpoint 1 at 0x7c00
(gdb) c
Continuing.
[   0:7c00] => 0x7c00:	cli

Thread 1 hit Breakpoint 1, 0x00007c00 in ?? ()
(gdb) 

Szczegóły tego, co widzisz, prawdopodobnie będą się różnić od powyższych w zależności od wersji gdb, której używasz, ale gdb powinien się zatrzymać w punkcie przerwania i powinna to być powyższa instrukcja cli.