在主機(Host)建立一個主機系統 , 其實該說是很容易的. 坊間有太多的開發套件(distribution) , 像是早期的RedHat , 或是Fedora , Mandrake , Suse等 , 多的不勝枚舉. 通常只有follow安裝光碟的步驟 , 就能很清楚的將一個帶有GUI(Graphic User Interface) 給安裝在你的電腦主機上. 但想要進入Linux 嵌入式系統(Embedded System) , 這只是一個最基本的課題而已.....
我們將面臨到的有:
1. 選定什麼樣的Target Board , 作為實現嵌入式的系統的平台.
2. 想將什麼樣的系統 , Built到Target Board上.
3. 選定何種Bootload 來起動你的核心(zImage)
4. 有沒有需要根檔案系統(root file system)
5. 開發過程中 , 有沒有設定要如何進行除錯.
光這幾項 , 就足以讓人傷透腦筋.
但隨著市場電子商品的蓬勃發展 , 尤其許多可攜式(portable)商品 , 像是PDA , GPS導航系統 , SMART Phone , 汽車電子等商品應蘊而生. 相對的坊間 , 有許多的業者 , 做了許多的開發板 , 並提供了相關的資訊論壇 , 讓使用者在學習層面上 , 有著許多可以互相交流的機會.
不過 , 在進入實體操作層面時 , 建議還是先去拜讀一些相關書籍 , 這有助於在開發過程中 , 當遇到問題時 , 起碼有一些書中作者提供的經驗. 像是O'REILLY出的 " Building Embedded Linux Systems " 及 " Linux Device Driver " 或著是碁峰出的 " 建構嵌入式系統-使用Linux " , 都是相當不錯的書目. 尤其由YAGHMOUR作的 " Building Embedded Linux Systems "這本書中 , 會導引你如何從工具鏈(tool chain)的取得, 以及核心(Linux Kernel)編譯一直到開機程式(bootloader) 等過程 , 都會以不同篇幅 , 做相當詳盡的解說. 是本很值得收藏的工具書.
在學習Linux Embedded System , 有一個相當的關鍵 , 就是要能忍的住挫敗. 因為相較於要收費的WIN CE套件 , 雖然要收費 , 但套件包裝的也較完整. Linux則因為來源多且雜 , 初學者一開始 , 可能會有無所適從的經驗 , 甚至照著書中的指導一步步的做 , 結果卻與書中的結果 , 有很大的差異. 所以就必須借重開發者的經驗 , 自行將其套件tune到穩定. 但在入門後 , 就能感受到在Linux 許多論壇中 , 那種不被收費 , 又可以不斷的收取許多資源的好處 , 是Microsoft所遠不能比擬的喔
- 12月 20 週四 200714:00
如何進入Linux嵌入式系統(Embedded Linux system)
- 9月 06 週日 200923:49
Google -- Android
好久沒上來寫寫Linux的玩意兒 ~ 除了忙著公事外 , 其實也花上了大半的時間 , 在研究Google的手機開放平台--Android.
其實 , 如果一開始 , 就要把Android定為手機開放程式的平台 , 只能說是因為Google想藉著這日趨成熟的Smart Phone市場 , 大力的推廣其Google社群的魅力所在. 但其實 , 按未來最大的可能 , 應該是要將Android定位在MID(Mobile Internet Device)的類別 , 也就是說 , 只要是一個可攜式的通信裝置 , 多可以藉由Android的開放平台大力的開發. 所以 , 隨著未來無線網路通信設備的更加普及 , 數據傳輸的廣泛度更加成熟 , 幾乎可以預期會有許多的相關的周邊產品 , 使用該平台的SDK來撰寫應用程式及作業系統.
如大家所知的的 Android是Linux background的產品. 在玩了好一陣子的Embedded Linux , 終於見到有一個比較完整的社群在大力的推廣. 我想有興趣著墨這一塊的 , 該是共襄盛舉的好時機.
----以下是IP設計商 , 正大力的將Android這套作業系統 ,給po在其IP能建置的各項不同的處理器及衍生的電子產品上. 可以預期的 , 越來越多的商品 , 被"Android化"是指日可待的.
Android on MIPS®
MIPS科技公開原始程式碼!
MIPS科技正將功能強大的Android™平台帶到全球各地廣大的MIPS開發社群中。MIPS開發人員現在可以利用此一革命性平台進行消費性產品設計,包括機頂盒、數位電視、行動上網裝置(MID)、家庭媒體播放器,以及VoIP系統等。
憑藉MIPS科技在數位家庭的領先地位,此舉將能為推動Android跨入行動電話以外的龐大市場奠定重要基礎。
什麼是Android?
Android是一套包括作業系統、中介軟體、和關鍵應用程式的軟體。利用Android及其開放源開發社群,開發人員能夠輕鬆快速地建立新的應用程式,同時OEM廠商也能夠為產品選用日益成長的各種應用程式。
推動Android進入數位家庭市場
MIPS科技已為其核心和架構建置廣泛的生態系統。MIPS所建置的Android生態系統可協助OEM業者為其特定平台快速進行最佳化設計。MIPS可提供自行開發工具,以及Viosoft和Mentor Graphics等合作夥伴的工具,以支援Android的開發與移植工作。
結合我們的生態系統夥伴、矽晶夥伴、以及開放嵌入式軟體基金會(OESF)的工作小組,這一項有組織的行動正推動著Android朝手機以外的應用發展,MIPS科技亦將致力於為消費性產品定義標準化Android-based平台。
MIPS科技的矽晶夥伴RMI公司和Sigma Designs已成功展示Android在家庭媒體播放器和DTV參考設計等矽晶平台上執行。MIPS的長期合作夥伴D2科技公司也已展示為Android-based裝置開發的mCUE™匯聚通訊客戶端程式。
Android邁向手機以外的應用,正快速成為事實!
一個共同基礎,以推動Android邁進數位家庭
MIPS科技正致力於將Android on MIPS的原始程式碼對大眾開放。我們鼓勵客戶和合作夥伴從MIPSAndroid.com下載程式碼,並針對其平台進行最佳化設計,然後,將此程式碼傳回,這樣我們才能在一共同的基礎上持續進展。
- 2月 23 週六 200813:05
旗標出版的書籍---Embedded Linux 開發實務徹底研究
像是Linux Kernel , 或是Linux Device driver等書
Kernel image building 或是 bootloader 的建置與配置 , 以及 Device driver 的建立README
找到一本由旗標出版社出版 , 林昭宏先生所翻譯的 --Embedded Linux 開發實務徹底研究. 這本書的原作者是目前在Monta Vista擔任應用開發工程師的 Christopher Hallinan 所著. 藉由其在業界25年的專業累積 , 裏頭針對許多坊間在玩 Embedded Linux 的問題或過程 , 都有程度上的描述. 再加上翻譯者翻的相當貼切. 我個人相當建議對 Embedded Linux 有興趣的人 , 卻又沒有太多盤纏的人. 不妨拿它做為一本入們的書籍. 相信會是很有幫助的.
文章後面 , 我大致的將書中的目錄列出於下 , 如果沒時間去實體書店購書的人 , 或許可以參考一下 , 再決定是不是要在網路上購書.
[ Embedded Linux 開發實務徹底研究 ] ---博客來的連結
目 錄
第 1 章 簡介
1-1 為何是Linux
1-2 嵌入式Linux的現況
1-3 關於原始碼與通用公共授權
1-4 標準與相關主題
1-5 本章總結(延伸閱讀)
第 2 章 你的第一次嵌入式經驗
2-1 這是嵌入式嗎?
2-2 解析嵌入式系統
2-3 儲存考量
2-4 嵌入式Linux 套件
2-5 本章總結(延伸閱讀)
第 3 章 處理器概要
3-1 獨立處理器
3-2 整合性處理器(SOC)
3-3 硬體平台
3-4 本章總結(延伸閱讀)
第 4 章 Linux 核心 : 一個不同的解析
4-1 背景
4-2 建構Linux核心
4-3 核心建置系統
4-4 取得Linux核心
4-5 本章總結(延伸閱讀)
第 5 章 核心啟始化
5-1 合成核心影像檔 : 小豬與它的同伴
5-2 啟始流程的控制
5-3 核心指令列的處理
5-4 子系統啟始化
5-5 init初始化執行緒
5-6 本章總結(延伸閱讀)
第 6 章 系統的初始化
6-1 根檔案系統
6-2 核心的最終開機步驟
6-3 init行程
6-4 初始化記憶體硬碟
6-5 使用initramfs
6-6 關機
6-7 本章總結(延伸閱讀)
第 7 章 開機載入程式
7-1 開機載入程式的角色
7-2 開機載入程式的挑戰
7-3 常用的開機載入程式 : Das U-boot
7-4 移值 U-boot
7-5 其他開機載入程式
7-6 本章總結(延伸閱讀)
第 8 章 設備驅動程式基礎
8-1 設備驅動程式的觀念
8-2 模組工具
8-3 驅動程式方法
8-4 全部整合一起
8-5 設備驅動程式與GPL
8-6 本章總結(延伸閱讀)
第 9 章 檔案系統
9-1 Linux檔案系統的關念
9-2 ext2
9-3 ext3
9-4 ReiserFS
9-5 JFFS2
9-6 cramfs
9-7 網路檔案系統
9-8 虛擬檔案系統
9-9 其他檔案系統
9-10 建置簡單檔案系統
9-11 本章總結(延伸閱讀)
第 10 章 MTD 子系統
10-1 執行 MTD 服務功能
10-2 MTD 基礎
10-3 MTD 分割區
10-4 MTD 公用程式
10-5 本章總結(延伸閱讀)
第 11 章 Busybox
11-1 Busybox 介紹
11-2 Busybx 組態設定
11-3 Busybox的操作
11-4 本章總結(延伸閱讀)
第 12 章 嵌入式開發環境
12-1 跨平台開發環境
12-2 開發主機的需求
12-3 為目標版設定開發主機
12-4 本章總結(延伸閱讀)
第 13 章 開發工具
13-1 GNU除錯程式(GDB)
13-2 圖型化資料顯示除錯程式
13-3 cbrower/csope C 語言瀏覽程式
13-4 追蹤與效能分析公用程式
13-5 二進位公用程式
13-6 其他二進位公用程式
13-7 本章總結(延伸閱讀)
第 14 章 核心除錯技術
14-1 核心除錯的挑戰
14-2 使用KGDB來為核心除錯
14-3 Linux核心除錯
14-4 硬體輔助除錯
14-5 當無法開機時
14-6 本章總結(延伸閱讀)
第 15 章 嵌入式 Linux 應用程式的除錯
15-1 在目標板上除錯
15-2 遠端除錯
15-3 與公用函式庫一起除錯
15-4 多工之除錯
15-5 其他遠端除錯選項
15-6 本章總結(延伸閱讀)
第 16 章 移植 Linux
16-1 Linux 原始碼的組織
16-2 修改Linux以符合你的板子
16-3 平台初始化
16-4 組合在一起
16-5 本章總結(延伸閱讀)
第 17 章 Linux合即時作業
17-1 什麼是即時作業
17-2 核心先佔
17-3 即時作業核心修補程式
17-4 即時核心作業的除錯
17-5 本章總結(延伸閱讀)
附錄 A GNU 公用許可
附錄 B U-boot 組態命令設定
附錄 C Busybox 命令
附錄 D SDRAM 介面的考量
D-1 SDRAM的基礎
D-2 時序
D-3 SDRAM的設定
D-4 本章總結(延伸閱讀)
附錄 E 開放原始碼的相關資源
附錄 F BDI-2000範例組態設定檔
- 1月 16 週三 200810:44
How to entry in Embedded Linux System.
有許多人大概跟我一樣 , 剛開始玩ARM Base 的Embedded Linux , 在一開始一定面臨到 , 不知從何下手的困擾. 看著許多坊間許多套件商開發出的開法板 , 照著書籍 , 及裏面提供的應用程式做了一遍後 , 卻仍不知道自己玩這一個領域 , 該從那裏為學習的啟始點. 我分享一下我個人的學習規劃方向 , 當然啦 , 這不代表我已經練成了金剛護體的九陽神功. 畢竟我沒有張無忌的資質. 但至少這不可失為是一個練功的階段進程 , 足以讓我step by step 的前進.....
1.熟悉ARM 組語指令及ADS/Rearview 等IDE工具 : 套件板上應該會提供一些簡單的source code , 這可以讓你試著在類似ADS等IDE工具 , 一步步的Trace系統的運作過程. 其中在bootstarp code(類似 init.s)的部份 , 運用大量的組合語言與助譯碼 , 我想使用這不一定要熟記 , 但至少不能太陌生 , 至少當要modify code時 , 能夠在書籍上 , 找到相關的訊息.
2.試著修改source code & building to execution : 學習Embedded Linux 領域 , 別告訴我是想做學術研究. 究底應該是修改程式 , 以符合硬體介面上的驅動使用. 終極目標 , 當然是希望藉由產品在市場大賣 , 賺取利潤. 所以動手改code , 然後compiler & link , 最後download elf file到target 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. 所以 , 大部份的業界, 大概都不大會去更動這一部份. 但其它像是bootloader及Device 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 對硬體表現出什麼樣的反應.....當然啦, 開始的第一步, 多是呈現死當 , 但只要別灰心 ,多摸幾次 , 多上網找相關高手的經驗 ,多能漸入佳境的.
- 1月 16 週三 200810:11
What's topic to work hard in the Embedded Linux field ?
U-bootEmbedded Linux System EngineerDesign House
1.Toolchain/Debugger - RVDS, GNU, GDB
2.Bootloader - Armboot, U-boot, proprietary
3.Kernel - build system, MMU, startup, device drivers, scheduler, VFS, swap...
4.C Lib - ucLibc, Glibc, newlib, pthread
5.Simulator - RVDS, skyeye
6.Window manager/GUI lib - Qt, Gtk, Fltk, DirectFB...
7.Applications - Codecs (MPEG-2/4, H.264, WMV/A, JPEG...), WMDRM, DVB-T/H, GPS, Games, PIM....
- 12月 14 週五 200719:02
Start in Embedded Linux
學如逆水行舟 , 不進則退
