<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Linux系統下程序、內核與硬件的關(guān)系

Linux系統下程序、內核與硬件的關(guān)系

作者: 時(shí)間:2017-12-27 來(lái)源:網(wǎng)絡(luò ) 收藏

  目前,軟件工程師大致可分為兩個(gè)層次:

本文引用地址:http://dyxdggzs.com/article/201712/373669.htm

  01

  應用軟件工程師(Application Software Engineer):

  主要利用C庫函數和 API進(jìn)行應用軟件的編寫(xiě);

  從事這方面的開(kāi)發(fā)工作,主要需要學(xué)習:符合linux posix標準的API函數及系統調用,linux的多任務(wù)編程技巧:多進(jìn)程、多線(xiàn)程、進(jìn)程間通信、多任務(wù)之間的同步互斥等,嵌入式數據庫的學(xué)習,UI編程:QT、miniGUI等。

  02

  Linux固件工程師(Firmware Engineer):

  主要進(jìn)行Bootloader、Linux的移植及Linux設備驅動(dòng)程序的設計工作。

  一般而言,固件工程師的要求要高于應用軟件工程師的層次,而其中的Linux設備驅動(dòng)編程又是Linux程序設計中比較復雜的部分,究其原因,主要包括如下幾個(gè)方面:

  1 ) 設備驅動(dòng)屬于Linux的部分,編寫(xiě)Linux設備驅動(dòng)需要有一定的Linux操作系統基礎;需要了解部分linux的工作機制與系統組成

  2)編寫(xiě)Linux設備驅動(dòng)需要對硬件的原理有相當的了解,大多數情況下我們是針對一個(gè)特定的嵌入式硬件平臺編寫(xiě)驅動(dòng)的,例如:針對特定的主機平臺:可能是三星的2410、2440,也可能是atmel的,或者飛思卡爾的等等

  3 ) Linux設備驅動(dòng)中廣泛涉及到多進(jìn)程并發(fā)的同步、互斥等控制,容易出現bug;因為linux本身是一個(gè)多任務(wù)的工作環(huán)境,不可避免的會(huì )出現在同一時(shí)刻對同一設備發(fā)生并發(fā)操作

  4 ) 由于屬于內核的一部分,Linux設備驅動(dòng)的調試也相當復雜。linux設備驅動(dòng)沒(méi)有一個(gè)很好的IDE環(huán)境進(jìn)行單步、變量查看等調試輔助工具;linux驅動(dòng)跟linux內核工作在同一層次,一旦發(fā)生問(wèn)題,很容易造成內核的整體崩潰。

  在任何一個(gè)計算機系統中,大至服務(wù)器、PC機、小至手機、mp3/mp4播放器,無(wú)論是復雜的大型服務(wù)器系統還是一個(gè)簡(jiǎn)單的流水燈單片機系統,都離不開(kāi)驅動(dòng)程序的身影,沒(méi)有硬件的軟件是空中樓閣,沒(méi)有軟件的硬件只是一堆廢鐵,硬件是底層的基礎,是所有軟件得以運行的平臺,代碼最終會(huì )落實(shí)到硬件上的邏輯組合。

  但是硬件與軟件之間存在一個(gè)駁論:為了快速、優(yōu)質(zhì)的完成軟件功能設計,應用程序工程師不想也不愿關(guān)心硬件,而硬件工程師也很難有功夫去處理軟件開(kāi)發(fā)中的一些應用。例如軟件工程師在調用printf的時(shí)候,不許也不用關(guān)心信息到底是通過(guò)什么樣的處理,走過(guò)哪些通路顯示在該顯示的地方,硬件工程師在寫(xiě)完了一個(gè)4*4鍵盤(pán)驅動(dòng)后,無(wú)需也不必管應用程序在獲得鍵值后做哪些處理及操作。

  也就是說(shuō)軟件工程師需要看到一個(gè)沒(méi)有硬件的純軟件世界,硬件必須透明的提供給他,誰(shuí)來(lái)實(shí)現這一任務(wù)?答案是驅動(dòng)程序,驅動(dòng)程序從字面解釋就是:“驅使硬件設備行動(dòng)”。驅動(dòng)程序直接與硬件打交道,按照硬件設備的具體形式,驅動(dòng)設備的寄存器,完成設備的輪詢(xún)、中斷處理、DMA通信,最終讓通信設備可以收發(fā)數據,讓顯示設備能夠顯示文字和畫(huà)面,讓音頻設備可以完成聲音的存儲和播放。

  可見(jiàn),設備驅動(dòng)程序充當了硬件和軟件之間的樞紐,因此驅動(dòng)程序的表現形式可能就是一些標準的、事先協(xié)定好的API函數,驅動(dòng)工程師只需要去完成相應函數的填充,應用工程師只需要調用相應的接口完成相應的功能。無(wú)論有沒(méi)有操作系統,驅動(dòng)程序都有其存在價(jià)值,只是在裸機情況下,工作環(huán)境比較簡(jiǎn)單、完成的工作較單一,驅動(dòng)程序完成的功能也就比較簡(jiǎn)單,同時(shí)接口只要在小范圍內符合統一的標準即可。但是在有操作系統的情況下,此問(wèn)題就會(huì )被放大:硬件來(lái)自不同的公司、千變萬(wàn)化,全世界每天都會(huì )有大量的新芯片被生產(chǎn),大量的電路板被設計出來(lái),如果沒(méi)有一個(gè)很好的統一標準去規范這一程序,操作系統就會(huì )被設計的非常冗余,效率會(huì )非常低。

  所以無(wú)論任何操作系統都會(huì )制定一套標準的架構去管理這些驅動(dòng)程序:linux作為嵌入式操作系統的典范,其驅動(dòng)架構具有很高的規范性與聚合性,不但把不同的硬件設備分門(mén)別類(lèi)、綜合管理,并且針對不同硬件的共性進(jìn)行了統一抽象,將其硬件相關(guān)性降到最低,大大簡(jiǎn)化了驅動(dòng)程序的編寫(xiě),形成了具有其特色的驅動(dòng)組織架構。

  下圖反映了應用程序、linux內核、驅動(dòng)程序、硬件的關(guān)系。

    

 

  linux內核分為5大部分:多任務(wù)管理、內存管理、文件系統管理、設備管理、網(wǎng)絡(luò )管理;

  每一部分都有承上下的作用,對上提供API接口,提供給應用開(kāi)發(fā)工程師使用;

  對下通過(guò)驅動(dòng)程序屏蔽不同的硬件構成,完成硬件的具體操作。

 



關(guān)鍵詞: Linux 內核

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>