+
+ <div class="main">
+ <div class="titre">
+ <h1>OpenWrt Kernel Module Creation Howto</h1>
+ </div>
+
+ <h2><a name="about_module" id="about_module"></a>About OpenWrt Kernel Module Compilation</h2>
+
+ <p>You are planning to compile a kernel module? This howto will
+explain what you have to do, to have your kernel module installable as
+an ipkg.</p>
+
+ <h2><a name="kernel" id="kernel"></a>Enable the kernel options</h2>
+
+ <p>Enable the kernel options you want by modifying
+build_mipsel/linux/.config. We are assuming, that you already had your
+kernel compiled once here. You can do the modification by hand or by
+
+<pre>
+$ cd build_mipsel/linux
+$ make menuconfig
+</pre>
+
+And copy it, so your changes are not getting lost, when doing a 'make
+dirclean'. Here we assume that you are compiling for Broadcom chipset
+based devices:
+
+<pre> $ cp .config ../../../target/linux/linux-2.4/config/brcm </pre>
+
+</p>
+ <h2><a name="buildroot_option" id="buildroot_option"></a>Create a buildroot option</h2>
+
+ <p>Create a buildroot option by modifying/inserting into
+target/linux/Config.in, e.g.
+
+<pre>
+config BR2_PACKAGE_KMOD_USB_KEYBOARD
+ tristate "Support for USB keyboards"
+ default m
+ depends BR2_PACKAGE_KMOD_USB_CONTROLLER
+</pre>
+</p>
+
+ <h2><a name="binary" id="binary"></a>Define the binary files for the kernel module</h2>
+
+ <p>Define the binary files for the kernel module by modifying/inserting into
+target/linux/linux-2.4/Makefile, e.g.
+
+<pre>
+$(eval $(call KMOD_template,USB_KEYBOARD,usb-kbd,\
+ $(MODULES_DIR)/kernel/drivers/input/input.o \
+ $(MODULES_DIR)/kernel/drivers/input/keybdev.o \
+ $(MODULES_DIR)/kernel/drivers/usb/usbkbd.o \
+,CONFIG_USB_KEYB,kmod-usb-core,60,input keybdev usbkbd))
+</pre>
+
+Where CONFIG_USB_KEYB is the kernel option, USB_KEYBOARD is the last
+part of BR2_PACKAGE_KMOD_USB_KEYBOARD and usb-kbd is part of the
+filename of the created ipkg.</p>
+
+ <h2><a name="control" id="control"></a>Specify the ipkg control file</h2>
+
+ <p>Create e.g. target/linux/control/kmod-usb-kbd.control with content similar to this:
+
+<pre>
+Package: kmod-usb-kbd
+Priority: optional
+Section: sys
+Maintainer: Markus Becker <mab@comnets.uni-bremen.de>
+Source: buildroot internal
+Description: Kernel Support for USB Keyboards
+</pre>
+ </p>
+
+ <h2><a name="compile" id="compile"></a>Compile the kernel module</h2>
+
+ <p>Enable the kernel module with
+<pre>
+$ make menuconfig
+</pre>
+ in TOPDIR and selecting it.<br>
+
+ Compile with
+<pre>
+$ make dirclean && make
+</pre>
+ </p>
+ </div>
+