配色: 字号:
hello驱动
2014-10-27 | 阅:  转:  |  分享 
  
字符驱动hello的编译与加载加载hello_module.c驱动模块,流程,详见E/学习/沈龙梅毕业资料整理/linux学习资料,Hello_world驱动代码分析:代码存在目录linux-3.0.1/drivers/char/forlinx6410_hello_module.c驱动文件名字:forlinx6410_hello_module.c#include#include

/int__initforlinx6410_hello_module_init函数在模块被加载到内核时调用,在本程序中为模块初始化函数,注册模块提供的任何功能,__init是一个标志,表明该函数只在初始化时用,模块加载后该函数的内存可用作其它/staticint__initforlinx6410_hello_module_init(void){printk("Hello,Mini6410moduleisinstalled!\n");return0;}//printk在内核中定义,是内核自己的打印函数,相当于C库中的printf函数,并且对模块可用,因为模块被加载后连接到内核,可存取内核的公用符号

/void__exitmini6410_hello_module_cleanup函数在模块被从内核去除时调用,清理函数,在模块被注销之前返回所有的资源给系统/staticvoid__exitforlinx6410_hello_module_cleanup(void){printk("Good-bye,Mini6410modulewasremoved!\n");}/module_init与module_exit是特殊的内核宏,用来指定函数的角色/module_init(forlinx6410_hello_module_init);module_exit(forlinx6410_hello_module_cleanup);

/MODULE_LICENSE是一个特殊的宏,用来告知内核该模块有一个自由的许可证/MODULE_LICENSE("GPL");

一.Step1:编辑配置文件Kconfig,加入驱动选项,使之在makemenuconfig的时候出现打开linux-3.0.1/drivers/char/Kconfig文件,添加如图所示:

保存退出,这时在linux-2.6.38目录位置运行一下makemenuconfig就可以在DeviceDriversCharacterdevices菜单中看到刚才所添加的选项了“forlinx6410hellomodule”,按下空格键将会选择为,此意为要把该选项编译为模块方式;再按下空格会变为<>,意为要把该选项编译到内核中,在此我们选择

Step2:通过上一步,我们虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能把mini6410_hello_module.c编译进去的,还需要在Makefile中把内核配置选项和真正的源代码联系起来,打开linux-3.0.1/drivers/char/Makefile,如图添加并保存退出:

主意前面Kconfig中的名称configFORLINX6410_HELLO_MODULE和下面obj之后的名称一致,以及后面的名称和前面程序forlinx6410_hello_module.c相同。二.Step3:这时回到linux-2.6.38源代码根目录位置,执行makemodules,就可以生成我们所需要的内核模块文件mini6410_hello_module.ko了

注意:执行makemodules之前,必须先执行makezImage,只需一次就可以了。至此,我们已经完成了模块驱动的编译。

如果没有目录/lib/modules/,需要自己建个目录,然后把forlinx_hello_module.ko移动到这个目录下注意:在调用rmmod命令时,驱动程序去掉.ko由于ok6410中rmmod命令不好用,需要自己重新加载,步骤如下

源码程序:#include#include#include#include#include#includeintmain(intargc,charargv[]){

constcharmodname=argv[1];intret=-1;intmaxtry=10;while(maxtry-->0){ret=delete_module(modname,O_NONBLOCK|O_EXCL);if(ret<0&&errno==EAGAIN)usleep(500000);else

break;}if(ret!=0)

printf("Unabletounloaddrivermodule:%s\n",modname,strerror(errno));}

献花(0)
+1
(本文系program123首藏)