【摘要】 Linux驱动安装时也支持传递参数,和命令行上运行的命令原理类似。 只不过在编写驱动的时候,需要在驱动代码里提前将相关信息声明好才可以使用。 这篇文章就介绍如果在命令安装驱动时,传递参数给驱动代码,演示各种类型的参数传输情况。
一、简介
在Linux下进行C语言开发时,经常在命令行传递参数给C程序,常见的Linux命令也是需要传参的,这样用起来就很灵活,根据不同的参数可以执行不同的效果。
Linux驱动安装时也支持传递参数,和命令行上运行的命令原理类似。
只不过在编写驱动的时候,需要在驱动代码里提前将相关信息声明好才可以使用。
这篇文章就介绍如果在命令安装驱动时,传递参数给驱动代码,演示各种类型的参数传输情况。
在驱动代码里声明传入参数的类型、权限,接收的变量名称。
module_param(变量的名称,类型,权限)
二、在驱动代码里声明传递参数的格式
/*传递整型类型数据*/
int int_data = 0;
module_param(int_data, int ,0664);
MODULE_PARM_DESC(int_data, "是一个整型的参数.");
/*传递指针类型数据*/
char *p_data = NULL;
module_param(p_data, charp, 0664);
MODULE_PARM_DESC(p_data, "是一个指针类型数据.");
/*
传递数组类型数据
module_param_array(数组名, 元素类型, 元素个数(取地址), 权限);
*/
int array_data[3] = {};
int num = 3;
module_param_array(array_data, int, &num, 0664);
MODULE_PARM_DESC(array_data, "是一个数组类型数据.");
/*
传递字符串: module_param_string
(传递参数时的字符串名称, 字符串名称, 字符串大小, 权限);
*/
char str_data[12] = {};
module_param_string(str_data, str_data, sizeof(str_data), 0664);
MODULE_PARM_DESC(str_data, "是一个字符串类型数据.");
三、完整代码示例
#include
#include
#include
#include
#include
#include
#include
#include
/*传递整型类型数据*/
int int_data = 0;
module_param(int_data, int ,0664);
MODULE_PARM_DESC(int_data, "是一个整型的参数.");
/*传递指针类型数据*/
char *p_data = NULL;
module_param(p_data, charp, 0664);
MODULE_PARM_DESC(p_data, "是一个指针类型数据.");
/*
传递数组类型数据
module_param_array(数组名, 元素类型, 元素个数(取地址), 权限);
*/
int array_data[3] = {};
int num = 3;
module_param_array(array_data, int, &num, 0664);
MODULE_PARM_DESC(array_data, "是一个数组类型数据.");
/*
传递字符串: module_param_string
(传递参数时的字符串名称, 字符串名称, 字符串大小, 权限);
*/
char str_data[12] = {};
module_param_string(str_data, str_data, sizeof(str_data), 0664);
MODULE_PARM_DESC(str_data, "是一个字符串类型数据.");
static int __init tiny4412_param_dev_init(void)
{
printk("安装驱动成功.\n");
printk("int_data=%d\n",int_data);
printk("p_data=%s\n",p_data);
printk("array_data=%d\n",array_data[0]);
printk("str_data=%s\n",str_data);
return 0;
}
static void __exit tiny4412_param_dev_exit(void)
{
printk("卸载驱动成功.\n");
}
module_init(tiny4412_param_dev_init);
module_exit(tiny4412_param_dev_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("wbyq");
四、查看驱动提示信息
[root@wbyq code]#modinfo led_drv.ko
filename: led_drv.ko
license: GPL
author: wbyq
depends:
vermagic: 3.5.0-FriendlyARM SMP preempt mod_unload ARMv7 p2v8
parm: str_data:是一个字符串类型数据.
parm: array_data:是一个数组类型数据.
parm: p_data:是一个指针类型数据.
parm: int_data:是一个整型的参数.
五、安装驱动时传递参数
[root@wbyq code]#insmod led_drv.ko str_data="123" int_data=666 p_data="789" array_data=6,7,8
[ 2692.220000] 安装驱动成功.
[ 2692.220000] int_data=666
[ 2692.220000] p_data=789
[ 2692.220000] array_data=6
[ 2692.220000] str_data=123
六、驱动安装成功在sys目录下查看传递的参数
[root@wbyq code]#cd /sys/module/led_drv/parameters/
[root@wbyq parameters]#ls
array_data int_data p_data str_data
[root@wbyq parameters]#cat array_data
6,7,8
[root@wbyq parameters]#cat int_data
666
[root@wbyq parameters]#cat p_data
789
[root@wbyq parameters]#cat str_data
123
[root@wbyq parameters]#
七、权限定义
用户
#define S_IRWXU 00700
#define S_IRUSR 00400
#define S_IWUSR 00200
#define S_IXUSR 00100
用户组
#define S_IRWXG 00070
#define S_IRGRP 00040
#define S_IWGRP 00020
#define S_IXGRP 00010
其他用户
#define S_IRWXO 00007
#define S_IROTH 00004
#define S_IWOTH 00002
#define S_IXOTH 00001

示例代码:
/*传递整型类型数据*/
int int_data = 0;
module_param(int_data, int ,S_IRUSR|S_IWUSR|S_IXUSR);
MODULE_PARM_DESC(int_data, "是一个整型的参数.");
/*传递指针类型数据*/
char *p_data = NULL;
module_param(p_data, charp, S_IRUSR|S_IWUSR|S_IXUSR);
MODULE_PARM_DESC(p_data, "是一个指针类型数据.");
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
驱动
+关注
关注
12文章
1928浏览量
88197 -
Linux
+关注
关注
88文章
11628浏览量
217965 -
代码
+关注
关注
30文章
4941浏览量
73145
发布评论请先 登录
相关推荐
热点推荐
Linux驱动开发的必备知识
的驱动框架进行开发。
6、调试技能:
掌握内核调试工具,如 KDB、KGDB、printk 等。
能够分析内核日志,定位驱动程序中的问题。
发表于 12-04 07:58
【免费送书】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》
Linux系统的设备驱动开发,一直给人门槛较高的印象,主要因内核机制抽象、需深度理解硬件原理、开发调试难度大所致。2021年,一本讲解驱动
【书籍评测活动NO.67】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》
星期内提交不少于2篇试读报告要求300字以上图文并茂。4、试读报告发表在电子发烧友论坛>>社区活动专版标题名称必须包含 【「Linux 设备驱动开发(第 2 版)」阅读
发表于 11-17 17:52
itop-3568开发板驱动开发指南-实验程序的编写
驱动例程\\\\02。
本章实验将编写 Linux 下的驱动传参实例代码,通过“insmod”命令进行参数的传递,并将相应的
发表于 05-19 10:26
如何在Ubuntu上安装NVIDIA显卡驱动?
作者:算力魔方创始人/英特尔创新大使刘力 一,前言 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windows系统不同,Linux系统通常不会自动
Linux环境再升级:PLIN驱动程序正式发布
PLIN驱动程序现已正式发布,本文将展示如何安装PLIN驱动程序,以及如何在Linux环境下进行基本的PLIN通信操作,确保您能够快速掌握并应用这一新工具。
硬核升级!华清远见STM32MP157驱动开发课程助力嵌入式Linux底层开发入门进阶
在嵌入式Linux系统开发中,驱动程序开发是一项关键技术,它作为硬件与软件之间的桥梁,实现了操作系统对硬件设备的控制。相较于嵌入式Linux
迅为RK3568开发板驱动开发指南helloworld驱动实验-驱动的基本框架
Linux 驱动的基本框架主要由模块加载函数,模块卸载函数,模块许可证声明,模块参数,块导出符号,模块作者信息等几部分组成,其中模块参数,模块导出符号,模块作者信息是选的部分,也就是可
发表于 04-02 14:47
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux驱动模块之带参数的驱动模块
例程代码路径:ELF 1开发板资料包\\03-例程源码\\03-2 驱动例程源码\\01_helloworld\\hello_param
Linux驱动模块可以接受
发表于 03-13 09:52
飞凌嵌入式ElfBoard ELF 1板卡-Linux驱动模块之带参数的驱动模块
例程代码路径:ELF 1开发板资料包\\03-例程源码\\03-2 驱动例程源码\\01_helloworld\\hello_paramLinux驱动模块可以接受参数,这些
发表于 03-12 10:34

Linux驱动开发-安装驱动参数传递
评论