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:
- What is “aria-label”? And why you need to use it. - August 12, 2024
- HostSailor Greenhouse (NL) Fujitsu Primergy Dedicated Server Review - October 23, 2022
- How Much Faster Is Making A Tar Archive Without Gzip? - October 7, 2022
Leave a Reply