歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux3.0.4下編譯helloworld內核驅動程序

Linux3.0.4下編譯helloworld內核驅動程序

日期:2017/3/1 11:02:42   编辑:Linux編程

看了Linux設備驅動程序第三版中說,要學習驅動編程,先要建立源碼樹。對照我的linux的Ubuntu版本下了一個 2.6.35的,在編譯helloworld程序時提示無效字符'I',查了下發現是由於版本不匹配。後來干脆下了一個最新版的內核3.0.4,直接升級我的ubuntu內核。一切還比較順序,一個一個命令執行下來順利完成升級。最後在編譯helloworld程序的時候居然沒有打印出想要的效果。在/var/log/messages中根本沒看到書上所說的結果啊。原來結果是打印到了/var/log/syslog文件中的。奇怪的是開始的時候把module_exit寫成mudule_exit編譯居然通過,只是使用insmod安裝的module不能夠使用rmmod來卸載,總是提示device or resource busy.不管怎樣第一個程序終於編譯完成了,萬事開頭難。

#include<linux/init.h>

#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");


static int hello_init(void)
{
printk(KERN_ALERT "Hello World"\n);
return 0;
}


static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye,Cruel World\n");
}


module_init(hello_init);

module_exit(hello_exit);

編譯該helloworld的makefile文件是:

obj-m := helloworld.o
KERNELDIR := /lib/modules/3.0.4/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -rf *.o *~core .depend .*.cmd *.ko *.mod.c .tmp_versions $(TARGET)

Copyright © Linux教程網 All Rights Reserved