close

        有許多人大概跟我一樣 , 剛開始玩ARM BaseEmbedded Linux , 在一開始一定面臨到 , 不知從何下手的困擾. 看著許多坊間許多套件商開發出的開法板 , 照著書籍 , 及裏面提供的應用程式做了一遍後 , 卻仍不知道自己玩這一個領域 , 該從那裏為學習的啟始點.  我分享一下我個人的學習規劃方向 , 當然啦 , 這不代表我已經練成了金剛護體的九陽神功. 畢竟我沒有張無忌的資質. 但至少這不可失為是一個練功的階段進程 , 足以讓我step by step 的前進.....

1.熟悉ARM 組語指令及ADS/Rearview 等IDE工具 : 套件板上應該會提供一些簡單的source code , 這可以讓你試著在類似ADSIDE工具 , 一步步的Trace系統的運作過程. 其中在bootstarp code(類似 init.s)的部份 , 運用大量的組合語言與助譯碼 , 我想使用這不一定要熟記 , 但至少不能太陌生 , 至少當要modify code時 , 能夠在書籍上 , 找到相關的訊息.

2.試著修改source code & building to execution : 學習Embedded Linux 領域 , 別告訴我是想做學術研究. 究底應該是修改程式 , 以符合硬體介面上的驅動使用. 終極目標 , 當然是希望藉由產品在市場大賣 , 賺取利潤. 所以動手改code , 然後compiler & link , 最後download elf filetarget board來驗證. 這可以試著去修改
板子所附的一些硬體周邊來來實習,如點亮LED等。 

    上述的步驟, 主要還是讓你學會如何透過ARM提供的IDE介面 , 來熟悉ARM Base MCU的指令 , 以及大致一個Embedded System 的架構. 但還算不上是個Embedded Linux的開發計劃.   Linux之所以為業界稱道, 除了是個free 的 open source外 , 其內部的網路支援性 , 以及透過廣大的網路傳播 , 相當人數的使用與修改.,所以累積了一定程度的系統穩定性. 而透過許多玩家或是Third Party , 刪除了部份核心龐大的部份 , 衍生出像是 uClinux , ArmLinux 等被使用在不同的MCU架構上的系統. 得以讓引用該MCU的產品 , 能夠擁有Linux的穩定系統 , 以及便捷的網路的傳輸服務. 這也是我們學習Embedded Liunx System , 最大魅力的所在. 但很抱歉的是 , 在移植到類似的MCU過程中 , 多數的先進是使用Tool chain 來進行Build 系統 , 所以當你從網路上獲取相關於Embedded Linux的資源時 , 大概很難將其source code 轉成為ADS/REARVIEW 所能handle 的project. 也因此 , 接下來必須試著去熟悉Tool chain的建立. 至少 , 必須能找到一套符合你系統的tool chain.

3.學會架Embedded Linux Enviroment : 包括x86系統上 , 建立一個Linux os的系統, 從網路上找詢相關的tool chain , 像是gcc , glibc , binutils等 , 並且在compiler後 , 能夠將bin或是execution file programming or download到target board 的flash 或是RAM 去執行.

4.試著撰寫Device driver:一套完整的Embedded Linux , 應該可以分為Bootload , Kernel , Device driver , Application幾個部份. 除了Kernal外 , 因為GPL的規範 , 在修改後 , 必須release出來 , share with everybody. 所以 , 大部份的業界, 大概都不大會去更動這一部份. 但其它像是bootloaderDevice driver , 都將因為開發出的硬體架構不同 , 而必須做出程度上的修改. 而其中又以Device driver所面臨的狀況更多. 所以 , 試著學著去撰寫一份屬於該硬體的Device driver , 例如是讓speaker 發聲或是LED 驅動的driver , 這會讓學習過程變的有趣 . 另外 , 如果學的精 , 保證在業界是相當的吃香.

5.Application Design: 即使是很單純的單機產品 , 像是汽車電子或是IP Phone等 , 在建置了系統的bootloader , Device driver後 , 仍須透過一些application 的coding  , 透過device driver 來操做硬體的反應. 所以試著去玩一些Application design , 這除了能夠寫一些人機界面的應用程式外 , 再開發Linux driver時, 也可以拿來做debug. 相當的受用.

6.Go GUI Design : 這一個部份不一定是必須的. 但在許多PDA或是iPhone , 以及導航產品等產品 , 在業界引領風潮後 , 透過一個LCD來實現一個Graphic User Interface的操作模式 , 看來是勢在必行的. 這個部份的學習 , 該算是獨立於Embedded Linux的部份 , 畢竟即使你使用WIN CE Mobile 5.0 , 你仍必須看懂如何操作LCD 顯示的 Spec. 只不過 , 在市場上現有的套件板中, 多提供了LCD驅動的solution , 再加上Linux業界的嵌入需求. 透過這樣的界面 , 並且熟練於上述的 4 , 5兩項 , 我想在業界混口飯吃 , 應該也不是難事. 另外在GUI 的設計中, 又分有像是Qt/miniGui等 , 每一行都算是們學問唷.

7.Porting x86 Linux到Embedded Linux或是Study Linux Kernel : 能走到這一步驟 , 或許他不一定是高手 , 但至少他要面對的挑戰 , 絕對不輕鬆. 要porting x86 linux的一些套件或是系統到Embedded Linux , 所要面對的就是對Kernel有一定的程度的熟悉 , 因為在過程中 , 必須了解硬體的特性 , 試著去修改符合該硬體的Kernel , 這必須在整個Linux架構的編排上 , 像是Stack規劃 , thread 的研究 , 就像是當玩家從Linux 2.4移值到Linux 2.6時, 必須面對系統相當大幅度的修正. 絕非只是改幾行程式 , 就可以完成的 , 這還牽涉到系統的穩定性及效率. 


      上面的七項 , 除了第1到第3 , 需要循序步驟的去實作與熟悉 , 剩下的幾項 , 可能會依不同的環境需求 , 而有著不同順序的編排. 而就算是熟練前面六項, 也只能算是精於Embedded Linux的操作與使用 , 真正的挑戰還是在於 , 面對不同的硬體需求 , 像是bluetooth , smartphone等產品 , 都必須先對spec.有一定程度的了解 , 才能下手. 這相對於許多業界販賣許多能應用在WIN CE MOBILE的套件 , 能用在Linux上的 , 相對的就少之又少. 這也就是許多公司 , 想聘用Embedded Linux engineer 來porting 相關的Device driver或是AP 在其產品上的意義. 至少公司可以在產品售出前 , 不必先付出一定費用 , 購買WIN CE Mobile , 或是相關套件的費用. 當然啦 , 也有許多大公司 , 是WIN CE及Linux兩系統並進. 畢竟 , 產品能早一點上市獲利 , 對公司來說也是另一考量.

      許多大學生畢業 , 找不到工作 , 我覺得問題是在於 , 許多學校的訓練不足 , 加上學生在技能上及工作態度不佳 , 造成公司寧可聘用有經驗的員工. Embedded System  , 學生們可以好好的耕耘 , 至少熟練前面的1~4項 , 找份工作絕對不會是件難事的唷.



     
[補註]

我想補充的是 , 許多剛入門的玩家 , 很容易一開始就迷失在Linux的瀚海中 , 常以為買一塊開發板 , 然後透過套件裏提供的一些程序 , 可以燒錄Image , 玩玩LED燈 , 就算是進入Embeded Linux的世界中. 這絕對是一個錯誤的觀念 , 也可能是書局太多這類以開發板為介紹環境的書籍 , 所誤導的結果.

進入Embedded Linux的第一個關鍵 , 一定是先了解Linux的初步架構 , 又因為不同的HW別 , 可以uClinux , ARMLinux  ,或是執行在i386上的Linux , 另外又因為支援的程度與否 , 像是2.6版本能夠support MMU , 更穩定的USB2.0等, 就成為初學者要思考的第一步.

一般會比較建議使用ARM Base的開發板  , 並不表示這是Linux運作的最佳平台 , 而是因為ARM Base的Controller , 被廣泛的運用 , 所以市面上有許多引以為設計的產品 , 再家上高手們都在上面有po上不同版本的LINUX image ,所以要取得資源會容易很多. 但其實, 只要手邊能拿到一個硬體 , 裏頭有足夠的記憶體空間 , 合適的MCU ,能夠燒入 , 及簡易的除錯方法 , 當然 , 要能夠很容易的燒入Image , 其實這都會是一個很隨性入門Embedded Linux的環境的.

另外 , 不管你一開始入門的是i386 ,或是直接玩在ARM BASE MCU或著是Power PC  , 你都需要一台能Working gcc tool chain的電腦 , 有些人會單獨的拿一台電腦灌成Linux OS , 也有人使用VM-WARE來模擬 , 這都可以 , 只要你能在PC上 , 將你修改的程式 , Modified - Build - 然後download當target board上執行  , 你就能驗證自己修改的code 對硬體表現出什麼樣的反應.....當然啦, 開始的第一步, 多是呈現死當 , 但只要別灰心 ,多摸幾次 , 多上網找相關高手的經驗 ,多能漸入佳境的.

arrow
arrow
    全站熱搜

    jslinux 發表在 痞客邦 留言(8) 人氣()