概述
内核模块传参问题
Standard types are:
byte, short, ushort, int, uint, long, ulong 注意:没有char类型!!
charp: a character pointer
bool: a bool, values 0/1, y/n, Y/N.
invbool: the above, only sense-reversed (N = true).
module_param(name, type, perm)
功能:接收命令行传的参数
参数:
@name:变量名
@type: 变量的类型
@perm: 权限 0664 0775
MODULE_PARM_DESC(_parm, desc)
功能:对命令行传递的参数进行描述
参数:
@_parm:变量
@desc:描述的字符串
安装驱动的时候传参:
sudo insmod demo.ko light=80
在运行的使用传参
/sys/module/驱动命名的目录/parameters/
以变量命名的文件
su root
echo 70 > light
demo.c
#include <linux/init.h>
#include <linux/module.h>
int light=100;
module_param(light,int,0664);
MODULE_PARM_DESC(light,"this is lcd light(rang 0-100,default 100)");
//入口
static int __init demo_init(void)
{
printk("init :light = %dn",light);
return 0;
}
//出口
static void __exit demo_exit(void)
{
printk("exit :light = %dn",light);
}
module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");
Makefile
KERNELDIR:= /lib/modules/$(shell uname -r)/build/
#KERNELDIR:= /home/linux/kernel/kernel-3.4.39/
PWD:=$(shell pwd)
all:
make -C $(KERNELDIR) M=$(PWD) modules
clean:
make -C $(KERNELDIR) M=$(PWD) clean
obj-m:=demo.o
1.通过命令行传参的形式传递字符类型
2.通过命令行传参的形式传递字符串
3.通过命令行传参的形式传递数组
module_param_array(name, type, nump, perm)
module_param_array(name, type, nump, perm)
功能:接收整型的数组
参数:
@name :数组名
@type :数组的类型
@nump :命令行传递的参数的个数
@perm :权限
sudo insmod demo.ko light=50 tt=65 p="www.hqyj.com" ww=11,22,33
demo.c
#include <linux/init.h>
#include <linux/module.h>
int light=100;
module_param(light,int,0664);
MODULE_PARM_DESC(light,"this is lcd light(rang 0-100,default 100)");
char tt=50; //arm编译器认为char是一个无符号的类型,
//ubuntu编译认识它是有符号的
module_param(tt,byte,0775);
MODULE_PARM_DESC(tt,"this is char var");
char *p="hello driver";
module_param(p,charp,0664);
MODULE_PARM_DESC(p,"this is a char point");
int ww[5] = {0};
int len;
module_param_array(ww,int,&len,0664);
MODULE_PARM_DESC(ww,"this is int [5] array");
//入口
static int __init demo_init(void)
{
int i;
printk("init :light = %dn",light);
printk("tt = %cn",tt);
printk("p = %sn",p);
for(i=0;i<len;i++){
printk("ww[%d] = %dn",i,ww[i]);
}
return 0;
}
//出口
static void __exit demo_exit(void)
{
printk("exit :light = %dn",light);
}
module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");
Makefile
KERNELDIR:= /lib/modules/$(shell uname -r)/build/
#KERNELDIR:= /home/linux/kernel/kernel-3.4.39/
PWD:=$(shell pwd)
all:
make -C $(KERNELDIR) M=$(PWD) modules
clean:
make -C $(KERNELDIR) M=$(PWD) clean
obj-m:=demo.o
最后
以上就是清脆河马为你收集整理的Linux设备驱动开发之内核传参module_param函数的全部内容,希望文章能够帮你解决Linux设备驱动开发之内核传参module_param函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复