How to Create a Custom Scheduler Plugin in LITMUS-RT
A brief guide to creating a new scheduling plugin in LITMUSRT. This tutorial should work with the most recent stable LITMUSRT release (2014.2 at the time of writing); complain to the mailinglist if it doesn't.
- A testing environment (e.g., KVM/Qemu or Bochs). This tutorial assumes KVM.
- Strong C programming skills.
- Ideally, some exposure to OS kernel development.
Work in a checked-out git repository. Do not use the tarball from the web page. This will make keeping track of your edits and incorporating upstream changes much easier.
Test incrementally to catch errors early. Compile test after each edit. Test-boot as often as possible. The earlier you catch an error, the easier it is to debug.
Commit early, commit often. Make many small commits a you go along. You can clean them up later using git rebase.
Do not commit to the master branch. This will make incorporating upstream changes much easier.
Follow the kernel coding standard defined in Documentation/CodingStyle, even when writing “throw away” code.
The tutorial is structured in a series of steps, which are intended to be completed sequentially. When working through these, you should reproduce the instructions on your own local machine. If something seems unclear, please feel free to ask on the mailinglist for clarification.
In the first eight steps, the tutorial re-creates a partitioned EDF (P-EDF) scheduler. In contrast to the PSN-EDF plugin shipping with LITMUSRT, the demo implementation does not support locking and non-preemptive sections to keep it simple.
To be continued... please contribute.
A branch containing commits corresponding to each of the above steps is available at https://github.com/LITMUS-RT/litmus-rt/commits/wiki-tutorial.