切換到寬版
  • 廣告投放
  • 稿件投遞
  • 繁體中文
    • 2434閱讀
    • 1回復(fù)

    [轉(zhuǎn)載]ARM與嵌入式linux的入門建議 [復(fù)制鏈接]

    上一主題 下一主題
    離線edn2014
     
    發(fā)帖
    1
    光幣
    2
    光券
    0
    只看樓主 倒序閱讀 樓主  發(fā)表于: 2014-11-29
    由于很多人總問(wèn)這個(gè)問(wèn)題,所以這里做一個(gè)總結(jié)供大家參考。這里必須先說(shuō)明,以下的步驟都是針對(duì)Linux系統(tǒng)的,并不面向WinCE。也許你會(huì)注意到,現(xiàn)在做嵌入式的人中,做linux研究的人遠(yuǎn)比做WinCE的人多,很多產(chǎn)家提供的資料也是以linux為主。我一直很難理解,其實(shí)WinCE的界面比linux的界面好看多了,使用起來(lái)也很方便,更為重要的是,WinCE的開(kāi)發(fā)和Windows下的開(kāi)發(fā)基本一樣,學(xué)起來(lái)簡(jiǎn)單得多,但是學(xué)linux或者使用linux做嵌入式的人就是遠(yuǎn)比WinCE多。在和很多工作的人交流時(shí)我了解到,他們公司從沒(méi)考慮使用WinCE,因?yàn)槌杀靖,都是使用linux進(jìn)行開(kāi)發(fā)。我讀研究生的的實(shí)驗(yàn)室中也沒(méi)有使用WinCE的,大都研究linux,也有少部分項(xiàng)目使用vxwork,但是就沒(méi)有聽(tīng)說(shuō)過(guò)使用WinCE的,原因就是開(kāi)源!當(dāng)然現(xiàn)在WinCE6.0聽(tīng)說(shuō)也開(kāi)源,不過(guò)在成本和資源上linux已經(jīng)有了無(wú)人能擋的優(yōu)勢(shì)。與此相對(duì)應(yīng)的是,越來(lái)越多的電子廠商已經(jīng)開(kāi)始使用linux開(kāi)發(fā)產(chǎn)品。舉個(gè)例子,Google近期開(kāi)發(fā)的智能手機(jī)操作系統(tǒng)Android其實(shí)就是使用linux-2.6.23內(nèi)核進(jìn)行改進(jìn)得到的! ]v{fFmL  
      2 &Byq  
      第一,學(xué)習(xí)基本的裸機(jī)編程。 reA8=>b/  
    & .?HuK  
      對(duì)于學(xué)硬件的人而言,必須先對(duì)硬件的基本使用方法有感性的認(rèn)識(shí),更必須深刻認(rèn)識(shí)該硬件的控制方式,如果一開(kāi)始就學(xué)linux系統(tǒng)、學(xué)移植那么只會(huì)馬上就陷入一個(gè)很深的漩渦。我在剛剛開(kāi)始學(xué)ARM的時(shí)候是選擇ARM7(主意是當(dāng)時(shí)ARM9還很貴),學(xué)ARM7的時(shí)候還是保持著學(xué)51單片機(jī)的思維,使用ADS去編程,第一個(gè)實(shí)驗(yàn)就是控制led。學(xué)過(guò)一段時(shí)間ARM的人都會(huì)笑這樣很笨,實(shí)際上也不是,我倒是覺(jué)得有這個(gè)過(guò)程會(huì)好很多,因?yàn)闊o(wú)論做多復(fù)雜的系統(tǒng)最終都會(huì)落實(shí)到這些最底層的硬件控制,因此對(duì)這些硬件的控制有了感性的認(rèn)識(shí)就好很多了學(xué)習(xí)裸機(jī)的編程的同時(shí)要好好理解這個(gè)硬件的構(gòu)架、控制原理,這些我稱他為理解硬件。所謂的理解硬件就是說(shuō),理解這個(gè)硬件是怎么組織這么多資源的,這些資源又是怎么由cpu、由編程進(jìn)行控制的。比如說(shuō),s3c2410中有AD轉(zhuǎn)換器,有GPIO(通用IO口),還有nandflash控制器,這些東西都有一些寄存器來(lái)控制,這些寄存器都有一個(gè)地址,那么這些地址是什么意思?又怎么通過(guò)寄存器來(lái)控制這些外圍設(shè)備的運(yùn)轉(zhuǎn)?還有,norflash內(nèi)部的每一個(gè)單元在這個(gè)芯片的內(nèi)存中都有一個(gè)相應(yīng)的地址單元,那么這些地址與剛剛說(shuō)的寄存器地址又有什么關(guān)系?他們是一樣的嗎?而與norflash相對(duì)應(yīng)的nandflash內(nèi)部的儲(chǔ)存單元并不是線性排放的,那么s3c2410怎么將nandflash的地址映射在內(nèi)存空間上進(jìn)行使用?或者簡(jiǎn)單地說(shuō)應(yīng)該怎么用nandflash?再有,使用ADS進(jìn)對(duì)ARM9行編程時(shí)都需要使用到一個(gè)初始化的匯編文件,這個(gè)文件究竟有什么用?他里面的代碼是什么意思?不要這個(gè)可以嗎?諸如此類都是對(duì)硬件的理解,理解了這些東西就對(duì)硬件有很深的理解了,這對(duì)以后更深一步的學(xué)習(xí)將有很大的幫助,如果跳過(guò)這一步,我相信越往后學(xué)越會(huì)覺(jué)得迷茫,越覺(jué)得這寫(xiě)東西深不可測(cè)。因?yàn),你的根基沒(méi)打好。不過(guò)先聲明一下,本人并沒(méi)有使用ADS對(duì)ARM9進(jìn)行編程,我是學(xué)完ARM7后直接就使用ARM9學(xué)linux系統(tǒng)的,因此涉及使用ADS對(duì)ARM9進(jìn)行編程的問(wèn)題我很難回答^_^,自己去研究研究吧。 gr 5]5u  
    ?&"^\p  
      對(duì)于這部分不久將提供一份教程,這個(gè)教程中的例程并不是我為我們所代理的板子寫(xiě)的,是我在我們學(xué)院實(shí)驗(yàn)室拿的,英培特為他們自己的實(shí)驗(yàn)箱寫(xiě)的,不過(guò)很有借鑒意義,可以作為一份有價(jià)值的參考。 _onp%*  
    3] qlz?5  
      第二,使用linux系統(tǒng)進(jìn)行一些基本的實(shí)驗(yàn)。 Hk]BC  
    $&8h=e~]-  
      在買一套板子的時(shí)候一般會(huì)提供一些linux的試驗(yàn)例程,好好做一段時(shí)間這個(gè)吧,這個(gè)過(guò)程也是很有意義的,也是為進(jìn)一步的學(xué)習(xí)積累感性認(rèn)識(shí),你能想象一個(gè)從沒(méi)有使用過(guò)linux系統(tǒng)的人能學(xué)好linux的編程嗎?好好按照手冊(cè)上的例程做一做里面的實(shí)驗(yàn),雖然有點(diǎn)娃娃學(xué)走路,有點(diǎn)弱智,但是我想很多高手都會(huì)經(jīng)歷這個(gè)過(guò)程。 x ct U.)p  
    &Bn; Vi  
       在這方面我們深藍(lán)科技目前沒(méi)有計(jì)劃提供相應(yīng)的例程,主要是開(kāi)發(fā)板的提供商會(huì)提供很豐富的例程,我們不做重復(fù)工作,只提供他們沒(méi)有的、最有價(jià)值的東西給大家。 gx*rSS?=N  
    s\W  
      第三,研究完整的linux系統(tǒng)的的運(yùn)行過(guò)程。 ;1.>"zX(  
    Z% ;4Ed  
      所謂完整的linux系統(tǒng)包括哪些部分呢? d# 3tQ*G/  
    i$ L]X[  
      三部分:bootloader、linux kernel(linux內(nèi)核)、rootfile(根文件系統(tǒng))。 aE BP9RX}z  
    s1vrzze  
      那么這3部分是怎么相互協(xié)作來(lái)構(gòu)成這個(gè)系統(tǒng)的呢?各自有什么用呢?三者有什么聯(lián)系?怎么聯(lián)系?系統(tǒng)的執(zhí)行流程又是怎么樣的呢?搞清楚這個(gè)問(wèn)題你對(duì)整個(gè)系統(tǒng)的運(yùn)行就很清楚了,對(duì)于下一步制作這個(gè)linux系統(tǒng)就打下了另一個(gè)重要的根基。介紹這方面的資料網(wǎng)上可以挖掘到幾噸,自己好好研究吧。 CjQ"o