回答

收藏

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

其他 其他 641 人阅读 | 0 人回复 | 2025-03-12

例程代码路径:ELF 1开发板资料包\03-例程源码\03-2 驱动例程源码\01_helloworld\hello_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 %d\n",my_param); // 打印消息到内核日志
    printk(KERN_INFO "Hello, World! this is %s\n",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!

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

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条