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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 在嵌入式系統(tǒng)中應(yīng)用Linux深入探究

          在嵌入式系統(tǒng)中應(yīng)用Linux深入探究

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


          有些設(shè)計(jì)者不能夠準(zhǔn)確地分析出系統(tǒng)真正實(shí)時(shí)需求,很多情況下對(duì)實(shí)時(shí)的需求在1-5毫秒內(nèi)響應(yīng)就可以;大部分情況下,軟足以滿足要求:WINDOWSS的 98Crashed_Yet在98%的時(shí)間內(nèi)可以在4每秒內(nèi)響應(yīng),如果時(shí)間是20秒,則總會(huì)響應(yīng)。那些軟實(shí)時(shí)性容易滿足。需要考慮的因素包括:上下文轉(zhuǎn)換時(shí)間、中斷延遲、任務(wù)的優(yōu)先級(jí)和任務(wù)調(diào)度方式。上下文轉(zhuǎn)換時(shí)間曾經(jīng)是實(shí)時(shí)性分析的重點(diǎn),但是因?yàn)镃PU速度大幅度提高,它不再是關(guān)鍵問(wèn)題。

          現(xiàn)在,嚴(yán)格要求的實(shí)時(shí)性任務(wù)的決定因素是中斷例程本身和內(nèi)核中的其他驅(qū)動(dòng)程序有關(guān);而響應(yīng)延遲時(shí)間主要受中斷的優(yōu)先級(jí)和其他進(jìn)程會(huì)暫時(shí)地關(guān)閉中斷響應(yīng)的影響。因此管理和驅(qū)動(dòng)中斷的機(jī)制必須保證實(shí)時(shí)要求。

          對(duì)于Intelx86處理器,實(shí)時(shí)擴(kuò)充可以在系統(tǒng)中很容易進(jìn)行,RT-就是很好的例子(見(jiàn) http://www.rtlinux.org/)。它主要是把的任務(wù)作為自己的一個(gè)任務(wù),因此實(shí)時(shí)性要求很高的任務(wù)不受非實(shí)時(shí)的 Linux的干擾,可以得到滿足。另外還提供了實(shí)時(shí)任務(wù)和Linux的基本核心和其他任務(wù)間的接口,這些接口是不需要很強(qiáng)的實(shí)時(shí)性。這種架構(gòu)為其他的提供了一個(gè)參考。關(guān)鍵因素就是實(shí)時(shí)性的代碼和非實(shí)時(shí)代碼分開(kāi)設(shè)計(jì),而且實(shí)時(shí)應(yīng)用程序的處理方式和其他程序的處理方式差不多。

          3.適合的Linux

          有一種觀點(diǎn)認(rèn)為:用戶不必直接干預(yù)機(jī)器的運(yùn)行,即沒(méi)有用戶接口的應(yīng)用系統(tǒng)是。其他的比如電梯控制系統(tǒng)應(yīng)該是嵌入式系統(tǒng),但是它需要人為控制。連接網(wǎng)絡(luò)需要監(jiān)視和控制網(wǎng)絡(luò)系統(tǒng)運(yùn)行的系統(tǒng),仍然是嵌入式系統(tǒng);因此應(yīng)該根據(jù)系統(tǒng)的主要目的和功能來(lái)判定是否是嵌入式系統(tǒng)。

          最小的嵌入式Linux系統(tǒng)必須包括以下主要的要素:

          1.啟動(dòng)程序;

          2.融合了內(nèi)存管理、進(jìn)程管理和時(shí)間分批服務(wù)的核心;

          3.初始化程序。

          為了達(dá)到要求,而且為了保持最小系統(tǒng),需要添加以下要素:

          硬件的驅(qū)動(dòng)程序;

          必須的應(yīng)用程序。

          根據(jù)其他需要,你可能增加以下功能:

          1.文件管理系統(tǒng)(在ROM或RAM中);

          2.TCP/IP通訊協(xié)議;

          3.磁盤(pán)。

          4.選擇合適的硬件平臺(tái)選擇硬件平臺(tái)是一件很麻煩的事,受很多因素影響,比如公司的指導(dǎo)原則、個(gè)人偏見(jiàn)、過(guò)去產(chǎn)品的影響和消息不靈通等。費(fèi)用是考慮的主要因素。提醒你考慮價(jià)格時(shí)不要只注意CPU的價(jià)錢(qián),要對(duì)整個(gè)系統(tǒng)進(jìn)行考慮。但是如果你是系統(tǒng)設(shè)計(jì)師,你必須把軟件的實(shí)時(shí)性和硬件結(jié)合起來(lái)考慮。首先考慮需要多快的CPU,然后把選擇三倍化的結(jié)果;因?yàn)樵趯?shí)際中應(yīng)用程序會(huì)使用一些cache(緩沖),所以理論上速度很快的CPU的實(shí)際速度會(huì)降低。其次考慮選擇多快的BUS(總線);如果可以包括其他的總線,比如PCI,就加上它。因?yàn)橛袝r(shí)即使使用DMA方式傳輸,也會(huì)使快速CPU變得象蝸牛一般。選用集成外設(shè)的CPU比較好,而且還可選用現(xiàn)成的外設(shè)驅(qū)動(dòng)程序,大大減少調(diào)試工作,實(shí)際上有些芯片集成的功能并不是我們所需要的,所以也不要認(rèn)為凡是集成的都是好東西。

          5.壓縮制作Linux系統(tǒng)對(duì)Linux的通常感覺(jué)是大,似乎不適合于嵌入式系統(tǒng)。事實(shí)并非如此。因?yàn)榈湫偷陌l(fā)行Linux集成了很多桌面PC機(jī)需要而嵌入式系統(tǒng)并不需要的功能。首先,我們可以把核心(kernel)從其他任務(wù)中分離出來(lái)。標(biāo)準(zhǔn)的 Linux核心總是貯留在內(nèi)存中;當(dāng)需要應(yīng)用程序時(shí),它把需要的程序從磁盤(pán)調(diào)入內(nèi)存運(yùn)行。程序運(yùn)行完畢,內(nèi)存清空,卸載程序。在嵌入式系統(tǒng)中,經(jīng)常沒(méi)有磁盤(pán)。目前有兩種辦法來(lái)處理沒(méi)有磁盤(pán)的情況。對(duì)于比較簡(jiǎn)單的系統(tǒng),核心(kernel)和應(yīng)用程序同時(shí)貯留在內(nèi)存,當(dāng)系統(tǒng)啟動(dòng)時(shí),就啟動(dòng)應(yīng)用程序。這種方式和以前的嵌入式系統(tǒng)一樣工作。Linux系統(tǒng)也支持這種方式。第二種方式是,考慮到Linux有l(wèi)oad(裝載)和 unload(卸載)程序的能力,嵌入式系統(tǒng)也可以使用這一特點(diǎn),來(lái)節(jié)約內(nèi)存。假如有一個(gè)典型的嵌入式系統(tǒng):包括8到16M的 FlashMemory和8到16M的RAM;可以在FlashMemory上建立文件系統(tǒng),使用Flash的驅(qū)動(dòng)程序來(lái)驅(qū)動(dòng) FlashMemory上文件系統(tǒng)工作。另外,也可以使用FlashDidsk,其中有一個(gè)例子是M-system的 DiskOnChip,它可以支持達(dá)160M的FlashDisk。把使用的應(yīng)用程序文件存放在Flash文件系統(tǒng)上,根據(jù)需要調(diào)入程序。
          linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁(yè) 1 2 下一頁(yè)

          評(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); })();