亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

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

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

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

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

在上文中已經(jīng)給出了一個(gè)簡(jiǎn)單的Linux內(nèi)核驅(qū)動(dòng)模塊的模板了。那么我們?cè)谶@個(gè)模板上進(jìn)行添加代碼。



       

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

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

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

 

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

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

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

add_sub_driver.c

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

add_sub_driver.h文件:

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

hello_driver.c文件:

hello_driver.c文件Demo是在上一個(gè)實(shí)驗(yàn)上擴(kuò)展的,如下圖:



       

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

編譯管理工具M(jìn)akefile:

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

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

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

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

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

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

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

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

下一篇:串口基本原理

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

回到頂部

主站蜘蛛池模板: 加勒比在线免费视频 | 日本又黄又爽又免费 | 免费视频| 久久99精品久久久66 | 亚洲日本va中文字幕 | 日本欧洲95视频 | 国产精品免费看香蕉 | 国产成人99精品免费视频麻豆 | 欧美日韩中文 | 久久综合狠狠色综合伊人 | 欧美成人伊人十综合色 | 欧美97久久人人模人人爽人人喊 | 人人玩人人弄人人曰 | 在线观看色网 | 九九久久香港经典三级精品 | 欧美影院一区 | 久久伊人免费 | 日韩三级视频在线播放 | 日韩亚洲国产综合久久久 | 中文字幕色站 | 欧美白人猛性xxxxx69交 | 久久久青草青青国产亚洲免观 | 九九视频这里只有精品99 | 色综合久久天天综线观看 | 男人资源站 | 久久在视频| 国产一区二区久久精品 | 日本黄视频在线观看 | 色呦呦免费观看 | 国产免费全部免费观看 | 两个人看的视频播放www | 巨熟乳波霸若妻中文观看免费 | 欧美另类视频在线观看 | 久久久久一区二区三区 | 国产女主播福利在线 | 俄罗斯aaaa一级毛片 | 天天看天天爽 | 国产ww久久久久久久久久 | 欧美在线一区二区三区精品 | 欧美极品jizzhd欧美 | 欧美 在线播放 |