国产亚洲精品AA片在线观看,丰满熟妇HD,亚洲成色www成人网站妖精,丁香五月天婷婷五月天男人天堂

博客專欄

EEPW首頁 > 博客 > RK3568驅(qū)動指南|第一篇 驅(qū)動基礎-第6章 內(nèi)核模塊符號導出實驗

RK3568驅(qū)動指南|第一篇 驅(qū)動基礎-第6章 內(nèi)核模塊符號導出實驗

發(fā)布人:紅李亞 時間:2024-02-26 來源:工程師 發(fā)布文章
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和Mali G52 2EE 圖形處理器。RK3568 支持4K 解碼和 1080P 編碼,支持SATA/PCIE/USB3.0 外圍接口。RK3568內(nèi)置獨立NPU,可用于輕量級人工智能應用。RK3568 支持安卓 11 和 linux 系統(tǒng),主要面向物聯(lián)網(wǎng)網(wǎng)關、NVR 存儲、工控平板、工業(yè)檢測、工控盒、卡拉 OK、云終端、車載中控等行業(yè)。
第6章 內(nèi)核模塊符號導出實驗
在上一小節(jié)中,給大家講解了驅(qū)動模塊傳參實驗,使用insmod命令加載驅(qū)動時可以進行參數(shù)的傳遞,但是每一個內(nèi)核模塊之間是相互獨立的,那模塊間的符號傳遞要怎樣進行呢,讓我們帶著疑問來進行本章節(jié)的學習吧!
6.1 內(nèi)核模塊符號導出簡介
驅(qū)動程序編譯生成的ko文件是相互獨立的,即模塊之間變量或者函數(shù)在正常情況下無法進行互相訪問。而一些復雜的驅(qū)動模塊需要分層進行設計,這時候就需要用到內(nèi)核模塊符號導出。
內(nèi)核符號導出指的是在內(nèi)核模塊中導出相應的函數(shù)和變量,在加載模塊時被記錄在公共內(nèi)核符號表中,以供其他模塊調(diào)用。符號導出所使用的宏為EXPORT_SYMBOL(sym)和EXPORT_SYMBOL_GPL(sym)。它們定義在 “內(nèi)核源碼/include/linux/export.h”文件中(在module.h文件中已經(jīng)對export.h進行引用,所以不需要單獨引用export.h文件),詳細定義如下(圖6-1)所示:

EXPORT_SYMBOL(sym)和EXPORT_SYMBOL_GPL(sym)兩個宏使用方法相同,而EXPORT_SYMBOL_GPL(sym)導出的模塊只能被 GPL 許可的模塊使用,所以絕大多數(shù)的情況都使用EXPORT_SYMBOL(sym)進行符號導出。sym為函數(shù)的唯一參數(shù),表示要導出的函數(shù)或變量名稱。

至此,關于內(nèi)核模塊符號導出函數(shù)就講解完成了,在下一小節(jié)中將會編寫兩個驅(qū)動代碼來進行內(nèi)核模塊符號導出實驗。

6.2 實驗程序的編寫

本實驗對應的網(wǎng)盤路徑為:iTOP-RK3568開發(fā)板【底板V1.7版本】\03_【iTOP-RK3568開發(fā)板】指南教程\02_Linux驅(qū)動配套資料\04_Linux驅(qū)動例程\03。

本章實驗將編寫Linux下的內(nèi)核模塊符號導出實例代碼,總共有兩個驅(qū)動程序,第一個驅(qū)動文件名為mathmodule.c,用來定義參數(shù)num和函數(shù)add(a,b),第二個驅(qū)動文件名為hello.c,會引用mathmodule.c驅(qū)動程序中的參數(shù)num和數(shù)學函數(shù)add(a,b),并將相應的參數(shù)值和函數(shù)返回值打印到串口終端上。

編寫完成的mathmodule.c代碼如下(圖6-2)所示

以上代碼定義了一個int類型的num變量和add()數(shù)學函數(shù),并使用EXPORT_SYMBOL宏進行導出。

編寫完成的hello.c代碼如下(圖6-3)所示:

程序?qū)肓薸nt類型的變量num和add()函數(shù),并在驅(qū)動入口函數(shù)中打印相應了num的參數(shù)值并對add()函數(shù)進行了調(diào)用。

至此兩個驅(qū)動代碼就編寫完成了,代碼較為簡單,實現(xiàn)了內(nèi)核模塊符號的導出和導出符號的使用,具體的驅(qū)動加載運行測試會在下個小節(jié)進行。

6.3 運行測試

6.3.1 編譯驅(qū)動程序

在mathmodule.c和hello.c的同一目錄下創(chuàng)建Makefile文件,Makefile文件內(nèi)容如下(圖6-4)所示:

對于Makefile的內(nèi)容注釋已在上圖進行添加,這里要注意的是在hello.c代碼中使用了mathmodule.c所導出的符號,所以mathmodule.c要在hello.c之前進行編譯,即第3行和第4行順序不能交換。保存退出之后,來到相應的文件目錄下,如下圖(圖6-5)所示:

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

編譯完后會生成hello.ko和mathmodule.ko目標文件,如下圖(圖6-7)所示:

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


可以看到 hello.ko驅(qū)動加載的時候,mathmodule.ko模塊中定義的num參數(shù)值和調(diào)用sum()函數(shù)的后正確的返回值都被打印了出來。至此內(nèi)核模塊符號導出實驗就完成了。

最后可以輸入以下命令進行驅(qū)動的卸載,如下圖(圖6-9)所示:

注意:由于hello.ko文件使用了mathmodule.ko導出的符號,所以要先卸載hello.ko,卸載完成之后再卸載mathmodule.ko。

更多內(nèi)容可以關注北京迅為電子


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。



關鍵詞: 開發(fā)板

相關推薦

技術專區(qū)

關閉