0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

DS小龙哥-嵌入式技术 2022-09-17 15:30 次阅读

【摘要】 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
image-20220124164854786

示例代码:

/*传递整型类型数据*/
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

    文章

    1839

    浏览量

    85263
  • Linux
    +关注

    关注

    87

    文章

    11296

    浏览量

    209353
  • 代码
    +关注

    关注

    30

    文章

    4780

    浏览量

    68531
收藏 人收藏

    评论

    相关推荐

    pcie设备驱动程序安装步骤

    PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,用于计算机内部硬件组件之间的连接。安装PCIe设备驱动程序是确保硬件
    的头像 发表于 11-13 10:32 649次阅读

    LSP 2.10 DaVinci Linux驱动程序

    电子发烧友网站提供《LSP 2.10 DaVinci Linux驱动程序.pdf》资料免费下载
    发表于 10-09 09:30 0次下载
    LSP 2.10 DaVinci <b class='flag-5'>Linux</b><b class='flag-5'>驱动</b>程序

    风扇驱动怎么安装

    风扇驱动安装指南 1. 准备工具和材料 风扇 风扇驱动器(控制器) 电源适配器 螺丝刀 电工胶带 导线 测量工具 2. 安全措施 确保电源已关闭,避免触电风险。 佩戴安全眼镜和手套。 3. 检查风扇
    的头像 发表于 09-23 15:06 450次阅读

    桌面运维工具之打印机驱动安装

    window系统中 人工安装需要经过三个步骤,操作繁琐,效率较低。基于此,我们想开发一个自动化安装打印机驱动的程序,让用户可以自行安装打印机
    的头像 发表于 09-12 15:29 1745次阅读
    桌面运维工具之打印机<b class='flag-5'>驱动</b><b class='flag-5'>安装</b>

    北京迅为RK3568开发板嵌入式学习之Linux驱动全新更新-CAN+

    北京迅为RK3568开发板嵌入式学习之Linux驱动全新更新-CAN+
    的头像 发表于 09-04 15:29 497次阅读
    北京迅为RK3568<b class='flag-5'>开发</b>板嵌入式学习之<b class='flag-5'>Linux</b><b class='flag-5'>驱动</b>全新更新-CAN+

    linux系统的设备驱动一般分几类

    Linux系统的设备驱动是操作系统与硬件设备之间的桥梁,负责实现操作系统与硬件设备之间的通信和控制。Linux系统的设备驱动可以分为以下几类: 字符设备
    的头像 发表于 08-30 15:13 412次阅读

    Linux设备驱动程序分类有哪些

    Linux设备驱动程序是操作系统与硬件设备之间的桥梁,负责实现硬件设备与操作系统之间的通信和控制。Linux设备驱动程序的分类繁多,可以根据不同的标准进行分类。 按硬件类型分类
    的头像 发表于 08-30 15:11 534次阅读

    linux驱动程序如何加载进内核

    Linux系统中,驱动程序是内核与硬件设备之间的桥梁。它们允许内核与硬件设备进行通信,从而实现对硬件设备的控制和管理。 驱动程序的编写 驱动程序的编写是
    的头像 发表于 08-30 15:02 444次阅读

    linux驱动程序主要有哪些功能

    Linux驱动程序是操作系统与硬件设备之间进行通信的桥梁,负责实现硬件设备与操作系统之间的数据交换和控制。Linux驱动程序的主要功能包括以下几个方面: 设备识别与初始化
    的头像 发表于 08-30 14:47 348次阅读

    linux驱动程序的编译方法是什么

    的源代码中,并随内核一起编译。这种方法适用于驱动程序已经非常稳定,且不打算频繁修改的情况。具体步骤如下: 下载并安装Linux内核源代码 :从Linux官方网站或可靠的源下载所需的内核
    的头像 发表于 08-30 14:46 544次阅读

    Linux 驱动开发与应用开发,你知道多少?

    一、Linux驱动开发与应用开发的区别开发层次不同:Linux
    的头像 发表于 08-30 12:16 763次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>驱动</b><b class='flag-5'>开发</b>与应用<b class='flag-5'>开发</b>,你知道多少?

    ArmSoM系列板卡 嵌入式Linux驱动开发实战指南 之 字符设备驱动

    字符设备驱动 本章,我们将学习字符设备使用、字符设备驱动相关的概念,理解字符设备驱动程序的基本框架,并从源码上分析字符设备驱动实现和管理等。 主要分为下面五部分:
    的头像 发表于 04-10 09:53 1050次阅读
    ArmSoM系列板卡 嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>实战指南 之 字符设备<b class='flag-5'>驱动</b>

    总线上的音频设备驱动怎么安装

    安装总线上的音频设备驱动是确保计算机声音正常工作的关键步骤。本文将从安装的必要性和步骤、常见问题和解决方法以及一些技巧方面详细介绍总线上音频设备驱动
    的头像 发表于 01-24 13:44 970次阅读

    嵌入式Linux开发的三种方式

    嵌入式Linux开发主要有三种方式:裸机开发、SDK开发驱动开发
    的头像 发表于 01-22 14:22 963次阅读

    伺服驱动器怎么设置参数

    伺服驱动器是现代工业自动化系统中常用的一种执行控制的设备,它能够通过电信号控制电机的速度和位置。设置伺服驱动器的参数是使用伺服驱动器前必须要进行的一项工作,下面将从硬件
    的头像 发表于 01-11 10:51 4812次阅读