Howto: Adding a new kernel module
Windows Research Kernel @ HPIThe 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
makefiles.
First step: creating the kernel module
subdirectory: 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 obji386 and objamd64.
Finally, your directory structure should be as follows:
The directories base/ntos/foo/amd64/ and
base/ntos/foo/i386/ are required if you have platform
specific source code.
Second step: creating the kernel module
makefile: base/ntos/foo/BUILD/makefile. This
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 asobjs are
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
assigned to ccarchobjs. (3) All remaining (platform
independent) kernel module object files are assigned to
ccobjs.
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
kernel modules:
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.