在 android 的 Get source 頁面有編譯 ARM 版本的方式。關於 android on x86,最重要的參考資料則是 這個討論串,利用 google 也可以找到更詳細的步驟。前面提到的 cupcake merge 同時造成了 opencore 的編譯問題,解法一樣要去看最開頭提到的 merge 到 master 討論串。不過我在 Debian testing (AMD64) 上做的時候,還需要先找到 build/core/combo/linux-x86.mk 的這兩行
$(combo_target)GLOBAL_CFLAGS := $($(combo_target)GLOBAL_CFLAGS) -m32
$(combo_target)GLOBAL_LDFLAGS := $($(combo_target)GLOBAL_LDFLAGS) -m32
把 -m32 參數拿掉,然後再多安裝 {gcc,g++}-multilib 套件。前者是說不要把 host binary 預設編成 32bit,後者則是讓某些在 Android.mk 又加上 -m32 的模組可以編譯成功。
一開始我是用 VirtualBox 2.1.4,不過因為 UI 起不來,想要用 adb 來除錯,所以後來改用 QEMU 0.10.0 (x86 版),並利用它的 -redir 功能讓 host 可以 adb 進去模擬出來的機器。給 QEMU 用的 kernel 有幾件事要注意一下:為方便起見,最好把
CONFIG_NE2K_PCI=y
CONFIG_FB_VESA=y
CONFIG_FRAMEBUFFER_CONSOLE=y
直接編進 kernel,並設定 vga=xxx。如果 kernel 跑到一半停住,並且在倒數幾行出現
MP-BIOS bug: 8254 timer not connected to IO-APIC
訊息,可以在 cmdline 加上 noapic 參數解決。
前面一直提到的 UI 問題可以參考這個 dirty patch 做修改。這樣應該就完成了。
4 comments:
你好,请问你能不能把在qemu上运行X86 android的比较详细的步骤张贴出来?我编译的eee_701 x86 android总是看不到图形界面。谢谢!
你可以利用 adb logcat 看能不能發現 UI 起不來的原因。通常我會
$ qemu -hda disk.img -redir tcp:5555::5555
啟動 qemu。然後
$ adb kill-server
$ adb logcat 或 adb shell
來看 log。有問題歡迎問我,更詳細的步驟可能要請你 google 找找看。
這篇文章的 patch 在這個 commit 之後已經不需要了。
谢谢回答。
我目前遇到的问题是能够看到android界面,但是颜色不对,好像是16色的,另外,鼠标点击没有任何响应,期待您的答复。
问题已经解决,是qemu不支持kernel的vga=xxx的属性,我是想用qemu直接load内核。
Post a Comment