- Fully functional multitasking kernel with interprocess communication mechanisms
- Custom standard library built from the ground up
- Intelligent train control for the marklin train set
- Stylish terminal user interface for monitoring and sending commands to trains
Make a copy of config.mk.example
called config.mk
:
cp config.mk.example config.mk
Then, in config.mk
, replace /u/cs452/public/xdev
with the location of your toolchain directory.
Build the project:
make
This should generate a trainos.img
file. Upload this image file to https://cs452.student.cs.uwaterloo.ca/. This should get it onto the Raspberry Pi.
Turn on the Raspberry Pi (or restart it if it's already on). Wait for the TrainOS kernel to boot up.
WARNING: currently qemu only supports raspberry pi 3, so there may be unexpected between the simulator and the actual lab raspberry pis.
The kernel can be inside qemu and remotely debugged using gdb. Ensure that you have the following installed:
- qemu-system-aarch64
- gdb-multiarch
First build the image with the QEMU=1
. You can set the value in your
config.mk
or pass it to make when building:
make clean; make QEMU=1
Start qemu with the trainos image:
./scripts/sim.sh
This will start a gdbserver on port 1234. Next start gdb-multiarch
and run:
(gdb) target remote :1234
kern
: kernel codeuser
: user programslib
: library implmentationinclude
: header files for libraries