Skip to content

MrPicklePinosaur/trainos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TrainOS

microkernel developed for playing with trains

Features

  • 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

Running the code

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.

Running in simulator

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

Directory Structure

  • kern: kernel code
  • user: user programs
  • lib: library implmentation
  • include: header files for libraries