構建和執行模組
為了編譯驅動程式,必須有 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...