构建和运行模块
为了编译驱动程序,必须有 Linux 内核源代码树。
假设源位于/lib/modules/<kernel-version>
,以下 Makefile 会将文件 driver.c
编译成 driver.ko
内核对象
obj-m := driver.o
KDIR := /lib/modules/$(shell uname -r)/build/
PWD := $(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
注意这个 Makefile 如何在内核的 build 目录中调用 make
。
编译步骤成功完成后,驱动程序的 src 目录看起来会像这样:
driver.c driver.ko driver.mod.c driver.mod.o driver.o Makefile modules.order Module.symvers
为了运行模块,有必要插入到运行的内核中:
$ insmod driver.ko
$ dmesg | tail -n 1
[133790.762185] Hello, World!
$ rmmod driver.ko
$ dmesg | tail -n 1
[133790.762185] Goodbye, cruel world...