本實驗對應的網盤路徑為: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,并在驅動入口函數中,對各個參數進行打印。在下一小節會進行驅動加載測試。