Android-x86 多平台支援
其實在 Android-x86 計劃開始之初,便已考量到儘量支援各式各樣不同的 x86 平台。在 Android build system 中一個 target 是指一項特定的產品。但 x86 平台有千百種產品,這樣的架構似乎並不很適用。只是一開始對 Android build system 系統也不是那麼熟悉,一時沒有更好的解決辦法。只好先沿用原本的 eeepc target,但其實並不是真的針對 eeepc,而包含所有可能的 x86 支援。反正先做再說,邊做邊改。
不過在更多開發者加入後,特別是加入了 q1u 這個 target 之後,這個問題已經到了必須解決的時刻。否則每一個 x86 target 都會有非常類似的檔案,這會造成維護上的很大負擔。
仔細研究 build system 後,發覺 target 之間是可以繼承的。例如大部分的 target 都繼承自 generic.mk 所定義的 generic target。仿照這樣的做法,我們可以定義一個 generic_x86 的 target,讓所有其它的 x86 target 來繼承。這樣做法有兩大優點:
- 將所有 x86 平台共用的規則集中在此,避免重複,方便維護。
- 讓特定的 target 有機會針對其硬體做最佳化。
經過一段時間的試驗修改,已完成了 generic_x86 target。仿照 generic target,放在 build/target/board/generic_x86。將原本 eeepc target 之下大部分的東西都移到這裡,例如 keymap 和 firmware 的檔案。相對的,eeepc target 已修改為僅支援 ASUS Eee PC family,包括 Eee PC 背光支援以及針對 Eee PC 最佳化的 kernel 設定檔。
請特別注意這意味著 eeepc target 將不再支援一般的 x86 平台。也就是說,如果你用的不是 Eee PC,那麼指定 eeepc 為 target 所編出來的 image 很可能在你的機器上開不起來。
解決的方法有兩種:
- 改用 generic_x86 target
$ make iso_img TARGET_PRODUCT=generic_x86其實 TARGET_PRODUCT=generic_x86 可省略,它是預設的 target。
- 針對你的硬體自訂一個 target。細節請參考這封信的說明。我建議你儘量這樣做,一來可以針對你的平台做最佳化,二來可以把你的成果貢獻回來。
目前多平台的支援僅放在發展中的 master branch。至於是否反向移植到 donut-x86 branch 還在考慮中。
