Building external kernel modules

From OpenVZ Virtuozzo Containers Wiki
Revision as of 09:54, 6 February 2016 by Finist (talk | contribs) (Created page with "This article describes how to build an kernel module which is not included into the stock Virtuozzo kernel. (This article applies to Virtuozzo 7.) == Building a kernel module...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This article describes how to build an kernel module which is not included into the stock Virtuozzo kernel. (This article applies to Virtuozzo 7.)

Building a kernel module (*.ko)

Here is an example how to build "via-rhine" kernel module which is in the Virtuozzo kernel source tree, but not enabled in kernel config by default.

// You need to install some dev packages in advance (the list here may be incomplete).
# yum install rpm-build gcc xmlto asciidoc hmaccalc python-devel newt-devel pesign
// If you are going to build a kernel module against some kernel, you need kernel headers for that kernel.
// Assume you want to build a kernel module against currently running kernel.
# yum install vzkernel-devel.x86_64
// Get sources of the module you'd like to build,
// in this particular example the easiest way i believe is just to download the kernel src.rpm.
# cd /tmp
# wget https://download.openvz.org/virtuozzo/factory/source/SRPMS/v/vzkernel-3.10.0-327.3.1.vz7.10.10.src.rpm
# rpm -ihv vzkernel-3.10.0-327.3.1.vz7.10.10.src.rpm

// "Prepare" source tree, it's not enough just to take the archive stored in it,
// you need to apply additional patch(es), rpmbuild does this for us.
# rpmbuild -bp /root/rpmbuild/SPECS/kernel.spec --nodeps
// Go to the module source directory.
# cd /root/rpmbuild/BUILD/kernel-3.10.0-327.3.1.el7/linux-3.10.0-327.3.1.vz7.10.10/drivers/net/ethernet/via
// Edit the Makefile so you get the required kernel module compiled.
// In this particular example the via-rhine compiles in-kernel by default, so we need to force it to be built as a module.
# sed -ie 's/$(CONFIG_VIA_RHINE)/m/' Makefile
// Build and install the module.
# make -C /lib/modules/`uname -r`/build M=$PWD
# make -C /lib/modules/`uname -r`/build M=$PWD modules_install
// Check the module has been really copied and load it.
# find /lib/modules -name \*rhine\*
/lib/modules/3.10.0-327.3.1.vz7.10.10/extra/via-rhine.ko

# modprobe via-rhine
# lsmod |grep rhine
via_rhine 32501 0
mii 13934 1 via_rhine

Here you are!

Yellowpin.svg Note: Your case is a bit more complicated? Read Building External Modules

Building a kernel module using Dynamic Kernel Module Support (DKMS)

TBD, you are welcome to put the description here. :)

Building a kernel module rpm package (kmod)

TBD, you are welcome to put the description here. :)