- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux驱动开发笔记7驱动模块开发流程
linux驱动开发笔记7驱动模块开发流程
一、驱动模块的搭建
在Drivers目录下建立自己的模块目录
建立Makefile文件,见上一篇博客
建立源文件,源文件矿建如下,其中这两个函数式必须实现的
#includelinux/init.h
#includelinux/module.h
void myprink(int cmd); //一个模块调用的源文件调用另一个源文件需要在本本件声明一下
static __init int moduleTestInit(void)
{
printk(\r\nmoduleTestInit....\r\n);
myprink(100);
return 0;
}
static __exit void moduleTestExit(void)
{
myprink(100);
printk(\r\nmoduleTestExit....\r\n);
}
module_init(moduleTestInit);
module_exit(moduleTestExit);
MODULE_LICENSE(GPL);
MODULE_AUTHOR(tangzhi);
MODULE_VERSION(1.0);
MODULE_DESCRIPTION(this is test for module);
二、一个驱动模块调用另一个驱动模块的函数
A模块要调用B模块的函数
则B模块必须这样定义函数
#include linux/init.h
#include linux/module.h
void my_printk(int no)
{
printk(my_printk %d\n, no);
}
EXPORT_SYMBOL(my_printk); //必须做这个符号导出才能在其它模块使用
MODULE_LICENSE(GPL);
三、模块参数
#include linux/init.h
#include linux/module.h
static int age = 10;
static char *name = zhangsan;
static int array[10];
static int num = 0;
static char string[20];
//module_param_named(a,age,int,S_IRUGO); //a代表参数的名字,在命令行输入时insmod test.ko a=10 .如果输入a参数则age的值为a=value的value值,若不输入参数,则age为默认的定义的值10
//module_param_named(n,name,charp,S_IRUGO);//同上
下面两个函数和上面两个函数一样
module_param(age,int,S_IRUGO);
module_param(name,charp,S_IRUGO);
module_param_array(array,int,num,S_IRUGO);/./num是输入的数组的元素个数,但不能超过定义数组的大小,输入的命令行array=1,2,3,3,
module_param_string(str,string,10,S_IRUGO); // 字符的最大长度为10,命令行输入str=tangzhi
static __init int module_init3(void)
{
printk(module init!!!\r\n);
printk(a = %d!!!\r\n,age);
printk(n = %s!!!\r\n,name);
printk(array num = %d!!!\r\n,num);
while(num--){
printk( %d ,array[num]);
}
printk(\r\n);
printk(str = %s\r\n,string);
return 0;
}
static __exit int module_exit3(void)
{
printk(module exit!!!\r\n);
}
module_init(module_init3);
module_exit(module_exit3);
MODULE_LICENSE(GPL);
文档评论(0)