Yi 已經釋出了 Android-x86 的最新測試版 ,這是基於 Android 2.0 (Eclair)的版本,距離上回的 1.6 版釋出已將近兩個月。之所以會拖這麼久,除了這段時間我們都比較忙碌外,最主要原因還是因為從 1.6 到 2.0 的變動相當大,但 Google 釋出的源碼僅是最後的 snapshot,中間沒有任何的修改歷程(changes log)。這造成我們 merge 上的許多困難。許多原本會動的東西都壞掉了,包括滑鼠、Wifi、Ethernet 和 suspend & wakeup 等,幾乎都得重新來過。
雖然經過兩個月的努力,問題仍未完全解決。比較重要的有:
沒有 i915 的 3D 硬體加速
雖然可連上藍牙耳機,但聲音出不來。
錄影功能無法使用。
不過除此之外,在 Android-x86 1.6 版所擁有的功能在這個測試版應該都具備了。
當然這個版本也加入了一些新的特色。 Read more »
關注 Android 開放源碼計劃(AOSP)的朋友應該會注意到,在 Google 的嚴密掌控下,Android 已經離開放源碼社群愈來愈遠。雖然形式上 Android 的確符合開放源碼的定義。但本質上,它是不折不扣的 Google 計劃,而非一個社群的計劃。從幾件事情上可以看出這樣的傾向:
Android 2.0 完全沒有發展歷程(git log / history)。
其實根本沒有 Android 2.0 的源碼。目前 AOSP 上的版本是介於 2.0 到 2.0.1 之間 的一個 “snapshot”。更遑論即將上市的所謂 2.1 版了。
絕大部分社群送上去的 patches 都被忽略。從 eclair 之後似乎僅有五個 patches 被接受而已。
Project roles 頁面被修改,移掉大部分讓社群參與的字眼 (剛好被人抓包,把舊的頁面 diff 呈現在此 )。
Google 的工程師不在 android.git.kernel.org 上工作。
愈來愈多衍生的開放源碼計劃(android-x86, embinux, 0xdroid, rowboat, odroid, …),代表許多社群開發者已受不了 Google 的態度。
誠心的建議,Google 應該捫心自問,當初決定開放源碼的初衷是什麼? 到底要走向開放的市集模式,擁抱社群,還是走回更封閉的教堂模式,關起門來自己搞?
如果決定擁抱社群,便應該回歸開放源碼開發模式的基本精神,「儘早釋出、儘快釋出」,讓更多人有機會檢視 Android 的最新源碼,因為「在眾人面前,所有的錯誤都是淺顯的」(Linus 定律)。同時更應重視社群的力量,儘快的 review 社群所提出的修改建議,絕不可放著幾個月都不理。這樣有心貢獻的人心早涼了! 唯有在對的方向做對的事情,才能讓開放源碼的輪子順利轉動,帶起 Android 開放社群的蓬勃進步。
明天下午有機會應邀到台灣 Google 演講,正好把這些觀點與 Google 的工程師討論討論。投影片已公開在 Google docs 上:
參考:
其實在 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 來繼承。這樣做法有兩大優點: Read more »
自從放出了 Android-x86 kernel 2.6.32 供測試之後,陸續有人反應 repo sync 出問題 。其實當初在整合 2.6.32 時我也遇過這情況,只是後來問題又消失了,就未再理會。不過既然有幾個人同時遇到這現象,可見問題的確存在,值得探究一下。
到 Repo and Gerrit Discussion group 上詢問,得到 repo 作者的回應 ,建議加上 –trace 參數來 debug。我照做,得到的結果是:
Read more »
錄了一段影片,顯示 Android-x86 1.6 在 ASUS Eee PC 901 上經過調整的快速開機效果。約八秒鐘就可以完成啟動。
大致是從調整檔案系統以及 kernel config 檔著手。可從這裡下載我的 config 檔 。細節就不多說了,請自行體會。
我已經將 Corentin Chary 移植的 Android-x86 kernel 2.6.32 上傳至我們的 git server 。想要試用看看的話,在 Android-x86 的 source tree 上:
$ repo sync kernel
From git://git.android-x86.org/kernel/common
* [new branch] android-2.6.32 -> x86/android-2.6.32
Fetching projects: 100% (138/138), done.
Syncing work tree: 100% (137/137), done.
$ cd kernel
$ git checkout -b android-2.6.32 x86/android-2.6.32
HEAD is now at 885c27f... kconfig: add nonint_oldconfig target from Fedora kernel
Switched to branch 'android-2.6.32'
$ cd ..
然後照原來的方法 make 即可。
新版 kernel 的好處就是,許多驅動程式有所更新,也更穩定。特別是 video 和 wifi 的部分。例如原本 2.6.29 的 i915 module 在我的 Eee Top 1602 上一載入就會 crash,而換成 2.6.32 之後就正常了。
說實話,這個站 出現得比我們的 Android-x86 計劃還早,而且先前有很長一段時間沒有更新了。不過,最近這個站又做了大幅度的改版,並加上很多取自本計劃的資料,甚至在下載區還放了我們的 iso 檔(雖然註明了出處)。這是沒關係,但他們還放了一個 Donate 的圖示,但點下去的連結,並非連到本計劃的捐款網頁。這不禁讓人懷疑,這個站的動機不單純!
在此特別澄清,這個網站 androidx86.org (以及 androidx86.com) 與 Android-x86 開放源碼計劃(Android-x86.org)沒有任何關連。
今天晚上有個 Android 的同好聚會 ,是由台灣 Android 中文資源站 主辦,地點在台北市松江路某咖啡店裡。我將會參加,並分享 Android-x86 1.6 的開發成果。現場還會準備幾台 Eee PC 還有觸控功能的 Eee Top,讓你實際體驗 Android 在 x86 平台的魅力。如果你準備了 250MB 以上的隨身碟,我還可以幫你裝上 Android-x86 live USB 版本,讓你帶回家玩。歡迎各位 Android 同好指教。(不過如果你還沒報名,可就來不及啦…)
在釋出 Android-x86 1.6 版 之後,接下來我們的重點工作都擺在 merge Android 2.0 branch,也就是代號為 Eclair 的版本上。
看版號也可以猜到,從 1.x 到 2.0 想必變動相當的大。的確,這讓我們在 merge 上吃足了苦頭。光是想辦法通過編譯,就已經十分困難。部分的修改只好暫時拿掉,日後再想辦法加上。包括在 frameworks/base 的 ethernet、部分 wifi 程式碼,以及電池狀態等。
好不容易通過編譯後,接下來開機起來就遇到問題。先是 mediaserver 會 crash。Yi 追蹤到最後,發覺是 android 的 linker 有問題,在處理 weak symbols 上似乎有瑕疵。但儘管找到了修正的方法,我們仍不明白,為何先前的 1.6 版不會產生同樣問題?
解決了 linker 的問題,在啟動 zygote 時又發覺 preloaded-classes 找不到的問題。所幸這問題比較容易,就照先前的方法,將 PhoneWindow 改為 MidWindow 即可。如此,終於讓我在 virtual box 上見到 Eclair 的第一個畫面。呵呵!
Read more »
由於 Android-x86 正逐漸受到重視,source code 的下載次數也與日俱增。但近來常收到抱怨,從我們的 git server 下載太慢,常常 timeout。這其中有些是誤會,因為並非整個 Android-x86 的 source tree 都放在我們的 git.android-x86.org 上,有大部分的東西仍要連回原本的 android.git.kernel.org 去下載,而慢的其實是那邊。
但有些情況,確實瓶頸是卡在 git.android-x86.org,甚至連 Yi 最近都常常無法 sync 成功。為此,我們決定利用 SourceForge 的 git server 做為我們的 git mirror 站。其實兩個多月前 pofeng 就幫忙在 SourceForge 註冊了同名的 android-x86 計劃 。不過一直尚未利用那邊的資源。但現在是個好機會。
花了點時間,寫了一個 script,可以自動根據 manifest.xml 中指定的 branch 來 upload 到 SourceForge 的 git server 上。目前 mirror 已完成,專為 SourceForge mirror 改的 manifest.xml 也已上傳。下載方式是:
$ repo init -u git://android-x86.git.sf.net/gitroot/android-x86/manifest.git -b donut-x86
$ repo sync
其實目前 git.android-x86.org 的流量並不大,我從台灣 sync 速度還是很快,可達每秒 2MB 以上。但據說 TANet 對國外的頻寬有限制,可能是導致國外連網效率不佳的原因。因此在歐美地區的用戶建議多利用 SourceForge 的 mirror。
至於 SourceForge mirror 多久與 git.android-x86.org 同步一次? 其實目前還是手動,有必要時才做。若運作穩定後應該會改由 script 來每天執行。此外,如果有人願捐贈機器與頻寬做為 mirror 網站,也請與我聯絡。