2012年8月10日 星期五

Firefox OS on HTC Sensation

目前放出來的Firefox OS (https://github.com/mozilla-b2g)好像也就只有Samsung的手機....一來不想用Samsung的手機來玩, 二來用emulator沒fu, 再來就是也好久沒玩玩這種硬東西, 就打算拿手邊的Sensation來自己PO, 好久沒玩這種東西有點生疏, 繞了很多冤枉路, 最後發現, 其實也不難

Firefox OS是基於Android 4.0 ICS, 所以照理說有支援ICS的裝置應該是沒問題才對, 所以就打算從CM9 (Cyanogenmod 9)的source來po, 至少它已經把ICS這段做完了

以下是我抓來用的source:
For HTC Sensation (使用Qualcomm msm8660):
https://github.com/CyanogenMod/android_device_htc_pyramid
https://github.com/CyanogenMod/android_device_htc_msm8660-common
For Qualcomm hardware:
https://github.com/CyanogenMod/android_hardware_qcom_display
https://github.com/CyanogenMod/android_hardware_qcom_gps
https://github.com/CyanogenMod/android_hardware_qcom_media

還有改了一些東西, 像是"frameworks/base/libs/ui/" 裡的東西, 不過實際改了哪些, 還沒整理(也很懶), 就有點忘了, 反正就讓這些build過, 然後讓"b2g"可以成功的跑起來, 差不多這樣就夠了

一開始把system.img燒進去後, 發現不能正常開機, adb一直說找不到/system/bin/sh, 我裝了4ex recovery去看, 居然無法mount system partition, 所以我就改變策略, 想說做成update package來安裝, 但build update package時發現, b2g做了些手腳, 像是把java導到一個fake java去, 使得我沒辦法順利build 出update package, 所以再動了些手腳, 把東西做出來, 然後用4ex recovery format system partition之後從SD card裝update package (這個我動過手腳重包過, update script裡面會刷full的system image), 但重開機後...黑屏.....看log研究一下發現, 我一開始只放了device目錄裡面的東西, hardware目錄裡面的東西都沒放, 所以build出的東西缺少了qualcomm的lib, 所以又去抓來重build, 但後來黑屏還是沒解掉.....但卻發現一點...之前燒進去的system image之所以有問題似乎是Sensation的hboot似乎不吃sparse image, 所以最後用simg2img (build好的host binary可以找到) 轉成一般的image改用zip燒, 所以就又放棄update package這條路 

接下來是我這整個過程中我幹的最蠢的事, 開機可以成功, 但卻一直是黑屏, 一直搞不懂到底哪出了問題, 還抓了kernel source, 一路從底下看到b2g....framebuffer也dump出來看, 一切都沒問題呀!今天, 終於發現, 我少做了最後一個步驟!

我忘了install Gaia了(以下步驟):
cd B2G/gaia
GAIA_DOMAIN=foo.org make install-gaia
我是怎發現的?因為我後來自己build emulator...也是黑屏呀...想說到底哪不對, 連emulator都打算去trace了....後來查了一下才發現, 我還真的少做這步驟呀....浪費了好幾天.... orz

反正成功了.... update package那條路搞不好也是通的, 其實這樣一來應該不用做full image, 做一包來patch應該也ok, 搞不好就只需要改init.rc跟放/system/b2g/的東西再install gaia就好了....不過也懶得試了....之後再說吧.....