ARM與嵌入式linux入門的建議 推薦

2021-04-22 12:24:53 字數 4950 閱讀 1880

這裡必須先說明,以下的步驟都是針對

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

記住,問題是學習的最好機會。

ARM與嵌入式linux的入門建議

第一,學習基本的裸機程式設計。對於學硬體的人而言,必須先對硬體的基本使用方法有感性的認識,更必須深刻認識該硬體的控制方式,如果一開始就學linux系統 學移植那麼只會馬上就陷入乙個很深的漩渦。我在剛剛開始學arm的時候是選擇arm7 主意是當時arm9還很貴 學arm7的時候還是保持著學51微控制器...

ARM與嵌入式linux入門的建議

嵌入式 的人中,做linux研究的人遠比做wince的人多,很多產家提供的資料也是以linux為主。我一直很難理解,其實wince的介面比linux的介面好看多了,使用起來也很方便,更為重要的是,wince的開發和windows下的開發基本一樣,學起來簡單得多,但是學linux或者使用linux做 ...

ARM與嵌入式linux的入門建議

第一,學習基本的裸機程式設計。對於學硬體的人而言,必須先對硬體的基本使用方法有感性的認識,更必須深刻認識該硬體的控制方式,如果一開始就學linux系統 學移植那麼只會馬上就陷入乙個很深的漩渦。我在剛剛開始學arm的時候是選擇arm7 主意是當時arm9還很貴 學arm7的時候還是保持著學51微控制器...