Step 0: Checkout and Compile the Kernel
In the preparation phase, we checkout and compile the repositories needed to get started with working with LITMUSRT.
First, obtain a copy of the LITMUSRT kernel.
$ git clone http://www.litmus-rt.org/src/litmus-rt.git Cloning into litmus-rt... $ cd litmus-rt/ $ ls COPYING Documentation Kconfig Makefile REPORTING-BUGS block drivers fs init kernel litmus net scripts sound usr CREDITS Kbuild MAINTAINERS README arch crypto firmware include ipc lib mm samples security tools virt
Next, obtain a working kernel configuration. For this tutorial, we are going to use the default KVM configuration.
$ wget http://www.litmus-rt.org/releases/2012.2/x86_64-config [...] 2012-08-13 14:22:25 (13.7 MB/s) - "x86_64-config" saved [52837/52837] $ cp x86_64-config .config
Compile the kernel. On x86, the kernel build target is bzImage. Note that we do not compile modules for the default KVM configuration because all necessary drivers are statically compiled into the kernel image.
$ make -j16 bzImage [...] CC arch/x86/boot/compressed/cmdline.o CC arch/x86/boot/compressed/early_serial_console.o OBJCOPY arch/x86/boot/compressed/vmlinux.bin HOSTCC arch/x86/boot/compressed/mkpiggy GZIP arch/x86/boot/compressed/vmlinux.bin.gz MKPIGGY arch/x86/boot/compressed/piggy.S AS arch/x86/boot/compressed/piggy.o LD arch/x86/boot/compressed/vmlinux ZOFFSET arch/x86/boot/zoffset.h OBJCOPY arch/x86/boot/vmlinux.bin AS arch/x86/boot/header.o LD arch/x86/boot/setup.elf OBJCOPY arch/x86/boot/setup.bin BUILD arch/x86/boot/bzImage Root device is (8, 1) Setup is 14908 bytes (padded to 15360 bytes). System is 3334 kB CRC 3e3102d9 Kernel: arch/x86/boot/bzImage is ready (#1)
Next, obtain a copy of liblitmus, the corresponding userspace library
$ git clone http://www.litmus-rt.org/src/liblitmus.git Cloning into liblitmus... $ cd liblitmus/ $ ls INSTALL Makefile README arch bin inc include setsched showsched src tests
Finally, compile liblitmus. Note that this must occur after checking out the kernel since the liblitmus build system pulls some headers out of the kernel repository.
$ make cp ../litmus-rt/include/litmus/rt_param.h include/litmus/rt_param.h [...] gcc -o runtests -m64 core_api.o fdso.o locks.o pcp.o runner.o -L. -llitmus
We are now ready to start hacking LITMUSRT.
Step 1: Dummy File
Create a new file and add it to the build system.
Create the file litmus/sched_demo.c (all file names are relative to the kernel repository).
Edit the file litmus/Makefile to add sched_demo.o to the list named obj-y.
- Compile the kernel to see if everything works.
After you've verified there are no errors, create a git commit.