Problems with Running xv6
xv6
is an operating system by MIT’s CSAIL for instructional purposes. However, when using it with the latest versions of gcc
and qemu
, it would run into a dead loop when booting. Here I document the steps to solve the problem.
Clone the source code repository with:
git clone https://github.com/mit-pdos/xv6-public
With recent binutils
versions, the BYTE
directives produce an incorrect physical address, making it triple fault on boot. Fortunately, there’s a patch available: https://github.com/mit-pdos/xv6-public/pull/115. To download the patch, run:
curl -L "https://github.com/mit-pdos/xv6-public/pull/115.patch" > binutils_bug.patch
or click the above link in the browser if you like. The -L
here is to follow the redirections.
Check for conflicts:
git apply --check binutils_bug.patch
Empty output means none. Apply the patch:
git apply binutils_bug.patch
Now we can compile and run it! Install the required toolchains (you probably already have them):
sudo apt-get install build-essential gdb
Install qemu
for emulation:
sudo apt-get install qemu-system-i386
note that xv6
is a x86
OS, not a x86_64
OS.
To build it, run:
make
To run it, run:
make qemu
A window should pop up and a prompt should appear. You can try running a few commands, such as ls
.
If you don’t what to see a GUI, run:
make qemu-nox
Resources: