加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
登录/注册
立即注册,领取新人专属福利!
  • 正文
    • hello_param.c示例源码
    • 编译
    • 测试
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-Linux驱动模块之带参数的驱动模块

21小时前
390
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

例程代码路径:ELF 1开发板资料包3-例程源码3-2 驱动例程源码1_helloworldhello_param

Linux驱动模块可以接受参数,这些参数可以在加载模块时通过命令行或配置文件进行配置。驱动模块参数提供了一种动态配置和调整驱动行为的方式。

在Linux内核中,驱动模块参数通常使用module_param宏进行定义和注册。下面是一些常用的驱动模块参数相关的宏和函数:

module_param:用于定义和注册一个驱动模块参数。

module_param(name, type, permissions);

name:参数名称,通常使用驼峰命名法;

type:参数的数据类型,可以是整型、字符型或布尔型等;

permissions:指定参数的访问权限;

MODULE_PARM_DESC:用于定义驱动模块参数的描述信息。

MODULE_PARM_DESC(name, description);

name:参数名称,与之前使用module_param或module_param_array定义的参数名称相同;

description:参数的描述信息;

通过使用这些宏和函数,可以定义和注册驱动模块参数。在加载驱动模块时,可以通过命令行或配置文件设置这些参数的值;

hello_param.c示例源码

#include <linux/module.h>   // 包含模块相关函数的头文件

#include <linux/kernel.h>   // 包含内核相关函数的头文件

#include <linux/init.h>     // 包含初始化和清理函数的头文件

#include <linux/moduleparam.h> //包含模块参数相关函数的头文件

static int my_param = 0;

static char *who = "helloworld";

module_param(my_param, int, S_IRUSR | S_IWUSR);

MODULE_PARM_DESC(my_param, "An integer parameter");

module_param(who, charp, S_IRUSR | S_IWUSR);

MODULE_PARM_DESC(who, "An integer parameter");

static int __init helloworld_init(void)

{

printk(KERN_INFO "Hello, World! my_param is %dn",my_param); // 打印消息到内核日志

printk(KERN_INFO "Hello, World! this is %sn",who);

return 0;

}

static void __exit helloworld_exit(void)

{

printk(KERN_INFO "Goodbye, World!n"); // 打印消息到内核日志

}

module_init(helloworld_init); // 指定驱动程序的初始化函数

module_exit(helloworld_exit); // 指定驱动程序的清理函数

MODULE_LICENSE("GPL"); // 指定模块的许可证信息

MODULE_AUTHOR("Your Name"); // 指定模块的作者信息

MODULE_DESCRIPTION("A simple Hello World driver"); // 指定模块的描述信息

编译

复制helloworld驱动中的Makefile文件,将其中的hello.o修改为hello_param.o,效果如下:

设置环境变量,编译:

 . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

elf@ubuntu:~/work/test/01_helloworld/hello_param$ make

测试

将生成的hello_param.ko文件拷贝到开发板中测试。在开发板中执行insmod加载驱动,rmmod卸载驱动:

root@ELF1:~# insmod hello_param.ko

Hello, World! my_param is 0

Hello, World! this is helloworld

root@ELF1:~# rmmod hello_param.ko

Goodbye, World!

可以看出不输入参数,加载时打印出的是初始化参数。下面我们传入参数看一下效果:

root@ELF1:~# insmod hello_param.ko my_param=72 who=elfboard

Hello, World! my_param is 72

Hello, World! this is elfboard

root@ELF1:~# rmmod hello_param.ko

Goodbye, World!

可以看到我们写的参数传到了驱动中,并打印了出来。

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录