在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            博客專(zhuān)欄

            EEPW首頁(yè) > 博客 > RK3568驅(qū)動(dòng)指南|第一篇 驅(qū)動(dòng)基礎(chǔ)-第6章 內(nèi)核模塊符號(hào)導(dǎo)出實(shí)驗(yàn)

            RK3568驅(qū)動(dòng)指南|第一篇 驅(qū)動(dòng)基礎(chǔ)-第6章 內(nèi)核模塊符號(hào)導(dǎo)出實(shí)驗(yàn)

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

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

            至此,關(guān)于內(nèi)核模塊符號(hào)導(dǎo)出函數(shù)就講解完成了,在下一小節(jié)中將會(huì)編寫(xiě)兩個(gè)驅(qū)動(dòng)代碼來(lái)進(jìn)行內(nèi)核模塊符號(hào)導(dǎo)出實(shí)驗(yàn)。

            6.2 實(shí)驗(yàn)程序的編寫(xiě)

            本實(shí)驗(yàn)對(duì)應(yīng)的網(wǎng)盤(pán)路徑為:iTOP-RK3568開(kāi)發(fā)板【底板V1.7版本】\03_【iTOP-RK3568開(kāi)發(fā)板】指南教程\02_Linux驅(qū)動(dòng)配套資料\04_Linux驅(qū)動(dòng)例程\03。

            本章實(shí)驗(yàn)將編寫(xiě)Linux下的內(nèi)核模塊符號(hào)導(dǎo)出實(shí)例代碼,總共有兩個(gè)驅(qū)動(dòng)程序,第一個(gè)驅(qū)動(dòng)文件名為mathmodule.c,用來(lái)定義參數(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ù)返回值打印到串口終端上。

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

            以上代碼定義了一個(gè)int類(lèi)型的num變量和add()數(shù)學(xué)函數(shù),并使用EXPORT_SYMBOL宏進(jìn)行導(dǎo)出。

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

            程序?qū)肓薸nt類(lèi)型的變量num和add()函數(shù),并在驅(qū)動(dòng)入口函數(shù)中打印相應(yīng)了num的參數(shù)值并對(duì)add()函數(shù)進(jìn)行了調(diào)用。

            至此兩個(gè)驅(qū)動(dòng)代碼就編寫(xiě)完成了,代碼較為簡(jiǎn)單,實(shí)現(xiàn)了內(nèi)核模塊符號(hào)的導(dǎo)出和導(dǎo)出符號(hào)的使用,具體的驅(qū)動(dòng)加載運(yùn)行測(cè)試會(huì)在下個(gè)小節(jié)進(jìn)行。

            6.3 運(yùn)行測(cè)試

            6.3.1 編譯驅(qū)動(dòng)程序

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

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

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

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

            至此我們的驅(qū)動(dòng)模塊就編譯成功了,下面進(jìn)行驅(qū)動(dòng)的加載運(yùn)行測(cè)試。


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

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

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

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


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



            關(guān)鍵詞: 開(kāi)發(fā)板

            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉