Howto: Adding a new kernel moduleWindows Research Kernel @ HPI
The Windows Research Kernel contains multiple kernel modules,
e.g. for memory management or for the executive layer. Each module
has its own subdirectory in
base/ntos. If you want to
extend the WRK it might be useful to collect all your new files in a
new kernel module. This post explains the necessary steps for adding
a new kernel module. Basically, all it takes is tweaking a few
First step: creating the kernel module
base/ntos/foo. The WRK build
process expects the kernel module makefile and directories for
binary files in another subdirectory
BUILD. So, you
have to create this sub-subdirectory as well. The directories for
binary files are
Finally, your directory structure should be as follows:
base/ntos/foo/i386/ are required if you have platform
specific source code.
Second step: creating the kernel module
makefile is used to build the new kernel module. The following
listing shows a basic stub for a kernel module makefile.
library = $(module) !if "$(targ)" == "i386" # i386 specific asobjs= \ $(OBJ)\x86asmfoo.obj ccarchobjs= \ $(OBJ)\x86cfoo.obj !else # amd64 specific # ... !endif ccobjs= \ $(OBJ)\foo.obj \ $(OBJ)\bar.obj !include $(ntos)\BUILD\makefile.build
The makefile contains three different kinds of object file
information: (1) Object files assigned to
built using assembler, the asm files are located in a platform
dependent subdirectory of the kernel module. E.g.
base/ntos/foo/i368/bar.asm. (2) Further platform
dependent object files which are generated from regular C files are
ccarchobjs. (3) All remaining (platform
independent) kernel module object files are assigned to
You have to add object file entries for the files your kernel module implementation contains at the appropriate makefile location.
Final step: integrating the module into the
regular WRK build process. The main WRK makefile is
base/ntos/makefile. This file defines the available
modules = rtl config ex ob se mm ke ps io\iomgr io cache
lpc dbgk raw fstub fsrtl wmi perf init
Just extend this line with the newly created kernel module.