當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]一、驅(qū)動(dòng)的作用任何一個(gè)計(jì)算機(jī)系統(tǒng)的運(yùn)行都是系統(tǒng)中軟硬件協(xié)作的結(jié)果,沒(méi)有硬件的軟件是空中樓閣,而沒(méi)有軟件的硬件則只是一堆廢鐵。硬件是底層基礎(chǔ),是所有軟件得以運(yùn)行的

一、驅(qū)動(dòng)的作用

任何一個(gè)計(jì)算機(jī)系統(tǒng)的運(yùn)行都是系統(tǒng)中軟硬件協(xié)作的結(jié)果,沒(méi)有硬件的軟件是空中樓閣,而沒(méi)有軟件的硬件則只是一堆廢鐵。硬件是底層基礎(chǔ),是所有軟件得以運(yùn)行的平臺(tái),代碼最終會(huì)落實(shí)為硬件上的組合邏輯與時(shí)序邏輯;軟件則實(shí)現(xiàn)了具體應(yīng)用,它按照各種不同的業(yè)務(wù)需求而設(shè)計(jì),滿足了用戶的需求。硬件較固定,軟件則很靈活,可以適應(yīng)各種復(fù)雜多變的應(yīng)用??梢哉f(shuō),計(jì)算機(jī)系統(tǒng)的軟硬件互相成就了對(duì)方。

但是,軟硬件之間同樣存在著悖論,那就是軟件和硬件不應(yīng)該互相滲透到對(duì)方的領(lǐng)地。為了盡可能快速地完成設(shè)計(jì),應(yīng)用軟件工程師不想也不必關(guān)心硬件,而硬件工程師也難有足夠的閑暇和能力來(lái)顧及軟件。例如,應(yīng)用軟件工程師在調(diào)用套接字發(fā)送和接收數(shù)據(jù)包的時(shí)候,他不必關(guān)心網(wǎng)卡上的中斷、寄存器、存儲(chǔ)空間、I/O端口、片選以及其他任何硬件詞匯;在使用printf()函數(shù)輸出信息的時(shí)候,他不用知道底層究竟是怎樣把相應(yīng)的信息輸出到屏幕或串口。

也就是說(shuō),應(yīng)用軟件工程師需要看到一個(gè)沒(méi)有硬件的純粹的軟件世界,硬件必須被透明地呈現(xiàn)給他們。誰(shuí)來(lái)實(shí)現(xiàn)硬件對(duì)應(yīng)用軟件工程師的隱形?這個(gè)艱巨的任務(wù)就落在了驅(qū)動(dòng)工程師的頭上。

對(duì)設(shè)備驅(qū)動(dòng)最通俗的解釋就是“驅(qū)使硬件設(shè)備行動(dòng)” 。設(shè)備驅(qū)動(dòng)與底層硬件直接打交道,按照硬件設(shè)備的具體工作方式讀寫設(shè)備寄存器,完成設(shè)備的輪詢、中斷處理、DMA通信,進(jìn)行物理內(nèi)存向虛擬內(nèi)存的映射,最終使通信設(shè)備能夠收發(fā)數(shù)據(jù),使顯示設(shè)備能夠顯示文字和畫面,使存儲(chǔ)設(shè)備能夠記錄文件和數(shù)據(jù)。

由此可見,設(shè)備驅(qū)動(dòng)充當(dāng)了硬件和應(yīng)用軟件之間的紐帶,它使得應(yīng)用軟件只需要調(diào)用系統(tǒng)軟件的應(yīng)用編程接口(API)就可讓硬件去完成要求的工作。在系統(tǒng)中沒(méi)有操作系統(tǒng)的情況下,工程師可以根據(jù)硬件設(shè)備的特點(diǎn)自行定義接口,如對(duì)串口定義SerialSend()、SerialRecv();對(duì) LED 定義LightOn()、LightOff();以及對(duì) Flash 定義FlashWrite()、FlashRead()等。而在有操作系統(tǒng)的情況下,設(shè)備驅(qū)動(dòng)的架構(gòu)則由相應(yīng)的操作系統(tǒng)定義,驅(qū)動(dòng)工程師必須按照相應(yīng)的架構(gòu)設(shè)計(jì)設(shè)備驅(qū)動(dòng),這樣,設(shè)備驅(qū)動(dòng)才能良好地整合到操作系統(tǒng)的內(nèi)核中。

驅(qū)動(dòng)程序溝通著硬件和應(yīng)用軟件,而驅(qū)動(dòng)工程師則溝通著硬件工程師和應(yīng)用軟件工程師。隨著通信、電子行業(yè)的迅速發(fā)展,全世界每天都會(huì)有大量的新芯片被生產(chǎn),大量的新電路板被設(shè)計(jì),因此,也會(huì)有大量設(shè)備驅(qū)動(dòng)需要開發(fā)。這些設(shè)備驅(qū)動(dòng),或運(yùn)行在簡(jiǎn)單的單任務(wù)環(huán)境中,或運(yùn)行在 VxWorks、Linux、Windows等多任務(wù)操作系統(tǒng)環(huán)境中,發(fā)揮著不可替代的作用。

二、有無(wú)操作系統(tǒng)的區(qū)別

1)無(wú)操作系統(tǒng)(即裸機(jī))時(shí)的設(shè)備驅(qū)動(dòng)

并不是任何一個(gè)計(jì)算機(jī)系統(tǒng)都一定要運(yùn)行操作系統(tǒng),在許多情況下操作系統(tǒng)是不要的。對(duì)于功能比較單一、控制并不復(fù)雜的系統(tǒng),如公交車刷卡機(jī)、電冰箱、微波、簡(jiǎn)單的手機(jī)和小靈通等,并不需要多任務(wù)調(diào)度、文件系統(tǒng)、內(nèi)存管理等復(fù)雜功能,單任務(wù)架構(gòu)完全可以很好地支持它們的工作。一個(gè)無(wú)限循環(huán)中夾雜對(duì)設(shè)備中斷的檢測(cè)或者對(duì)設(shè)備的輪詢是這種系統(tǒng)中軟件的典型架構(gòu)。裸機(jī)的實(shí)現(xiàn)就有點(diǎn)類似單片機(jī)(MCU)了,盡管單片機(jī)的寄存器沒(méi)有那么的多,如果會(huì)裸機(jī)驅(qū)動(dòng),我想,應(yīng)該能勝任單片機(jī)的工作了,呵呵。

在這樣的系統(tǒng)中,雖然不存在操作系統(tǒng),但是設(shè)備驅(qū)動(dòng)是必須存在的。一般情況下,對(duì)每一種設(shè)備驅(qū)動(dòng)都會(huì)定義為一個(gè)軟件模塊,包含.h文件和.c文件,前者定義該設(shè)備驅(qū)動(dòng)的數(shù)據(jù)結(jié)構(gòu)并聲明外部函數(shù),后者進(jìn)行設(shè)備驅(qū)動(dòng)的具體實(shí)現(xiàn)。書中例舉了一個(gè)串口驅(qū)動(dòng)serial.c serial.h,主要是配置GPIO,串口控制寄存器,以及串口的收發(fā)(讀寫)寄存器,而這幾個(gè)配置都是自定義函數(shù)實(shí)現(xiàn)的,比如串口的寫(發(fā))SerialSend 函數(shù)等。

其他模塊需要使用這個(gè)設(shè)備的時(shí)候,只需要包含設(shè)備驅(qū)動(dòng)的頭文件 serial.h,然后調(diào)用其中的外部接口函數(shù)即可。如我們要從串口上發(fā)送字符串“Hello World”,使用函數(shù)SerialSend( " Hello World ",11)即可。

由此可見,在沒(méi)有操作系統(tǒng)的情況下,設(shè)備驅(qū)動(dòng)的接口被直接提交給了應(yīng)用軟件工程師, 應(yīng)用軟件沒(méi)有跨越任何層次就直接訪問(wèn)了設(shè)備驅(qū)動(dòng)的接口。 設(shè)備驅(qū)動(dòng)包含的接口函數(shù)也與硬件的功能直接吻合, 沒(méi)有任何附加功能。

有的工程師把單任務(wù)系統(tǒng)設(shè)計(jì)成設(shè)備驅(qū)動(dòng)和具體的應(yīng)用軟件模塊處于同一層次(即應(yīng)用程序也在比如serial.c中實(shí)現(xiàn)),這顯然是不合理的,不符合軟件設(shè)計(jì)中高內(nèi)聚低耦合的要求。

另一種不合理的設(shè)計(jì)是直接在應(yīng)用中操作硬件的寄存器(單獨(dú)一個(gè)main.c,所有功能都在一個(gè)函數(shù)中實(shí)現(xiàn),不采用其他任何接口/函數(shù)),而不單獨(dú)設(shè)計(jì)驅(qū)動(dòng)模塊,這種設(shè)計(jì)意味著系統(tǒng)中不存在或未能充分利用可被重用的驅(qū)動(dòng)代碼。

2)有操作系統(tǒng)時(shí)的設(shè)備驅(qū)動(dòng)

無(wú)操作系統(tǒng)時(shí)的設(shè)備驅(qū)動(dòng)中的設(shè)備驅(qū)動(dòng)直接運(yùn)行在硬件之上,不與任何操作系統(tǒng)關(guān)聯(lián)。當(dāng)系統(tǒng)中包含操作系統(tǒng)后,設(shè)備驅(qū)動(dòng)會(huì)變得怎樣?

首先,無(wú)操作系統(tǒng)時(shí)設(shè)備驅(qū)動(dòng)的硬件操作工作仍然是必不可少的, 沒(méi)有這一部分,設(shè)備驅(qū)動(dòng)不可能與硬件打交道。

其次,我們還需要將設(shè)備驅(qū)動(dòng)融入內(nèi)核。為了實(shí)現(xiàn)這種融合,必須在所有的設(shè)備驅(qū)動(dòng)中設(shè)計(jì)面向操作系統(tǒng)內(nèi)核的接口,這樣的接口由操作系統(tǒng)規(guī)定,對(duì)一類設(shè)備而言結(jié)構(gòu)一致,獨(dú)立于具體的設(shè)備。

由此可見,當(dāng)系統(tǒng)中存在操作系統(tǒng)的時(shí)候,設(shè)備驅(qū)動(dòng)變成了連接硬件和內(nèi)核的橋梁。操作系統(tǒng)的存在勢(shì)必要求設(shè)備驅(qū)動(dòng)附加更多的代碼和功能(以我看,主要是提供了很多結(jié)構(gòu)),把單一的“驅(qū)使硬件設(shè)備行動(dòng)”變成了操作系統(tǒng)內(nèi)與硬件交互的模塊,它對(duì)外呈現(xiàn)為操作系統(tǒng)的API,不再給應(yīng)用軟件工程師直接提供接口。有了操作系統(tǒng)之后,設(shè)備驅(qū)動(dòng)反而變得復(fù)雜,那要操作系統(tǒng)干什么?

首先,一個(gè)復(fù)雜的軟件系統(tǒng)需要處理多個(gè)并發(fā)的任務(wù),沒(méi)有操作系統(tǒng),想完成多任務(wù)并發(fā)是很困難的。

其次,操作系統(tǒng)給我們提供內(nèi)存管理機(jī)制。一個(gè)典型的例子是,對(duì)于多數(shù)含 MMU的處理器而言,Windows、Linux 等操作系統(tǒng)可以讓每個(gè)進(jìn)程都獨(dú)立地訪問(wèn) 4GB的內(nèi)存空間。

上述優(yōu)點(diǎn)似乎并沒(méi)有體現(xiàn)在設(shè)備驅(qū)動(dòng)身上,操作系統(tǒng)的存在給設(shè)備驅(qū)動(dòng)究竟帶來(lái)了什么好處呢?

簡(jiǎn)而言之,操作系統(tǒng)通過(guò)給設(shè)備驅(qū)動(dòng)制造麻煩來(lái)達(dá)到給上層應(yīng)用提供便利的目的。如果設(shè)備驅(qū)動(dòng)都按照操作系統(tǒng)給出的獨(dú)立于設(shè)備的接口而設(shè)計(jì),應(yīng)用程序?qū)⒖墒褂媒y(tǒng)一的系統(tǒng)調(diào)用接口來(lái)訪問(wèn)各種設(shè)備。對(duì)于類UNIX的VxWorks、Linux等操作系統(tǒng)而言,應(yīng)用程序通過(guò)write()、read()等函數(shù)讀寫文件就可以訪問(wèn)各種字符設(shè)備和塊設(shè)備,而不用管設(shè)備的具體類型和工作方式,是非常方便的。[!--empirenews.page--]

不管有無(wú)操作系統(tǒng),不管是SerialSend,或者write,訪問(wèn)設(shè)備都需要對(duì)寄存器進(jìn)行讀寫操作,比如串口,在dev目錄下有個(gè)ttys0結(jié)點(diǎn),我們可以通過(guò)ioctl函數(shù)對(duì)其進(jìn)行讀寫操作,當(dāng)然,write、read更為直接咯。而上層的應(yīng)用可以對(duì)這些函數(shù)進(jìn)行封裝,定義不同的接口,從而實(shí)現(xiàn)更多的功能。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉