依照建立 "root filesystem" 的方法,我們可以區分以下 4 大類型 (Jollen 個人看法,僅供參考):
1. Embedded Linux Distribution.
2. Hand-made.
3. Build system.
4. Metadata build system.
Embedded Linux Distribution
比如像是 Debian for ARM 這類型的 pre-built Linux distribution for embedded Linux 其實是不太實用的,除了 large-scale 的應用或是教學用途 (eg. PeeWeeLinux) 外,實務上並不是很經常使用這個方法。
Hand-made
就是純手工打造法啦!
在網路上 (特別是大陸網站下載的文件) 有很高的比率都是介紹如何採用 "hand-made" 的方式來建立 (bottom-up) root filesystem,不過這種方式雖然未來非常有可能不會再使用,但是絕對100%有必要去學習,幾個理由不外乎是:
(1) 透過 hand-make (aka Linux from scratch) 才能了解最根本的觀念。
(2) 透過 hand-make 學習到整體性的 embedded Linux 設計流程與方法。
(3) 能更深入學到建立 embedded Linux 系統的技巧。
(4) 練功。
(5) 練就建立 embedded Linux 系統的基本功,並學習所要具備的 Linux 系統管理能力。
(*6) very critical 的問題都要 hand-make 才得以解決。
這個方法是必學的,因為可以學到很深入的 cross-compilation 技巧,比如像是在 Jollen 課程裡提到的在某些類型的套件 "porting" 方式中,就要去修改 configure.in。
Build System
像是 Jollen 設計的「教具」Jollen-Kit! Builder 就是屬於這種類似,我們的 embedded Linux 課程是希望同學建立基本功,因此是由 hand-made 教起,課程的尾巴我們給同學 Jollen-Kit! Builder,並講解如何「有效率且系統化的做 cross compilation 與建立 root filesystem」。
Build system 大多建立在 Makefile 與 script 的體系之上,幾個知名的 build system,像是 uclibc-distribution、SnapGear、Buildroot (也經常被用來建立 arm-uclibc 的 toolchain) 等,都算是 build system。
Metadata Build System
這是一種更先進高階的 "build system",以往我們都用 Makefiel / script 來建立 build system,但這種方法 (傳統 build system) 的缺點是:
(1) 無法有效解決套件間的相依 (dependency) 問題。
(2) 支援多平臺 (architecture) 時,很麻煩的!
(3) 有時改 configure.in 改到頭痛!
(4) 甚致要把套件 (package) 的 source code 也一起打包,不能設計成網路下載 (像 cflinux 這樣)。
(5) ...還有很多很多...
目前最具代表性 (也找不到別人了) 的專案是 OpenEmbedded,我們在今年初開始試著用 OpenEmbedded 來建立 embedded Linux,雖然還有不足的地方 (有時沒有比 build system 方便),但是基本上 OpenEmbedded 已經完整展示了先進的 "Linux distribution for embedded system" 做法。
OpenEmbedded 採用 BitBake 來做套件的 cross compilation 與管理,BitBake 使用 .bb files 與 bbclass 來建立 Linux distribution。BItBake 的精神與觀念真的非常值得讚許,如果您曾經玩過 cflinux 或類似的 build system,一定會對 BitBake 與 OpenEmbedded 感到驚奇的。
雖然我們目前用 BitBake 來建立 metadata build system 還算小有收獲 (Jollen-Kit! Builder Enterprise),不過要讓大家都能很上手的深入 OpenEmbedded 系統去做客製化、修改或是加入套件,還是有點障礙的,畢竟這不像我們上課介紹的做法那麼直覺。
而且還要挑戰 GNU autoconf,這是一大惡夢呀。
學習旅途
Embedded Linux Distribution -> Hand-made -> Build system -> Metadata build system -> 玩家!
不過不一定每個階段都要去涉獵,有些對 Linux 系統很熟的玩家級同學,甚致直接切入 build system 的修改。
最後要來 push 一下 = ="
假設對 Jollen 的課程有興趣的話,請務必了解一下我們的課程規劃,或是使用 Email 由我們提供1-by-1的咨詢,才不會花冤枉錢。
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw