- 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.mkThen, in config.mk, replace /u/cs452/public/xdev with the location of your toolchain directory.
Build the project:
makeThis 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=1Start qemu with the trainos image:
./scripts/sim.shThis will start a gdbserver on port 1234. Next start gdb-multiarch and run:
(gdb) target remote :1234kern: kernel codeuser: user programslib: library implmentationinclude: header files for libraries
