Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Setting Up the Kernel Build Environment | Writing Your First Character Driver
C Device Drivers Basics

bookSetting Up the Kernel Build Environment

Before you can begin writing and testing your own character device drivers, you must set up a suitable kernel build environment. Building kernel modules differs from compiling user-space programs: you interact directly with the kernel’s build system and require a set of specific files to ensure compatibility and successful compilation. The essential files you need are:

  • The kernel source code or at least its headers, matching the running kernel version;
  • A Makefile that instructs the kernel build system how to build your module;
  • Your kernel module source file, usually with a .c extension.

These files form the foundation for building and testing any kernel module.

Makefile.

Makefile.

copy
1234567
obj-m += simple_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

The Makefile shown above is a minimal example tailored for building a kernel module. It uses the obj-m variable to specify the object files to be built as modules. When you run make, it invokes the kernel’s own build system by calling make -C /lib/modules/$(shell uname -r)/build, passing the current directory as the module source location with M=$(PWD). This approach ensures your module is built against the correct kernel version and configuration, leveraging all the compatibility and dependency management provided by the kernel’s infrastructure.

simple_module.c

simple_module.c

copy
1234567891011121314151617181920
#include <linux/module.h> #include <linux/kernel.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("A simple minimal kernel module"); static int __init simple_init(void) { printk(KERN_INFO "Simple module loaded\n"); return 0; } static void __exit simple_exit(void) { printk(KERN_INFO "Simple module unloaded\n"); } module_init(simple_init); module_exit(simple_exit);
question mark

What is the purpose of the obj-m variable in a kernel module Makefile?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 1

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

bookSetting Up the Kernel Build Environment

Sveip for å vise menyen

Before you can begin writing and testing your own character device drivers, you must set up a suitable kernel build environment. Building kernel modules differs from compiling user-space programs: you interact directly with the kernel’s build system and require a set of specific files to ensure compatibility and successful compilation. The essential files you need are:

  • The kernel source code or at least its headers, matching the running kernel version;
  • A Makefile that instructs the kernel build system how to build your module;
  • Your kernel module source file, usually with a .c extension.

These files form the foundation for building and testing any kernel module.

Makefile.

Makefile.

copy
1234567
obj-m += simple_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

The Makefile shown above is a minimal example tailored for building a kernel module. It uses the obj-m variable to specify the object files to be built as modules. When you run make, it invokes the kernel’s own build system by calling make -C /lib/modules/$(shell uname -r)/build, passing the current directory as the module source location with M=$(PWD). This approach ensures your module is built against the correct kernel version and configuration, leveraging all the compatibility and dependency management provided by the kernel’s infrastructure.

simple_module.c

simple_module.c

copy
1234567891011121314151617181920
#include <linux/module.h> #include <linux/kernel.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("A simple minimal kernel module"); static int __init simple_init(void) { printk(KERN_INFO "Simple module loaded\n"); return 0; } static void __exit simple_exit(void) { printk(KERN_INFO "Simple module unloaded\n"); } module_init(simple_init); module_exit(simple_exit);
question mark

What is the purpose of the obj-m variable in a kernel module Makefile?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 1
some-alt