linux设备驱动,参考LDD。
设备驱动程序,没有main函数,看着有点奇怪。
总的来说,设备驱动可以动态加载,也可以直接编译在内核中,最终的结果就是存在一个系统能找到的内存记录中,以备调用。
本例 hello world 并没有做被系统调用的接口,只是完成动态加载的初始化,和下载模块,只做简单的输出,需要两个文件,hello.c 和Makefile
//文件(1)---------------hello.c---------------------------------------------
#include
#include
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, curel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
//文件(2)-------------------------Makefile------------------------
obj -m : = hello.o //这个文件只有一行。
---------------------------------------------------------------------
完成以后,执行命令
$make -C -C /usr/src/kernels/2.6.32-358.el6.i686/ M=`pwd` modules
其中/usr/src/kernel/2.6.32-358.el6.i686/是自己的电脑的版本源代码配置在的文件夹。
M = `pwd`表示源代码 hello.c 在的文件夹。
modules 是make命令的参数,表示要编译的是模块文件。
生成hello.ko文件,和一些中间文件。
加载模块:#insmod hello.ko
参看内核输出:#dmesg
查看模块:# lsmod | grep hello
卸载模块:#rmmod hello
再次参看内核输出:#dmesg
阅读(1141) | 评论(0) | 转发(0) |