日前與 [jserv] 兄聊天時談論到 OpenMoko 的 build system,我們都一致覺得基於 OpenEmbedded 的 OpenMoko build system 太過於複雜,雖然 OpenEmbedded 目前是一套頗流行的 meta data build system,但是對一些想要了解 OpenMoko 的朋友來說,這反而是一個無形的門檻。
今天在 [OrzLab] 上看到 jserv 將 OpenEmbedded 的 'repository' 轉成 Subversion 系統的做法,全文可參閱 [轉換OpenEmbedded的repository為Subversion系統]。OpenEmbedded 原本採用的是 [monotone] 版本管理系統,現在將 OpenEmbedded 的版本管理系統轉換成 SVN 後,就可以延續以往 SVN 的使用經驗來降低入門難度,並實現一些分支管理的需求。
關於分支管理方面,有一個小小的問題。OpenEmbedded 以 [bitbake] 為基礎,建構了一套「彈性相當高」的 meta data build system,因此,我們可以針對自己的需求,用力修改 OpenEmbedded 的 bb file,特別是對 deploy 的方式做調整。如果我們對 OpenEmbedded 的 *.bb 做了客製化修改,也做了一套自己的分支,那麼要怎麼跟 upstream 的更新做合併(同步)呢?
客製化的 OpenEmbedded 要怎麼與 upstream 的 OpenEmbedded 做合併(同步),針對這個問題,jserv 兄採用 SVN 與 SVK 來進行。如此一來,透過「合併」的方式便解決了如何同步「分支」與「upstream」的問題。Embedded Linux 經常需要做分支(branch)的開發,SVN/SVK 解決了許多「管理面」的問題,這部份可參考 OrzLab 的介紹 [SVK與嵌入式系統開發]。
回到 OpenEmbedded 與 OpenMoko 的議題。OpenEmbedded 的目標是針對常見的 FOSS 套件編寫 metadata(即 bb file),完整的 OpenEmbedded 已經收錄超過 4000 個套件了。但是 OpenMoko framework 只使用到 OpenEmbedded 裡頭大約 30 個套件而己。
對於做出一個專給 OpenMoko 使用的 OpenEmbedded 分支來說,第一個工作便是對 OpenEmbedded 的 repository 進行瘦身簡化的工作。許多套件並未包含在 OpenMoko framework 裡,因此需要將不用的部份移除;這個「簡化」的工作實行上並不算太難。
只是,當我們後續維護此分支時,需要不定期與 upstream 做合併,原本採用 monotone 的 OpenEmbedded 在這個地方又要讓 Embedded Linux 開發者抱頭痛哭了。還好,將 OpenEmbedded 的版本管理系統轉換成 Subversion 後,一切的工作突然變得簡單許多。
不過,在教育訓練的經驗裡讓我知道,這樣的 build system 對入門者而言仍然是一個大門檻;因此,提供一個彈性較低,但使用上較簡單的環境,將會是一個重要的工作。日後再將這個部份做整理分享。
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw