<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          Linux系統(tǒng)下程序、內(nèi)核與硬件的關(guān)系

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

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

          本文引用地址:http://www.ex-cimer.com/article/201712/373669.htm

            01

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

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

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

            02

            Linux固件工程師(Firmware Engineer):

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

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

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

            2)編寫(xiě)Linux設(shè)備驅(qū)動(dòng)需要對(duì)硬件的原理有相當(dāng)?shù)牧私?,大多?shù)情況下我們是針對(duì)一個(gè)特定的嵌入式硬件平臺(tái)編寫(xiě)驅(qū)動(dòng)的,例如:針對(duì)特定的主機(jī)平臺(tái):可能是三星的2410、2440,也可能是atmel的,或者飛思卡爾的等等

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

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

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

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

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

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

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

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

              

           

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

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

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

           



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

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();