飞凌嵌入式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! 
 
可以看到我们写的参数传到了驱动中,并打印了出来。 
 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |