gogo专业大尺度亚洲高清人体,美女张开双腿让男生桶,亚洲av无码一区二区三区鸳鸯影院,久久久久国产精品人妻

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Linux字符設(shè)備驅(qū)動模型之Linux內(nèi)核模塊參數(shù)

Linux字符設(shè)備驅(qū)動模型之Linux內(nèi)核模塊參數(shù) 時間:2017-11-06      來源:未知

在Linux內(nèi)核驅(qū)動中,難免的兩個內(nèi)核模塊之間具有依賴關(guān)系,他們或許是通過進行某種傳參,獲取進行函數(shù)之間的調(diào)用。因為每一個模塊在Linux系統(tǒng)Kernel中是相對獨立的,所以Linux內(nèi)核驅(qū)動模塊之間進行通信就不能直接使用函數(shù)調(diào)用等方式了。

一、Linux內(nèi)核模塊參數(shù)

在上文中已經(jīng)給出了一個簡單的Linux內(nèi)核驅(qū)動模塊的模板了。那么我們在這個模板上進行添加代碼。



       

如上圖所示即為所使用代碼。定義全局變量static int  a和static char *str。在Linux內(nèi)核中使用宏module_param聲明這兩個參數(shù)作為內(nèi)核參數(shù)進行傳遞。宏module_param的三個參數(shù)分別代表參數(shù)變量本身、變量的類型和此參數(shù)的使用權(quán)限。后當(dāng)內(nèi)核模塊插入成功,同樣在static int __init hello_init(void)函數(shù)中將這兩個參數(shù)進行打印。

將其編譯生成Linux內(nèi)核驅(qū)動文件hello_driver.ko。將其拷貝到板卡根文件系統(tǒng)中。后使用命令insmod hello_driver.ko裝載驅(qū)動模塊hello_driver。如下圖:

如上圖,當(dāng)驅(qū)動模塊裝載成功后,會有相應(yīng)的打印輸出,但這并未體現(xiàn)出Linux內(nèi)核模塊參數(shù)的特點。

 

二、Linux內(nèi)核模塊參數(shù)之間的通信

實際上Linux內(nèi)核模塊參數(shù)的特性應(yīng)該體現(xiàn)在內(nèi)核驅(qū)動模塊之間的通信或者調(diào)用。現(xiàn)在將實現(xiàn)兩個Linux內(nèi)核驅(qū)動模塊,然后進行調(diào)用。

模塊一:文件名-----add_sub_driver.c和add_sub_driver.h

add_sub_driver.c

如上圖即為add_sub_driver.c驅(qū)動模塊的代碼,其所做的事非常簡單,實現(xiàn)兩個參數(shù)之間的和(int add_int(int i, int j))和差(int sub_int(int i, int j))。后通過EXPORT_SYMBOL模塊導(dǎo)出符將相應(yīng)的函數(shù)導(dǎo)入到內(nèi)核符號表中,可供Linux內(nèi)核其他驅(qū)動模塊進行調(diào)用。

add_sub_driver.h文件:

模塊二:文件名-----hello_driver.c和add_sub_driver.h

hello_driver.c文件:

hello_driver.c文件Demo是在上一個實驗上擴展的,如下圖:



       

如上圖,定義兩個全局變量,通過宏module_param聲明其為內(nèi)核模塊參數(shù)傳遞,后通過在hello_driver內(nèi)核模塊加載時進行調(diào)用add_sub_driver內(nèi)核模塊的實現(xiàn)方法函數(shù),兩個變量作為參數(shù)傳遞。實現(xiàn)兩個Linux內(nèi)核模塊之間的通信。后使用printk將調(diào)試信息打印。

編譯管理工具Makefile:

如上圖為編譯所使用的Makefile文件。其可以同時編譯出hello_driver內(nèi)核模塊hello_driver.ko和add_sub_driver內(nèi)核模塊add_sub_driver.ko。

三、Linux內(nèi)核模塊通信驗證

將編譯生成的hello_driver.ko和add_sub_driver.ko文件拷貝到板卡根文件系統(tǒng)中。然后相序插入內(nèi)核模塊。

方式一:先加載hello_driver.ko后加載add_sub_driver.ko

如上圖可知,當(dāng)先加載hello_driver.ko時,加載失敗,報錯:不能插入hello_driver.ko,其中包含有無效的參數(shù)。

方式二:先加載add_sub_driver.ko后加載hello_driver.ko

如上圖可知,當(dāng)先加載add_sub_driver.ko后加載hello_driver.ko時,直接加載成功。原因是add_sub_driver.ko驅(qū)動模塊中存在hello_driver.ko驅(qū)動模塊加載時所做運算的運算方法函數(shù)。當(dāng)add_sub_driver.ko模塊沒有被加載時,加載hello_driver.ko會在不到實現(xiàn)運算的方法,所以加載失敗。

上一篇:Python 網(wǎng)絡(luò)爬蟲

下一篇:串口基本原理

熱點文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團有限公司 版權(quán)所有 ,京ICP備16055225號-5,京公海網(wǎng)安備11010802025203號

回到頂部