In a previous post I invited folks to join me in auditing MIT’s Free Online Operating System Course. This post outlines what I have done to get ready to run MIT’s teaching operating system, Xv6, on my antique server, Darkstar.
The current version of Xv6 runs on the RISC-V instruction set. Thus, many people who, like me, have Intel architecture machines, need the Qemu emulator to run Xv6. The RISC-V GNU toolchain also is required because Xv6 needs a few seconds of recompiling whenever we students make changes in the code.
Qemu and the RISC-V GNU toolchain easily can be installed using the package system of many Linux distributions. But I enjoy compiling stuff myself. Also, Darkstar runs Slackware64-current. The Slackware default install comes with tons of stuff, but Qemu and the RISC-V GNU toolchain are not included.
Qemu
Darkstar had the compiled bleeding edge Qemu source already installed because Qemu was being used to run Virtual Machines. But, if we needed to clone and build bleeding edge Qemu, the steps are, as given at Qemu.org:
git clone https://gitlab.com/qemu-project/qemu.git
cd qemu
git submodule init
git submodule update --recursive
./configure
make
After we finish compiling Qemu, it needs to be installed with something like:
make install
Sudo or root access is required to build and install Qemu.
RISC-V GNU toolchain
Installing the toolchain also requires root or sudo privileges. Compiling the toolchain requires significant disk space for the sources. Subsequent to the build, Darkstar had used:
root@darkstar:/usr/local/src# du -sh riscv-gnu-toolchain/
11G riscv-gnu-toolchain/
root@darkstar:/usr/local/src#
Step by step instructions for both package system installing and for compiling of the RISC-V GNU toolchain are available from MIT and from the toolchain’s Github Readme.
Here are the steps I used on Darkstar:
507 cd /usr
508 ls
509 ls -l local-revert.tgz
510 history | grep local-revert
511 tar cvzf local-revert.tgz local ## Maybe I can revert if needed. :)
512 ls -lh *rev*
513 cd local/src
514 ls
515 git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
516 cd riscv-gnu-toolchain/
517 ls
518 less README.md
519 ./configure --prefix=/usr/local
520 make -j 16
521 make install ## This step is not needed.
Here is a screenshot of top(1) during the toolchain build process. Darkstar is cooking along with all 16 cores at work:
Something I haven’t figured out yet is why an install step isn’t required:
root@darkstar:/local/src/riscv-gnu-toolchain# make install
make: Nothing to be done for 'install'.
root@darkstar:/usr/local/src/riscv-gnu-toolchain#
Here’s some of the output from the make command. As you can see /usr/bin/ginstall is being called during make:
/usr/bin/ginstall -c -m 644 ../.././riscv-gcc/gcc/wide-int.h /usr/local/lib/gcc/riscv64-unknown-elf/11.1.0/plugin/include/wide-int.h
/usr/bin/ginstall -c -m 644 ../.././riscv-gcc/gcc/xcoff.h /usr/local/lib/gcc/riscv64-unknown-elf/11.1.0/plugin/include/xcoff.h
/usr/bin/ginstall -c -m 644 ../.././riscv-gcc/gcc/xcoffout.h /usr/local/lib/gcc/riscv64-unknown-elf/11.1.0/plugin/include/xcoffout.h
/usr/bin/ginstall -c -m 644 b-header-vars /usr/local/lib/gcc/riscv64-unknown-elf/11.1.0/plugin/include/b-header-vars
make[3]: Leaving directory '/usr/local/src/riscv-gnu-toolchain/build-gcc-newlib-stage2/gcc'
make[2]: Leaving directory '/usr/local/src/riscv-gnu-toolchain/build-gcc-newlib-stage2'
make[1]: Leaving directory '/usr/local/src/riscv-gnu-toolchain/build-gcc-newlib-stage2'
mkdir -p stamps/ && touch stamps/build-gcc-newlib-stage2
It might seem obvious that the process could have been designed not to require an install step. But why?
I am guessing that maybe there are some dynamic libraries created. The newly created libraries perhaps can’t even be tested without being installed in the expected locations programmed into the binaries which use the libraries.
Please give me a clue if you know about the reasons why the usual install step is missing here.
Xv6 Operating System
Here’s our setup for running Xv6 as an unprivileged user in our home directory:
495 git clone https://github.com/mit-pdos/xv6-riscv.git
496 cd xv6-riscv/
497 ls
498 cat README
499 make qemu
Here’s Xv6 booted and ready to go! :)
Related Posts:
Have You Checked Out RackNerd's TikTok Channel? Video Content That Brings Web Hosting Mainstream!
From Oracle Cloud to TOR to Telegram: Check Out LowEndTalk Tutorials!
HostSailor Greenhouse (NL) Fujitsu Primergy Dedicated Server Review
How Much Faster Is Making A Tar Archive Without Gzip?
How To Move Your Site To Oracle Cloud Free Tier With scp(1)
How To Install Caddy Web Server On Oracle Cloud Free Tier

It feels like just yesterday—but it was actually fifty years ago—that I stood in a doorway, watching yard after yard of ASCII art scroll out of a Teletype Model 33, surrounded by a group of laughing, wide-eyed tech enthusiasts. That was my first taste of computing, and I’ve been hooked ever since.
My Low End Adventure began right here on LowEndBox, when I stumbled across the perfect deal on a dedicated server from OVH a few years ago. That moment opened the door to a whole new world of tinkering, learning, and community.
Today, I’m the proud owner of Darkstar—a lovingly maintained antique server currently colocated in Dallas, Texas at LevelOneServers.com. She may be older than most, but she runs like a champ and has taught me more than a few lessons about hardware and humility.
In addition to writing for LowEndBox and helping out as a moderator on LowEndTalk, I spend my time exploring the worlds of programming, networking, and Linux system administration. There’s always something new to learn—and luckily, the LowEnd community is filled with brilliant, generous people who are more than willing to teach.
All these years later, I’m still learning, still experimenting, and still having a blast.
It’s very, very fun here on the Low End… isn’t it? 😊
Leave a Reply