Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mrpicklepinosaur/trainos

microkernel developed for playing with trains
https://github.com/mrpicklepinosaur/trainos

c cs452 kernel marklin rtos

Last synced: about 5 hours ago
JSON representation

microkernel developed for playing with trains

Awesome Lists containing this project

README

        



# 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`:
```sh
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:
```sh
make
```

This should generate a `trainos.img` file. Upload this image file to [https://cs452.student.cs.uwaterloo.ca/](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:
```sh
make clean; make QEMU=1
```

Start qemu with the trainos image:
```sh
./scripts/sim.sh
```
This will start a gdbserver on port 1234. Next start `gdb-multiarch` and run:
```sh
(gdb) target remote :1234
```

## Directory Structure

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