最近開始學習linux驅動編程,看的資料是經典的《linux設備驅動開發 第3版》。 開始驅動練習的前提條件是須要本身的內核樹。 本人的系統爲ubuntu 12.04 LTS,具體創建的步驟以下: (1) 查看自身系統的內核版本,指令爲:uname -r,輸出的信息: **3.8.0-29-generic** 說明內核版本爲3.8.0。 (2) 在目錄/usr/src目錄下發現有一下文件: **linux-headers-3.8.0-29 linux-headers-3.8.0-29-generic** 從文件名能夠看出,這兩個目錄下只有代碼的頭文件。 (3) 測試只有頭文件是否能夠動態加載本身的helloworld模塊(生成方法能夠參考《linux 設備驅動開發》)。 (4) hello.c文件內容: #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { printk(KERN_EMERG "Hello world\n"); return 0; } static int hello_exit(void) { printk(KERN_EMERG "Goodbye, hello world!\n"); return 0; } module_init(hello_init); module_exit(hello_exit); Makefile文件內容: ifneq ($(KERNELRELEASE),) obj-m :=hello.o else KDIR := /lib/modules/3.8.0-29-generic/build all: make -C $(KDIR) M=$(PWD) modules clean: rm -f *.ko *.o *.mod *.mod.c *sysmvers endif (5) 運行:sudo insmod hello.ko sudo rmmod hello.ko 終端沒有反應,可是在查看
/var/log/syslog中發現了輸出信息:說明模塊已經被內核成功加載。linux