RK3568驅動指南|第一篇 驅動基礎-第5章 驅動模塊傳參實驗

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,採用22nm製程工藝,搭載一顆四核Cortex-A55處理器和Mali G52 2EE 圖形處理器。RK3568 支持4K 解碼和 1080P 編碼,支持SATA/PCIE/USB3.0 外圍接口。RK3568內置獨立NPU,可用於輕量級人工智能應用。RK3568 支持安卓 11 和 linux 系統,主要面向物聯網網關、NVR 存儲、工控平板、工業檢測、工控盒、卡拉 OK、雲終端、車載中控等行業。

第5章 驅動模塊傳參實驗

經過前兩章實驗的實戰操作,我們已經完成最簡單的helloworld驅動實驗和模塊驅動實驗,加載模塊可以使用“insmod”函數,使用“insmod”函數進行模塊加載時也能進行參數的傳遞。運用得當可以極大提升內核測試速度。本節就來學習一下如何進行驅動模塊的傳參。

 

5.1 驅動模塊傳參簡介

驅動模塊傳參是一種可以隨時向內核模塊傳遞、修改參數的方法。例如可以傳遞串口驅動的波特率、數據位數、校驗位、停止位等參數,進行功能的設置,以此節省編譯模塊的時間,大大提高調試速度。

 

Linux內核提供了 module_param(name, type, perm)、module_param_array(name, type, nump, perm)宏和module_param_string(name, string, len, perm)宏,分別進行基本類型、數組和字符串參數的傳遞。它們定義在 “內核源碼/include/linux/moduleparam.h”文件中(在module.h文件中已經對export.h進行引用,所以不需要單獨引用moduleparam.h文件),詳細定義如下(圖5-1)所示:

以上宏定義中的 module_param ()函數可以用來進行基本類型參數的傳遞,傳入的三個參數定義如下:

  • name:模塊參數的名稱
  • type: 模塊參數的數據類型
  • perm: 模塊參數的訪問權限
 
參數type可以取以下任意一種情況:
bool : 布爾型
inbool : 布爾反值
charp: 字符指針(相當於char *,不超過1024字節的字符串)
short:
短整型
ushort : 無符號短整型
int : 整型
uint : 無符號整型
long : 長整型
ulong: 無符號長整型。
參數perm表示該參數在sysfs文件系統中所對應的文件節點的屬性,其權限定義在“內核源碼/include/linux/stat.h”文件中。可以用宏定義和數字法兩種方式來表示。詳細宏定義如下(圖5-2)所示:

如果要傳遞數組類型參數可以使用 module_param_array ()函數,相較於 module_param ()函數多了n_para參數,用來表示傳遞參數個數;n_para參數值會根據輸入的參數個數而改變,n_para的最終值爲傳遞的數組元素個數。

最後是 module_param_string(name, string, len, perm)函數,用來傳遞字符串類型的變量,四個參數的定義如下所示:

name:外部傳入的參數名,即加載模塊時的傳入值

string:內部的變量名,即程序內定義的參數名

len:以string命名的buffer大小(可以小於buffer的大小,但是沒有意義)

perm:模塊參數的訪問權限

至此,關於驅動模塊傳參所使用的函數就講解完成了,在下一小節中將編寫驅動模塊傳參函數代碼。

5.2 實驗程序的編寫

本實驗對應的網盤路徑爲:iTOP-RK3568開發板【底板V1.7版本】\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動例程\02。

本章實驗將編寫Linux下的驅動傳參實例代碼,通過“insmod”命令進行參數的傳遞,並將相應的參數打印到串口終端上。

編寫完成的parameter.c代碼如下(圖5-3)所示

以上代碼將傳遞int類型參數number、char類型參數name、int類型的數組para和char類型字符串str1,並在驅動入口函數中,對各個參數進行打印。在下一小節會進行驅動加載測試。

5.3 運行測試

5.3.1 編譯驅動程序

在上一小節中的parameter.c代碼同一目錄下創建 Makefile 文件,Makefile 文件內容如下(圖5-4)所示:

對於Makefile的內容註釋已在上圖添加,保存退出之後,來到存放parameter.c和Makefile文件目錄下,如下圖(圖5-5)所示:

然後使用命令“make”進行驅動的編譯,編譯完成如下圖(圖5-6)所示:

編譯完生成 parameter.ko目標文件,如下圖(圖5-7)所示:

至此我們的驅動模塊就編譯成功了,下面進行驅動的運行測試。

5.3.2 運行測試

在上一章節中已經學習了使用insmod命令加載模塊,而驅動模塊傳參的命令格式爲

insmod 對應的模塊 參數

parameter.ko 驅動加載可以傳遞3個參數,分別爲int類型的參數number,char類型的參數name和int數組類型的參數para。使用以下命令進行驅動的加載,加載完成之後的打印信息如下圖(圖5-8)所示:

可以看到傳遞的參數都分別打印了出來。最後可以輸入以下命令進行驅動的卸載,如下圖(圖5-9)所示:

更多內容可以關注【公衆號】迅爲電子

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章