【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開發(fā)板Linux驅(qū)動(dòng)開發(fā)實(shí)戰(zhàn):RK3568內(nèi)核模塊符號(hào)導(dǎo)出詳解
選擇迅為iTOP-3568開發(fā)板,獲取完整驅(qū)動(dòng)開發(fā)套件與工業(yè)級(jí)穩(wěn)定性保障
在復(fù)雜的Linux驅(qū)動(dòng)開發(fā)中,模塊化設(shè)計(jì)是提升代碼可維護(hù)性和復(fù)用性的關(guān)鍵。內(nèi)核模塊符號(hào)導(dǎo)出正是實(shí)現(xiàn)模塊間通信的基礎(chǔ)技術(shù)。本期將基于迅為RK3568開發(fā)板,深入講解這一核心機(jī)制。
迅為提供的完整驅(qū)動(dòng)開發(fā)套件,包含從基礎(chǔ)教程到進(jìn)階實(shí)戰(zhàn)的全套代碼示例,助您快速掌握此類核心驅(qū)動(dòng)開發(fā)技巧。

第5章 內(nèi)核模塊符號(hào)導(dǎo)出實(shí)驗(yàn)
本章節(jié)我們學(xué)習(xí)內(nèi)核模塊符號(hào)導(dǎo)出,什么是內(nèi)核模塊符號(hào)導(dǎo)出呢?內(nèi)核模塊之間是相互獨(dú)
立的,互相不能直接訪問。將內(nèi)核模塊的符號(hào)(函數(shù)或變量)導(dǎo)出后,導(dǎo)出的符號(hào)(函數(shù)或變
量)可以被其他模塊使用。
5.1 內(nèi)核模塊符號(hào)導(dǎo)出簡介
驅(qū)動(dòng)程序編譯生成的ko文件是相互獨(dú)立的,即模塊之間變量或者函數(shù)在正常情況下無法
進(jìn)行互相訪問。而一些復(fù)雜的驅(qū)動(dòng)模塊需要分層進(jìn)行設(shè)計(jì),這時(shí)候就需要用到內(nèi)核模塊符號(hào)導(dǎo)
出。
內(nèi)核模塊符號(hào)導(dǎo)出指的是在內(nèi)核模塊中導(dǎo)出相應(yīng)的函數(shù)和變量,符號(hào)導(dǎo)出所使用的宏為E
XPORT_SYMBOL(sym)和EXPORT_SYMBOL_GPL(sym)。定義在 內(nèi)核源碼/include/linux/export.h文
件中(在module.h文件中已經(jīng)對(duì)export.h進(jìn)行引用,所以不需要單獨(dú)引用export.h文件),詳
細(xì)定義如代碼清單5.1所示:

EXPORT_SYMBOL(sym)和EXPORT_SYMBOL_GPL(sym)兩個(gè)宏使用方法相同,sym參數(shù)表示要
導(dǎo)出的函數(shù)或變量名稱。
宏EXPORT_SYMBOL_GPL(sym)導(dǎo)出的內(nèi)核模塊符號(hào)只能被GPL許可的模塊使用,因此絕
大多數(shù)情況都是使用EXPORT_SYMBOL(sym)宏進(jìn)行內(nèi)核模塊符號(hào)導(dǎo)出。
5.2 實(shí)驗(yàn)程序的編寫
本實(shí)驗(yàn)代碼存在網(wǎng)盤iTOP-RK3568開發(fā)板【底板V1.7版本】\03_【iTOP-RK3568開發(fā)板】
指南教程\02_Linux驅(qū)動(dòng)配套資料\04_Linux驅(qū)動(dòng)例程\03路徑下。
本章實(shí)驗(yàn)將編寫Linux下的內(nèi)核模塊符號(hào)導(dǎo)出實(shí)例代碼,總共有兩個(gè)驅(qū)動(dòng)程序,第一個(gè)驅(qū)
動(dòng)文件名為mathmodule.c,用來定義參數(shù)num和函數(shù)add(a,b),第二個(gè)驅(qū)動(dòng)文件名為hello.c,
會(huì)引用mathmodule.c驅(qū)動(dòng)程序中的參數(shù)num和數(shù)學(xué)函數(shù)add(a,b),并將相應(yīng)的參數(shù)值和函數(shù)
返回值打印到串口終端上。
代碼清單5.2是mathmodule.c代碼。
代碼清單5.2


代碼清單5.2定義了一個(gè)int類型的num變量和add()數(shù)學(xué)函數(shù),并使用EXPORT_SYMBOL
宏進(jìn)行導(dǎo)出。
代碼清單5.3是hello.c代碼。
代碼清單5.3

代碼清單5.3中程序使用了在代碼清單5.2中定義的int類型的變量num和add()函數(shù),并
在驅(qū)動(dòng)入口函數(shù)中打印相應(yīng)了num的參數(shù)值并對(duì)add()函數(shù)進(jìn)行了調(diào)用。
5.3 運(yùn)行測(cè)試
5.3.1 編譯驅(qū)動(dòng)程序
在mathmodule.c和hello.c的同一目錄下創(chuàng)建Makefile文件,如圖5.1所示。

Makefile文件內(nèi)容如代碼清單5.4所示:
代碼清單5.4

這里要注意的是在hello.c代碼中使用了mathmodule.c所導(dǎo)出的符號(hào),所以mathmodule.c
要在hello.c之前進(jìn)行編譯,即Makefile中第3行和第4行代碼順序不能交換。
使用命令make編譯驅(qū)動(dòng)程序,編譯成功后如圖5.2所示:

編譯完后會(huì)生成hello.ko和mathmodule.ko目標(biāo)文件,如圖5.3所示:

5.3.2 運(yùn)行測(cè)試
由于hello.ko依賴于mathmodule.ko,所以mathmodule.ko需要先加載,分別使用以下命
令進(jìn)行模塊的加載(加載順序不能變):
insmod mathmodule.ko
insmod hello.ko
打印信息如圖5.4所示。

通過圖5.4可以看出當(dāng)hello.ko驅(qū)動(dòng)加載的時(shí)候,在mathmodule.ko模塊中定義的num參
數(shù)值和在hello.ko中調(diào)用add()函數(shù)的后的返回值都被打印了出來。說明mathmodule.ko中已經(jīng)
成功實(shí)現(xiàn)內(nèi)核模塊符號(hào)導(dǎo)出。
可以輸入以下命令進(jìn)行驅(qū)動(dòng)的卸載:
rmmod hello.ko
rmmod mathmodule.ko
打印信息如圖5.5所示。
-
開發(fā)板
+關(guān)注
關(guān)注
26文章
6288瀏覽量
117979 -
Linux驅(qū)動(dòng)
+關(guān)注
關(guān)注
0文章
47瀏覽量
10480 -
RK3568
+關(guān)注
關(guān)注
5文章
644瀏覽量
7903
發(fā)布評(píng)論請(qǐng)先 登錄
迅為驅(qū)動(dòng)開發(fā)實(shí)戰(zhàn):iTOP-RK3568開發(fā)板eDP屏幕移植全攻略
迅為iTOP-3568開發(fā)板?Linux驅(qū)動(dòng)開發(fā)實(shí)戰(zhàn):menuconfig圖形化配置實(shí)驗(yàn)
【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開發(fā)板驅(qū)動(dòng)開發(fā)第4章驅(qū)動(dòng)模塊傳參實(shí)驗(yàn)
【北京迅為】itop-3568開發(fā)板驅(qū)動(dòng)開發(fā)指南(重制版)
迅為RK3568開發(fā)板模型推理測(cè)試實(shí)戰(zhàn)LPRNet?車牌識(shí)別
迅為RK3568開發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入
迅為RK3568開發(fā)板安裝燒錄工具-安裝 RKTool 驅(qū)動(dòng)
迅為RK3568開發(fā)板驅(qū)動(dòng)指南GPIO子系統(tǒng)三級(jí)節(jié)點(diǎn)操作函數(shù)實(shí)驗(yàn)
【北京迅為】iTOP-RK3568開發(fā)板鴻蒙OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開發(fā)實(shí)操-HDF驅(qū)動(dòng)配置UART
【北京迅為】iTOP-RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開發(fā)-第4章 UART基礎(chǔ)知識(shí)
北京迅為iTOP-RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開發(fā)實(shí)操-HDF驅(qū)動(dòng)配置LED
北京迅為RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開發(fā)內(nèi)核HDF驅(qū)動(dòng)框架架構(gòu)
【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向驅(qū)動(dòng)開發(fā)GPIO基礎(chǔ)知識(shí)
【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開發(fā)板Linux驅(qū)動(dòng)開發(fā)實(shí)戰(zhàn):RK3568內(nèi)核模塊符號(hào)導(dǎo)出詳解
評(píng)論