This is a 'toy' kernel created by students from multiple universities. Currently it is mainly developed by students of the TU Delft. It is targeted to run on the raspberry pi zero, b+ and 2.
One option to run the project is to make use of the Docker image. To do so you first need to download Docker and Docker Compose for your operating system, after which you can run the follow commands to build and start the container:
docker-compose build
docker-compose up -dAfter this you can choose to open the shell to the container by running:
docker-compose run raspberryAfter that you can follow the instructions starting at Running
You can find the directory with the built kernel at:/var/lib/docker/course_os_kernel/_data
To run the kernel you can use the command:
qemu-system-arm -kernel kernel.elf -m 1G -serial stdio -monitor none -M raspi2 -cpu cortex-a7 -nographic -append "-load 0x410000 0x14000" -semihosting
To build and run the project, you will need a cross compiler. Since the kernel is made to run on ARM, the compiler has to output ARM instructions.
To build the c toolchain for ARM, and qemu-system-arm version 4.20, run
make requirementsfrom the root project directory. We build qemu-system-arm from source as this gives us better support
for attaching debuggers. Any up to date version of qemu-system-arm should work and if you already have this installed
through your package manager, just running
make toolchainshould be sufficient.
After you built the toolchain, the kernel can be ran with:
make runfrom the root project directory, or from the kernel directory.
To run the test suite for the kernel, execute:
make testfrom the root project directory, or from the kernel directory.
To debug the kernel, you have to perform two steps. First you have to build and start the kernel with
make debugfrom the kernel directory. This prepares qemu so it waits for a debugger to be attached.
now, if you have CLion or VSCode you can run the supplied run configuration called debug which attaches a debugger, loads the sourcemap and runs the kernel. Now you can create breakpoints from within your IDE.
If however you don't have either of those IDEs, or want to use gdb from a terminal, one can run the following command from the kernel directory:
make start_debugTo create tests for the kernel, please read this file.
To open this project in CLion, you can simply create a new c project with the supplied CMakeLists.txt file.
This file can not be used to actually run the kernel but it does give clion the right instructions to make code completion etc. work.
To generate the required compile_commands.json so that CCLS correctly index the project. You have to do the following:
First, generate the file using cmake:
cmake -H. -BDebug -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=YESThen, copy the file to the root folder:
cp Debug/compile_commands.json .Afterwards you can remove the Debug folder with:
rm -rf DebugNow Vim and CCLS will correctly know how to index the project.