Porting custom rom to Acer Stream

Posted by TJ Wei on 星期三, 9月 21, 2011 with 17 comments
No download available yet.
以前剛接觸 Linux 時,興沖沖的重新編譯完 kernel,往往會發生開機只出現 Li 兩個字的慘劇 (原來應該是顯示 Lilo 後跑出一堆開機訊息,但是連 Lilo 四個字母都跑不完,機器就停在那裡了。)
由於 Acer Stream 都沒人弄 rom,只好自己弄。

一開始傻傻的編譯了一份 AOSP 的 system.img,想說至少可以開機吧,沒想到頗類似當年的 Li。所有程式無法執行,gdbserver 是跑起來了,只是跑起來才發現我是用 adb shell 進去而不是 ssh,網路根本沒跑起來。
還好現在網路發達,大部分的問題網路上都找得到答案。
當然找答案也是要有點方向。

一開始經由官方版本和AOSP的 linker/bin/lib 等等的組合,外加readelf 之後發現官方版本和自己編出的 linker 的 entry point 不同。 大致上猜出是 shared library 放置的記憶體位置問題。

搜尋了一下,發現這是 android prelink 以及 VMSPLIT_2G 的問題。所以這方面把 prelink map 平移一下即可。另外我也 complie 了一份 VMSPLIT_2G=n 的 kernel。
再 來就是 RGBA8888 的問題。 Stream 的 kernel 回報不正確的解析度,而且固定為 32bit 色彩 RGBA8888。32bit 用 #define 寫死了,無法 ioctl 設定。因此把這些 #define 改了,重編成 RGB565 的格式。
最後就是 Acer 的 kernel 大概因為用 zip 壓檔的緣故,很多檔案不見了。Linux 的 kernel 中有些檔案,檔名僅僅只有大小寫不同,但卻是兩個不同的檔。碰到這種除了大小寫外完全相同的檔名,Acer 用的 zip 就會只挑其中一個放入 zip 檔中。所以只好從其他地方的 source 補回來。

這樣之後,只要選對 kernel,很多 2.2 的 custom rom 都能開機到 GUI。我試過了
AOSP (full_passion, 改 prelink map),
liquid metal 官方 2.2
liquid miui 
malez recovery (正常顯示)

基本上都沒怎麼改就能跑 GUI,不過當然硬體也都不太靈。

也試了 liquid metal 的 2.3.3 leak,不過不成功。
大概 kernel 至少要弄到 2.6.34 才行。

Categories: