KernelNewbies
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Kernel Hacking

  • Frontpage

  • Kernel Hacking

  • Kernel Documentation

  • Kernel Glossary

  • FAQ

  • Found a bug?

  • Kernel Changelog

  • Upstream Merge Guide

Projects

  • KernelJanitors

  • KernelMentors

  • KernelProjects

Community

  • Why a community?

  • Regional Kernelnewbies

  • Personal Pages

  • Upcoming Events

References

  • Mailing Lists

  • Related Sites

  • Programming Links

Wiki

  • Recent Changes

  • Site Editors

  • Side Bar

  • Tips for Editors

  • Hosted by WikiWall

Navigation

  • RecentChanges
  • FindPage
  • HelpContents

Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

KernelNewbies:
  • FAQ
  • LinuxKernelModuleCompile

How do I compile a Linux kernel module?

You have to write a Makefile. The Makefile is a standard one and depends on the kernel version. Do not try to make your own Makefile, use the Linux kernel infrastructure, as explained below.

Standard Makefile for 4.0 and later kernels

obj-m := name_of_module.o

clean-files := *.o *.ko *.mod.c

and then use:

cd path/to/external_module
make -C /path/to/kernel/source M=$PWD

Standard Makefile for 2.6 kernels

obj-m := name_of_module.o

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

For more informations, see Linux Device Drivers, Building and Running Modules, and Driver porting: compiling external modules.

Standard Makefile for 2.4 (and <=) kernels

TARGET := module_name
INCLUDE := -I/lib/modules/`uname -r`/build/include
CFLAGS := -O2 -Wall -DMODULE -D__KERNEL__ -DLINUX
CC := gcc

${TARGET}.o: ${TARGET}.c
        $(CC) $(CFLAGS) ${INCLUDE} -c ${TARGET}.c

Once the module is compiled, you can load it with the following command :

insmod module.[ko|o]
  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01