= Step 0: Checkout and Compile the Kernel = In the preparation phase, we checkout and compile the repositories needed to get started with working with LITMUS^RT^. First, obtain a copy of the LITMUS^RT^ 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/2014.2/x86_64-config [...] 2014-06-12 15:52:49 (8.31 MB/s) - "x86_64-config" saved [65001/65001] $ 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) }}} (The exact numbers don't matter and will differ depending the configuration, the current version of LITMUS^RT^, your compiler version, etc.) 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 }}} You can run `make doc` to get browsable documentation in `docs/`. 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 LITMUS^RT^. On to the [[../Step1|next step]].