驱动传递参数/驱动符号导出

在编写内核模块的时候,经常需要在加载内核模块的时候传递一些参数,Linux内核提供了简单便捷的方法向内核模块传递参数

1  定义模块参数的方法

        module_param(name, type, perm);   

                  name:表示参数的名字;

                  type:表示参数的类型;

                  perm:表示参数的访问权限; (0664,0755)

 2 数组类型模块参数的定义:

        module_param_array(name, type, num, perm);

                  name:表示数组的名字;

                  type:表示参数的类型;

                  num :表示数组中元素数量;

                  perm:表示参数的访问权限;(0664,0775)

  3  对变量的功能进行描述

       MODULE_PARM_DESC(_parm, desc)

                  _parm:变量

                  desc :描述字段

type支持的基本类型有:

        bool   :布尔类型

        invbool:颠倒了值的bool类型;

        charp  :字符指针类型,内存为用户提供的字符串分配;

        int    :整型

        long   :长整型

        short  :短整型

        uint   :无符号整型

        ulong  :无符号长整型

        ushort :无符号短整型 

 5      注意传递参数时候要把变量加上  ,参数之间需要加上的空格

        insmod hello.ko   i=100   

        modinfo进行查看

例子如下

#include <linux/module.h>
#include <linux/in.h>
#include<linux/moduleparam.h>
int   i=10;
char  *s1="xiang  jie";
module_param(i, int, 0664);   
MODULE_PARM_DESC(_i, "int  bian liang");//对int的描述
module_param(s1, charp, 0664);   
MODULE_PARM_DESC(s1, "xiang  is  girl");//对int的描述


//入口函数
static int __init xiang_init(void)
{
         printk("i==========%d\n",i);
	printk("c==========%s\n",s1);
        return 0;
}
//出口函数
static  void  __exit  xiang_exit()
{  
         printk("xxxxxxxxxxxxxxx\n");

}
//对入口函数和出口的修饰
module_init(xiang_init);
module_exit(xiang_exit);
MODULE_LICENSE("GPL");

符号的导出:驱动程序之间存在有依赖关系,(第一个驱动程序可能会使用第二个驱动程序中的某个函数)

EXPORT_SYMBOL(函数的名字)//导出符号表十所调用的函数成为全局变量

例子如下

#include <linux/module.h>
#include <linux/in.h>
#include<linux/moduleparam.h>

int  add(int a,int b)
{
    return a+b;
}
EXPORT_SYMBOL( add);//变成全局变量
int  sub(int  a,int b)
{

     return a-b;

}
EXPORT_SYMBOL( sub);//变成全局变量
//入口函数
static int __init xiang_init(void)
{

	printk("aaaaaaaaaaaaaadd\n");
        return 0;
}
//出口函数
static  void  __exit  xiang_exit()
{  
  

}
//对入口函数和出口的修饰
module_init(xiang_init);
module_exit(xiang_exit);
MODULE_LICENSE("GPL");
#include <linux/module.h>
#include <linux/in.h>
#include<linux/moduleparam.h>
int   i=10;
char  *s1="xiang  jie";
module_param(i, int, 0664);   
MODULE_PARM_DESC(_i, "int  bian liang");//对int的描述
module_param(s1, charp, 0664);   
MODULE_PARM_DESC(s1, "xiang  is  girl");//对int的描述

extern   int  add(int a,int b);
extern    int  sub(int a,int b);

//入口函数
static int __init xiang_init(void)
{
         printk("i==========%d\n",i);
	 printk("%d\n",add(40,20));
	printk("c==========%s\n",s1);
	printk("%d\n",sub(30,20)); 
        return 0;
}
//出口函数
static  void  __exit  xiang_exit()
{  
         printk("xxxxxxxxxxxxxxx\n");

}
//对入口函数和出口的修饰
module_init(xiang_init);
module_exit(xiang_exit);
MODULE_LICENSE("GPL");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值