ARM 與嵌入式 linux 入門的建議

來源:互聯網
上載者:User

ARM 與嵌入式 linux 入門的建議(深藍科技原創)

        由於很多人總問這個問題,所以這裡做一個總結文檔供大家參考。這裡必須先說明,以下的步驟都是針對 Linux 系統的,並不面向 WinCE。也許你會注意到,現在做嵌入式的人中,做 linux 研究的人遠比做 WinCE 的人多,很多產家提供的資料也是以 linux 為主。我一直很難理解,其實 WinCE 的介面比 linux 的介面好看多了,使用起來也很方便,更為重要的是,WinCE 的開發和 Windows 下的開發基本一樣,學起來簡單得多,但是學 linux 或者使用 linux 做嵌入式的人就是遠比 WinCE 多。在和很多工作的人交流時我瞭解到,他們公司從沒考慮使用 WinCE,因為成本高,都是使用 linux 進行開發。我讀研究生的的實驗室中也沒有使用 WinCE 的,大都研究 linux,也有少部分項目使用 vxwork,但是就沒有聽說過使用 WinCE 的,原因就是開源!當然現在 WinCE6.0 聽說也開源,不過在成本和資源上 linux 已經有了無人能擋的優勢。與此相對應的是,越來越多的電子廠商已經開始使用 linux 開發產品。舉個例子,Google 近期開發的智能手機作業系統 Android 其實就是使用 linux-2.6.23 核心進行改進得到的。
        第一,學習基本的裸機編程
        對於學硬體的人而言,必須先對硬體的基本使用方法有感性的認識,更必須深刻認識該硬體的控制方式,如果一開始就學 linux 系統、學移植那麼只會馬上就陷入一個很深的漩渦。我在剛剛開始學 ARM 的時候是選擇 ARM7(主意是當時 ARM9 還很貴),學 ARM7 的時候還是保持著學 51 單片機的思維,使用 ADS 去編程,第一個實驗就是控制 led。學過一段時間 arm 的人都會笑這樣很笨,實際上也不是,我倒是覺得有這個過程會好很多,因為無論做多複雜的系統最終都會落實到這些最底層的硬體控制,因此對這些硬體的控制有了感性的認識就好很多了
        學習裸機的編程的同時要好好理解這個硬體的構架、控制原理,這些我稱他為理解硬體。所謂的理解硬體就是說,理解這個硬體是怎麼組織這麼多資源的,這些資源又是怎麼由 cpu、由編程進行控制的。比如說,s3c2410 中有 AD 轉換器,有 GPIO(通用 IO 口),還有 nandflash 控制器,這些東西都有一些寄存器來控制,這些寄存器都有一個地址,那麼這些地址是什麼意思?又怎麼通過寄存器來控制這些外圍裝置的運轉?還有,norflash 內部的每一個單元在這個晶片的記憶體中都有一個相應的地址單元,那麼這些地址與剛剛說的寄存器地址又有什麼關係?他們是一樣的嗎?而與 norflash 相對應的 nandflash 內部的儲存單元並不是線性排放的,那麼 s3c2410 怎麼將 nandflash 的地址映射在記憶體空間上進行使用?或者簡單地說應該怎麼用 nandflash?再有,使用 ADS 進對 arm9 行編程時都需要使用到一個初始化的彙編檔案,這個檔案究竟有什麼用?他裡面的代碼是什麼意思?不要這個可以嗎?
        諸如此類都是對硬體的理解,理解了這些東西就對硬體有很深的理解了,這對以後更深一步的學習將有很大的協助,如果跳過這一步,我相信越往後學越會覺得迷茫,越覺得這寫東西深不可測。因為,你的根基沒打好。
        不過先聲明一下,本人並沒有使用 ADS 對 ARM9 進行編程,我是學完 ARM7 後直接就使用 ARM9 學 linux 系統的,因此涉及使用 ADS 對 arm9 進行編程的問題我很難回答^_^,自己去研究研究吧。
        對於這部分不久將提供一份教程,這個教程中的常式並不是我為我們所代理的板子寫的,是我在我們學院實驗室拿的,英培特為他們自己 的實驗箱寫的,不過很有借鑒意義,可以作為一份有價值的參考。
        第二,使用 linux 系統進行一些基本的實驗
        在買一套板子的時候一般會提供一些 linux 的實驗常式,好好做一段時間這個吧,這個過程也是很有意義的,也是為進一步的學習積累感性認識,你能想象一個從沒有使用過 linux 系統的人能學好 linux 的編程嗎?好好按照手冊上的常式做一做裡面的實驗,雖然有點娃娃學走路,有點弱智,但是我想很多高手都會經曆這個過程。
        在這方面我們深藍科技目前沒有計劃提供相應的常式,主要是開發板的供應商會提供很豐富的常式,我們不做重複工作,只提供他們沒有的、最有價值的東西給大家。
        第三,研究完整的 linux 系統的的運行過程
        所謂完整的 linux 系統包括哪些部分呢?
        三部分:bootloader、linux kernel(linux 核心)、rootfile(根檔案系統)。
        那麼這 3 部分是怎麼相互協作來構成這個系統的呢?各自有什麼用呢?三者有什麼聯絡?怎麼聯絡?系統的執行流程又是怎麼樣的呢?搞清楚這個問題你對整個系統的運行就很清楚了,對於下一步製作這個 linux 系統就打下了另一個重要的根基。介紹這方面的資料網上可以挖掘到幾噸,自己好好研究吧。
        第四,開始做系統移植
        上面說到完整的 linux 有 3 部分,而且你也知道了他們之間的關係和作用,那麼現在你要做的便是自己動手學會製作這些東西。
        當然我不可能叫你編寫這些代碼,這不實現。事實上這個 3 者都能在網下載到相應的原始碼,但是這個原始碼不可能下載編譯後就能在你的系統上運行,需要很多的修改,直到他能運行在你的板子上,這個修改的過程就叫移植。在進行移植的過程中你要學的東西很多,要懂的相關知識也很多,等你完成了這個過程你會發現你已經算是一個初出茅廬的高手了。
        在這個過程中如果你很有研究精神的話你必然會想到看原始碼。很多書介紹你怎麼閱讀 linux 原始碼,我不提倡無目的地去看 linux 原始碼,用許三多的話說,這沒有意義。等你在做移植的時候你覺得你必須去看原始碼時再去找基本好書看看,這裡我推薦一本好書倪繼利的《linux 核心的分析與編程》,這是一本針對 linux-2.6.11 核心的書,說得很深,建議先提高自己的 C 語言編程水平再去看。
        至於每個部分的移植網上也可以找到好多噸的資料,自己研究研究吧,不過要提醒的是,很多介紹自己經驗的東西都或多或少有所保留,你按照他說的去做總有一些問題,但是他不會告訴你怎麼解決,這時就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保證能解決你的問題,因為我未必遇到過你的問題,不過我相信能給你一點建議,也許有助你解決問題。
        這一步的最終目的是,從原始碼的官方首頁上(都是外國的,悲哀)下載標準的原始碼包,然後進行修改,最終運行在板子上。
        盜用阿基米德的一句話:“給我一根網線,我能將 linux 搞定”。
        第五,研究 linux 驅動程式的編寫
        移植系統並不是最終的目的,最終的目的是開發產品,做項目,這些都要進行驅動程式的開發。
        Linux 的驅動程式可以說是五花八門,linux2.4 和 linux2.6 的編寫有相當大的區別,就是同為 linux2.6 但是不同版本間的驅動程式也有區別,因此編寫 linux 的驅動程式變都不是那麼容易的事情,對於最新版本的驅動程式的編寫甚至還沒有足夠的參考資料。那麼我的建議就是使用、移植一個不算很新的版本核心,這樣到時學驅動的編程就有足夠的資料了。
        這部分的推薦書籍可以參考另一篇文章《推薦幾本學習嵌入式 linux 的書籍》。
        第六,研究應用程式的編寫
        做作品做項目除了編寫驅動程式,最後還要編寫應用程式。現在的趨勢是圖形應用程式的開發,而圖形應用程式中用得最多的還是 qt/e 函數庫。我一直就使用這個函數庫來開發自己的應用程式,不過我希望你能使用國產的 MiniGUI 函數庫。盜用周杰倫的廣告詞就是“支援國產,支援 MiniGUI”。MiniGUI 的編程比較相似 Windows 下的 VC 編程,比較容易上手,效果應該說是相當不錯的,我曾使用過來開發 arm7 的程式。不過 MiniGUI 最大的不好就是沒有像 qtopia 這樣的圖形操作平台,這大大限制了他的推廣,我曾經幻想過與北京飛漫公司(就是 MiniGUI 的著作權擁有者)合作使用 MiniGUI 函數庫開發像 qtopia 這樣的圖形操作平台,不過由於水平有限這隻能是幻想了,呵呵。
        完成這一步你基本就學完了嵌入式 linux 的全部內容了。
        還有一個小小的經驗想和大家分享。我在學習嵌入式 linux 的過程中很少問人,客觀原因是身邊的老師、同學師兄都沒有這方面的高手,主觀原因是我不喜歡問人,喜歡自己研究解決問題。這樣做有個好處,就是可以提高自己解決問題的能力,因為做這些東西總有很多問題你難以理解,別人也沒有這方面的經驗,也不是所有問題都有人給你答案,這時必須要自己解決問題,這樣,個人的解決問題能力就顯得非常關鍵了。因此我的建議就是一般的問題到網上搜尋一下,確實找不到答案了就問問高手,還是不行了就自己去研究,不要一味去等別人幫你解決問題。
        記住,問題是學習的最好機會。
原文連結:http://tech.ddvip.com/2009-06/1244779590123387.html。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.