久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > Linux字符設備驅動模型之(zhi)框架解(jie)說

Linux字符(fu)設備驅動模型之框架解(jie)說 時間:2018-09-27      來源:未知

一、軟件操作硬件設備模型

在進行嵌入(ru)式開發的(de)(de)過(guo)程中,在常做的(de)(de)事(shi)情就是(shi)驅動(dong)配置硬件(jian)(jian)設(she)(she)備(bei),然(ran)后根據(ju)功(gong)能需求使用硬件(jian)(jian)設(she)(she)備(bei),實現功(gong)能的(de)(de)邏輯。如(ru)下圖為其相互之間(jian)的(de)(de)關系(xi)。

如上圖所示:

驅(qu)動程(cheng)序:主要(yao)作為(wei)操作和配(pei)(pei)置(zhi)硬(ying)件(jian)設備,使得硬(ying)件(jian)設備能(neng)夠(gou)正常進(jin)行工作。例如,在(zai)寫點燈程(cheng)序時,前(qian)提條(tiao)件(jian)是(shi)從原理圖了(le)(le)解(jie)到LED等(deng)與(yu)CPU/MCU之(zhi)間的(de)硬(ying)件(jian)連接(jie)(使用了(le)(le)哪一個(ge)GPIO口),驅(qu)動程(cheng)序的(de)作用就(jiu)(jiu)是(shi)初(chu)始化(hua)配(pei)(pei)置(zhi)GPIO口,使得GPIO口能(neng)夠(gou)進(jin)行工作,比如現在(zai)配(pei)(pei)置(zhi)為(wei)推(tui)完輸出模式。GPIO能(neng)夠(gou)正常工作之(zhi)后,那么就(jiu)(jiu)需要(yao)進(jin)行基(ji)本的(de)操作了(le)(le),即(ji)燈亮和等(deng)滅。這就(jiu)(jiu)是(shi)驅(qu)動程(cheng)序。

應用(yong)程(cheng)序(xu):當(dang)驅動(dong)程(cheng)序(xu)能夠時間基本的燈亮(liang)和燈滅(mie),那么(me)是需要(yao)實現跑馬燈,還是各(ge)種花樣的燈的顯示,這就由(you)應用(yong)程(cheng)序(xu)來決定了。

硬件設備能(neng)夠接受(shou)CPU/MCU通過驅(qu)動程序(xu)進行(xing)的(de)(de)操作,或者是能(neng)夠為CPU/MCU提供有效的(de)(de)數據。

二、Linux系(xi)統軟件操作硬件模型(xing)

對于Linux操(cao)作(zuo)系(xi)統(tong)而言,因(yin)其系(xi)統(tong)的(de)強大和所支持(chi)功能的(de)完善,可支持(chi)各種設(she)(she)(she)備在(zai)Linux操(cao)作(zuo)系(xi)統(tong)下運行。所以設(she)(she)(she)備的(de)類型(xing)(xing)(xing)可謂(wei)繁(fan)多,如:字符設(she)(she)(she)備,塊設(she)(she)(she)備,網(wang)絡(luo)接口設(she)(she)(she)備,USB設(she)(she)(she)備,PCI設(she)(she)(she)備,平(ping)臺設(she)(she)(she)備,混雜設(she)(she)(she)備……等等,而設(she)(she)(she)備類型(xing)(xing)(xing)不(bu)同,也意味著其對應的(de)驅動程序模(mo)型(xing)(xing)(xing)不(bu)同。即每一種類型(xing)(xing)(xing)的(de)設(she)(she)(she)備,都有其相應的(de)驅動模(mo)型(xing)(xing)(xing)。

 但(dan)總體而(er)言,既(ji)然都是運行(xing)在Linux操(cao)作系統(tong)下的(de)設備,所以其應當存在相應的(de)驅動架構來進行(xing)驅動設備。如下圖:

如上圖,對(dui)于Linux操(cao)作系統而(er)言,用(yong)(yong)戶空(kong)間的(de)(de)應(ying)用(yong)(yong)程(cheng)(cheng)序(xu)和內(nei)核(he)空(kong)間的(de)(de)驅(qu)動程(cheng)(cheng)序(xu),有著千絲(si)萬縷(lv)的(de)(de)關系,但卻(que)又相互(hu)獨立(li)。他們通過文件的(de)(de)方式(shi)進(jin)(jin)行(xing)(xing)相互(hu)之間的(de)(de)通信。而(er)驅(qu)動程(cheng)(cheng)序(xu)則是依賴于Linux內(nei)核(he)的(de)(de)驅(qu)動架構進(jin)(jin)行(xing)(xing)編寫的(de)(de)程(cheng)(cheng)序(xu),為用(yong)(yong)戶空(kong)間的(de)(de)應(ying)用(yong)(yong)程(cheng)(cheng)序(xu)提供相應(ying)的(de)(de)接口通道。而(er)設備(bei)操(cao)作程(cheng)(cheng)序(xu)則是在Linux內(nei)核(he)驅(qu)動架構下(xia)進(jin)(jin)行(xing)(xing)與設備(bei)直接交互(hu)的(de)(de)程(cheng)(cheng)序(xu)代碼,比如配置初始化(hua)CPU私有外設,初始化(hua)硬件設備(bei),對(dui)硬件設備(bei)進(jin)(jin)行(xing)(xing)基(ji)本操(cao)作等(deng)等(deng),總之目(mu)的(de)(de)是讓硬件設備(bei)能夠正常的(de)(de)工作。

那么(me)在Linux系(xi)統中編寫內核驅動(dong)(dong),其驅動(dong)(dong)模(mo)型(xing)是怎樣的(de)呢??

如上圖:

初始化(hua)內核驅動:依賴于Linux內核的(de)驅動模(mo)型,建立所需要操作的(de)設備驅動并進行(xing)相應的(de)操作。如(ru)下圖(tu):

實現(xian)設(she)(she)(she)備(bei)操作:根(gen)據(ju)硬件(jian)設(she)(she)(she)備(bei)的(de)型(xing)號、功能(neng)特(te)性等(deng),實現(xian)驅動硬件(jian)設(she)(she)(she)備(bei)正常工作,能(neng)夠進行基本的(de)操作,比如讀取設(she)(she)(she)備(bei)數據(ju)或者向設(she)(she)(she)備(bei)寫數據(ju)等(deng)。

注銷設(she)備(bei)驅動:在(zai)Linux系(xi)統中,會(hui)存在(zai)設(she)備(bei)熱拔(ba)插或者用戶不(bu)(bu)想使(shi)用相(xiang)(xiang)應設(she)備(bei)的(de)應用場景,那(nei)么可以將相(xiang)(xiang)應的(de)設(she)備(bei)驅動在(zai)內(nei)核空間注銷,將不(bu)(bu)能使(shi)用相(xiang)(xiang)應的(de)設(she)備(bei)驅動。

三、Linux字符設備驅動模型

 對(dui)于Linux內核驅(qu)動(dong)而言,任何一種設備(bei)驅(qu)動(dong)模(mo)型都會(hui)用Linux內核中的一種結構來進行描述。

對于(yu)字符(fu)設備確(que)定而言,在Linux內(nei)核中使(shi)用struct cdev結構(gou)來描述。其(qi)結構(gou)原型如下:

對于(yu)Linux內(nei)核給出的描述設備的結構(gou)(gou)(gou),其結構(gou)(gou)(gou)成員(yuan)(yuan)(yuan)(yuan)并不(bu)是都是由(you)程序(xu)員(yuan)(yuan)(yuan)(yuan)使(shi)用(yong)的,有(you)些結構(gou)(gou)(gou)成員(yuan)(yuan)(yuan)(yuan)由(you)內(nei)核內(nei)部使(shi)用(yong),有(you)些結構(gou)(gou)(gou)成員(yuan)(yuan)(yuan)(yuan)有(you)程序(xu)員(yuan)(yuan)(yuan)(yuan)使(shi)用(yong)。比如以上struct cdev結構(gou)(gou)(gou)中,由(you)程序(xu)員(yuan)(yuan)(yuan)(yuan)使(shi)用(yong)的成員(yuan)(yuan)(yuan)(yuan)為unsigned int count; 、dev_t dev;和const struct file_operations *ops;。

【unsigned int count;】:其表示(shi)設(she)(she)備(bei)的數(shu)目/數(shu)量,在(zai)同一(yi)(yi)個(ge)(ge)(ge)系統中,可能存在(zai)多個(ge)(ge)(ge)相同的設(she)(she)備(bei),那么(me)不需(xu)要每一(yi)(yi)個(ge)(ge)(ge)設(she)(she)備(bei)就為其提供一(yi)(yi)個(ge)(ge)(ge)驅(qu)動,而是(shi)統一(yi)(yi)提供同一(yi)(yi)個(ge)(ge)(ge)驅(qu)動,只需(xu)要在(zai)驅(qu)動中識別出(chu)是(shi)操作(zuo)哪一(yi)(yi)個(ge)(ge)(ge)設(she)(she)備(bei)即可。Count結構成員的作(zuo)用就是(shi)記(ji)錄這一(yi)(yi)個(ge)(ge)(ge)驅(qu)動中存在(zai)多少個(ge)(ge)(ge)設(she)(she)備(bei)。

【dev_t dev;】:表示(shi)這(zhe)個設(she)備(bei)(bei)的設(she)備(bei)(bei)號(hao),在Linux操作系統中,通(tong)過(guo)設(she)備(bei)(bei)號(hao)的方式來進行區分不同是設(she)備(bei)(bei)。

【const struct file_operations *ops;】:設備驅動操(cao)(cao)作(zuo)的(de)函數集/方法集。這個(ge)方法集為上層(ceng)應用程序(xu)提(ti)供相應的(de)接口通道。實(shi)(shi)現用戶(hu)空(kong)間的(de)操(cao)(cao)作(zuo)函數與內核空(kong)間的(de)操(cao)(cao)作(zuo)實(shi)(shi)現一一映射關系。

四、Linux操作系統中硬件(jian)的(de)操作方式

有(you)句(ju)話叫(jiao)做“對于Linux而言(yan),一切皆文(wen)件(jian)”,所(suo)以對于在用戶空間(jian)的(de)應用程序(xu)而言(yan),在面向硬件(jian)設備的(de)操(cao)作時,也(ye)是(shi)通過文(wen)件(jian)的(de)方式進行操(cao)作。操(cao)作相應的(de)設備文(wen)件(jian)節(jie)(jie)點,就等同(tong)于操(cao)作了其(qi)設備文(wen)件(jian)節(jie)(jie)點對應的(de)硬件(jian)設備。

硬件(jian)設備(bei)相關(guan)的(de)設備(bei)文件(jian)節(jie)點存(cun)放于(yu)/dev目錄下。如下圖(tu):

如上(shang)圖所示,/dev目錄下的(de)文件(jian)節點均為對(dui)應(ying)(ying)的(de)硬件(jian)設備(bei)的(de)設備(bei)文件(jian)。例(li)如:ttyS0設備(bei)文件(jian)為PC臺(tai)式機(ji)默認的(de)9針串口設備(bei)節點。所以對(dui)相應(ying)(ying)設備(bei)文件(jian)節點的(de)讀寫操作(zuo)即(ji)是(shi)對(dui)其(qi)所對(dui)應(ying)(ying)的(de)硬件(jian)進行讀寫操作(zuo)。

上一篇:Android系統開發中Android.mk的多種寫法

下一篇:Linux字符設備驅動模型之設備號

熱(re)點文章推薦
華(hua)清學員就業榜單
高(gao)薪(xin)學員經驗分享
熱點新(xin)聞推(tui)薦
前(qian)臺專線:010-82525158 企業(ye)培訓(xun)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部