Linux 下的驅(qū)動(dòng)開發(fā)最簡單例子
inux下的驅(qū)動(dòng)程序也沒有聽上去的那么難實(shí)現(xiàn),我們可以看一下helloworld這個(gè)例子就完全可以了解它的編寫的方式!
我們還是先看一個(gè)這個(gè)例子,helloworld
1. [代碼]helloworld.c
?
#include //與module相關(guān)的信息
#include
#include //與init相關(guān)的函數(shù)
static int __init hellokernel_init(void)
{
printk(KERN_INFO "Hello kernel!\n");
return 0;
}
static void __exit hellokernel_exit(void)
{
printk(KERN_INFO "Exit kernel!\n");
}
module_init(hellokernel_init);
module_exit(hellokernel_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("xxxx");
2. [代碼]Makefile
?
obj-m := helloworld.o
PWD := $(shell pwd)
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
rm -rf *.o *~ core .*.cmd *.mod.c ./tmp_version
3. [代碼]執(zhí)行與運(yùn)行結(jié)果
?
3)執(zhí)行make
編譯成功之后會(huì)生成相應(yīng)有ko文件,也就是我們想要的驅(qū)動(dòng)了
4)驅(qū)動(dòng)程序的相關(guān)操作
a)查看ko模塊的信息 modinfo
b)插入模塊 insmod helloworld.ko
c)卸載模塊 rmmod helloworld
d)還有一個(gè)modprobe功能,以后介紹!
5)查看驅(qū)動(dòng)的打印信息
使用dmesg可以查看在驅(qū)動(dòng)的相關(guān)打印信息!
現(xiàn)在有例子是會(huì)有如下的打印內(nèi)容:
---------------------log start----------------------------
[27520.195551] Exit kernel!
[27948.531569] Hello kernel!
---------------------log end----------------------------