亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux的驅(qū)動(dòng)開(kāi)發(fā)分析

        2014-07-02 23:20:09姜遠(yuǎn)志
        無(wú)線互聯(lián)科技 2014年1期
        關(guān)鍵詞:系統(tǒng)開(kāi)發(fā)嵌入式驅(qū)動(dòng)

        姜遠(yuǎn)志

        摘 要:本文分析了linux下的驅(qū)動(dòng)開(kāi)發(fā),對(duì)原理進(jìn)行了分析,詳細(xì)描述了IO結(jié)構(gòu),并對(duì)填充實(shí)例進(jìn)行了詳細(xì)分析。

        關(guān)鍵詞:嵌入式;系統(tǒng)開(kāi)發(fā);驅(qū)動(dòng)

        Linux由于具有內(nèi)核強(qiáng)大且穩(wěn)定,易于擴(kuò)展和裁減,效率高,豐富的硬件支持等許多優(yōu)點(diǎn),在嵌人式系統(tǒng)中得到了廣泛的應(yīng)用。本文基于嵌人式操作系統(tǒng)下設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)需要,闡述相關(guān)技術(shù)原理及設(shè)計(jì)要點(diǎn),探求嵌人式Linux系統(tǒng)中設(shè)備驅(qū)動(dòng)程序的構(gòu)建方法。

        1 嵌入式Linux系統(tǒng)驅(qū)動(dòng)

        嵌入式Linux系統(tǒng)中的設(shè)備驅(qū)動(dòng)程序和Linux中的大多數(shù)驅(qū)動(dòng)程序一樣,也是采用層次型的體系結(jié)構(gòu)。編寫(xiě)設(shè)備驅(qū)動(dòng)程序,其主要工作就是編寫(xiě)子函數(shù),并填充file_operations的各個(gè)域。Linux的設(shè)備驅(qū)動(dòng)程序模塊按照方式編譯可以分為兩類(lèi)。

        一類(lèi)是靜態(tài)鏈接的設(shè)備驅(qū)動(dòng)程序模塊,這類(lèi)模塊在編制完成后要與內(nèi)核一起編譯,其與內(nèi)核是不可分割的整體,在系統(tǒng)引導(dǎo)時(shí)與內(nèi)核一起加載并駐留內(nèi)存。

        另一類(lèi)設(shè)備驅(qū)動(dòng)程序采用可動(dòng)態(tài)加載的模塊。其驅(qū)動(dòng)程序代碼在使用之前動(dòng)態(tài)地加載到內(nèi)存中,在設(shè)備使用完畢后即從內(nèi)存中移去其代碼。

        嵌入式Linux系統(tǒng)往往應(yīng)用環(huán)境相對(duì)固定,系統(tǒng)都經(jīng)過(guò)優(yōu)化,盡可能地精簡(jiǎn)。嵌入式Linux系統(tǒng)不能夠像桌面Linux那樣靈活地使用insmod/rmmod加載卸載設(shè)備驅(qū)動(dòng)程序。從嵌入式系統(tǒng)的整體性能考慮,采用靜態(tài)鏈接模塊能夠使得整個(gè)系統(tǒng)的性能得到提高。許多廣泛應(yīng)用的嵌入式Linux系統(tǒng)都采用靜態(tài)鏈接的設(shè)備驅(qū)動(dòng)程序模塊。

        2 驅(qū)動(dòng)程序原理

        編寫(xiě)設(shè)備驅(qū)動(dòng)程序的原理即基于I/O設(shè)備管理采用的分層模型,l/O設(shè)備管理軟件位于內(nèi)核中的最底層,設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接El,設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié)。硬件設(shè)備只是一個(gè)設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。

        ⑴工作原理。作為內(nèi)核的一部分,設(shè)備驅(qū)動(dòng)程序完成對(duì)設(shè)備初始化和釋放、把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)、讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù)和檢測(cè)處理設(shè)備出現(xiàn)的錯(cuò)誤的功能。Linux設(shè)備主要分兩類(lèi):字符設(shè)備和塊設(shè)備,其主要區(qū)別是:在對(duì)字符設(shè)備發(fā)出讀/寫(xiě)請(qǐng)求時(shí),實(shí)際的硬件1/O一般就緊接著發(fā)生了,塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存作為高速緩存,當(dāng)用戶(hù)進(jìn)程對(duì)設(shè)備請(qǐng)求能滿足用戶(hù)的要求,就返回請(qǐng)求的數(shù)據(jù),如果不能,就調(diào)用請(qǐng)求函數(shù)來(lái)進(jìn)行實(shí)際的l/O操作。

        ⑵I/O接口。邏輯l/O層通過(guò)內(nèi)核定義的兩個(gè)數(shù)據(jù)結(jié)構(gòu)塊設(shè)備轉(zhuǎn)換表(blkdevs)和字符設(shè)備轉(zhuǎn)換表(chrdevs)來(lái)實(shí)現(xiàn)與設(shè)備驅(qū)動(dòng)程序的接口。每個(gè)設(shè)備驅(qū)動(dòng)程序在設(shè)備轉(zhuǎn)換表中占據(jù)一個(gè)表項(xiàng)。每個(gè)Linux設(shè)備文件都有兩個(gè)設(shè)備號(hào),第一個(gè)是主設(shè)備號(hào),標(biāo)識(shí)驅(qū)動(dòng)程序,第二個(gè)是從設(shè)備號(hào),標(biāo)識(shí)使用同一個(gè)設(shè)備驅(qū)動(dòng)程序的不同的硬件設(shè)備。用戶(hù)進(jìn)程利用系統(tǒng)調(diào)用在對(duì)設(shè)備文件進(jìn)行read/write等各種操作時(shí),系統(tǒng)調(diào)用通過(guò)設(shè)備文件的主設(shè)備號(hào)找到相應(yīng)的設(shè)備驅(qū)動(dòng)程序,然后讀取數(shù)據(jù)結(jié)構(gòu)相應(yīng)的函數(shù)指針,接著把控制權(quán)交給函數(shù)。

        3 實(shí)例分析

        編寫(xiě)設(shè)備驅(qū)動(dòng)程序的主要工作就是編寫(xiě)子函數(shù),并填充file_operations的各個(gè)域,以下為驅(qū)動(dòng)程序test.c的主要內(nèi)容。函數(shù)read_test()是為read調(diào)用準(zhǔn)備的。當(dāng)調(diào)用read時(shí),read_test()被調(diào)用,它把用戶(hù)的緩沖區(qū)全部寫(xiě)1。函數(shù)中的bur是read調(diào)用的一個(gè)參數(shù),是用戶(hù)進(jìn)程空間的一個(gè)地址。但是在read_test()被調(diào)用時(shí),系統(tǒng)進(jìn)入核心態(tài),所以不能使用bur這個(gè)地址,必須用put_user(),這是kernel提供的一個(gè)函數(shù),用于向用戶(hù)傳送數(shù)據(jù)。

        unsigned int test_major = 0;

        static int read_test(struct inode* node, struct file *file, char *bur, int count)

        { int left;

        if(verify_area(VERIFY_WRITE, bur, count) = = -EFAULT )

        return –EFAULT;

        for(1eft = count; left > 0; left--)

        { __put_user(1, bur, 1);

        bur ;}

        return count;}

        以下是驅(qū)動(dòng)程序下半部分的其他幾個(gè)函數(shù)。

        static int write_tibet(struct inode inode, struct file *file, const char *bur, int count)

        {return count;}

        static int open_tibet(struct inode *inode, struct file *file)

        {MOD-INC-USE-COUNT;

        return 0;}

        static void release_tibet(struct inode *inode, struct file *file)

        {MOD-DEC-USE-COUNT;}

        4 總結(jié)

        論文對(duì)linux的驅(qū)動(dòng)開(kāi)發(fā)進(jìn)行了分析,指出了其開(kāi)發(fā)原理以及加載方式的分類(lèi),并且以實(shí)例進(jìn)行了說(shuō)明。

        [參考文獻(xiàn)]

        [1]周明德.UNIX/Linux內(nèi)核[M].北京:清華大學(xué)出版社,2004.

        [2]倪繼利.Linux內(nèi)核分析及編程[M].北京:電子工業(yè)出版社,2005.1.

        猜你喜歡
        系統(tǒng)開(kāi)發(fā)嵌入式驅(qū)動(dòng)
        基于模糊PI控制的驅(qū)動(dòng)防滑仿真系統(tǒng)分析
        屈宏斌:未來(lái)五年,雙輪驅(qū)動(dòng),砥礪前行
        軌旁ATC系統(tǒng)門(mén)控柜接收/驅(qū)動(dòng)板改造
        搭建基于Qt的嵌入式開(kāi)發(fā)平臺(tái)
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
        基于網(wǎng)絡(luò)數(shù)據(jù)分析的計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)開(kāi)發(fā)
        變電站監(jiān)控信息接入驗(yàn)收系統(tǒng)的研發(fā)與應(yīng)用
        發(fā)射機(jī)房運(yùn)行監(jiān)控系統(tǒng)關(guān)鍵技術(shù)的解決方案
        基于開(kāi)源系統(tǒng)的綜合業(yè)務(wù)數(shù)據(jù)采集系統(tǒng)的開(kāi)發(fā)研究
        基于S3C6410的Wi-Fi驅(qū)動(dòng)移植實(shí)現(xiàn)
        欧美成人中文字幕| 欧美人与动性xxxxx杂性| 日本入室强伦姧bd在线观看| 无套内谢孕妇毛片免费看看| 啊v在线视频| 精品人妻av中文字幕乱| 丁香五月亚洲综合在线| 国产丝袜无码一区二区三区视频| 亚洲AV无码精品色欲av | 国产三级视频在线观看国产| 人妖一区二区三区四区| 亚洲性爱视频| 国产成人av综合亚洲色欲| 亚洲第一女人天堂av| 91中文人妻熟女乱又乱| 一本色综合久久| 国产高清精品自在线看| 在线久草视频免费播放| 精品久久久久久无码专区| 夫妇交换刺激做爰视频| 阿v视频在线| 中文字幕在线乱码日本| 免费女人高潮流视频在线观看| 在线观看国产精品日韩av| 精品国产迪丽热巴在线| 亚洲国产精品区在线观看| 在线观看精品视频网站| 亚洲熟妇一区无码| 日本高清色一区二区三区| 男人吃奶摸下挵进去啪啪软件| 人妻少妇精品视频一区二区三区 | 久久久久久免费播放一级毛片| 国产精品一区二区三区av在线| 久久久久久亚洲av成人无码国产| 婷婷成人亚洲| 日本一区二区三区在线视频观看| 人人妻人人澡人人爽精品日本| 中文字幕精品久久久久人妻| 99久久精品一区二区三区蜜臀| 免费人成黄页网站在线一区二区| 国产午夜福利久久精品|