本实验对应的网盘路径为:iTOP-RK3568 开发板【底板 V1.7 版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux 驱动配套资料\04_Linux 驱动例程\02。
本章实验将编写 Linux 下的驱动传参实例代码,通过“insmod”命令进行参数的传递,并将相应的参数打印到串口终端上。
编写完成的 parameter.c 代码如下(图 5-3)所示
1、#include <linux/init.h>
2、#include <linux/module.h>
3、static int number;//定义 int 类型变量 number
4、static char *name;//定义 char 类型变量 name
5、static int para[8];//定义 int 类型的数组
6、static char str1[10];//定义 char 类型字符串 str1
7、static int n_para;//定义 int 类型的用来记录 module_param_array 函数传递数组元素个数的变量 n_para
8、module_param(number, int, S_IRUGO);//传递 int 类型的参数 number,S_IRUGO 表示权限为可读
9、module_param(name, charp, S_IRUGO);//传递 char 类型变量 name
10、module_param_array(para , int , &n_para , S_IRUGO);//传递 int 类型的数组变量 para
11、module_param_string(str, str1 ,sizeof(str1), S_IRUGO);//传递字符串类型的变量 str1
12、static int __init parameter_init(void)//驱动入口函数
13、{
14、static int i;
15、printk(KERN_EMERG "%d\n",number);
16、printk(KERN_EMERG "%s\n",name);
17、for(i = 0; i < n_para; i++)
18、{
19、printk(KERN_EMERG "para[%d] : %d \n", i, para[i]);
20、}
21、printk(KERN_EMERG "%s\n",str1);
22、return 0;
23、}
24、static void __exit parameter_exit(void)//驱动出口函数
25、{
26、printk(KERN_EMERG "parameter_exit\n");
27、}
28、module_init(parameter_init);//注册入口函数
29、module_exit(parameter_exit);//注册出口函数
30、MODULE_LICENSE("GPL v2");//同意 GPL 开源协议
31、MODULE_AUTHOR("topeet"); //作者信息
以上代码将传递 int 类型参数 number、char 类型参数 name、int 类型的数组 para 和 char类型字符串 str1,并在驱动入口函数中,对各个参数进行打印。在下一小节会进行驱动加载测试。
|