構建和執行模組

為了編譯驅動程式,必須有 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...