09_驱动模块传参数
1.01_Linux最简单驱动-helloworld2.02_Linux下编译驱动模块实践3.03_make menuconfig图形化配置4.04_Linux下把驱动编译进内核5.05_杂项设备驱动6.06_应用层和内核层实现数据交互7.07_Linux物理地址到虚拟地址映射8.08_第一个相对完整的驱动实践编写
9.09_驱动模块传参数
10.10_申请字符类设备号11.11_注册字符类设备12.12_自动创建设备节点13.13_Platform 设备驱动14.14_Linux 设备树15.15_pinctl和gpio子系统16.16_ioctl接口17.17_Linux中断18.18_内核定时器19.19_输入子系统20.20_Linux I2C 驱动21.21_FT5X06触摸驱动实验驱动模块传参数
1.什么是驱动传参
驱动传参就是传递参数给我们的驱动。
举例:
insmod beep.ko a=1
2.驱动传参数有什么作用呢?
(1)设置驱动的相关参数,比如设置缓冲区的大小
(2)设置安全校验,防止我们写的驱动被人盗用
3.怎么给驱动传参数?
传递普通的参数, 比如 char int 类型, 使用如下函数:
部分常用参数权限解释如下:
其它的可以使用下面的方法来判断:
可以将数字最后三位转化为二进制:xxx xxx xxx,高位往低位依次看,第一位为 1 表示文件所有者可读,第二位为 1 表示文件所有者可写,第三位为 1 表示文件所有者可执行;接下来三位表示文件所有者同组成员的权限;再下来三位为不同组用户权限。
示例
parameter.c
#include<linux/init.h> //包含宏定义的头文件
#include<linux/module.h> //包含初始化加载模块的头文件
static int a;
/* 驱动传普通参数 */
module_param(a, int, S_IRUSR); //文件所有者可读
static int hello_init(void)
{
/* 内核打印函数不能用printf,因为内核没有办法使用C语言库 */
printk("a = %d\n", a);
return 0;
}
static void hello_exit(void)
{
printk("byby\n"); //内核模块卸载的时候打印"byb byb
printk("a = %d\n", a);
}
module_init(hello_init); //驱动模块的入口
module_exit(hello_exit); //驱动模块的出口
MODULE_LICENSE("GPL"); //声明模块拥有开源许可证
Makefile
obj-m +=parameter.o
KDIR:=/home/mzx/imx6ull/linux-imx-rel_imx_4.1.15_2.1.0_ga
PWD?=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
在开发板上安装驱动
我们进入到/sys/module/parameter/目录下, 查看变量 a 的读写权限, 如下图所示:
传递数组使用以下函数:
注意参数nump要传地址,比如&count
示例
parameter.c
#include<linux/init.h> //包含宏定义的头文件
#include<linux/module.h> //包含初始化加载模块的头文件
static int b[5];
static int count;
/* 驱动传数组参数 */
module_param_array(b, int, &count, S_IRUSR); //文件所有者可读
static int hello_init(void)
{
int i;
for (i = 0; i < count; i++)
{
printk("b[%d] = %d ", i, b[i]);
}
printk("count = %d\n", count);
return 0;
}
static void hello_exit(void)
{
printk("byby\n"); //内核模块卸载的时候打印"byb byb
}
module_init(hello_init); //驱动模块的入口
module_exit(hello_exit); //驱动模块的出口
MODULE_LICENSE("GPL"); //声明模块拥有开源许可证
Makefile
obj-m +=parameter.o
KDIR:=/home/mzx/imx6ull/linux-imx-rel_imx_4.1.15_2.1.0_ga
PWD?=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
注意:数组最多设5个值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!