Android可以移植到現(xiàn)有硬件平臺(tái)嗎
Android可以移植到現(xiàn)有硬件平臺(tái)嗎
Android是否能夠移植到現(xiàn)有硬件平臺(tái)呢?下面將由學(xué)習(xí)啦小編帶大家來(lái)解答這個(gè)疑問吧,希望對(duì)大家有所收獲!
Android的意義不僅僅是手機(jī)平臺(tái)那么簡(jiǎn)單,通過對(duì)其框架,結(jié)構(gòu)的分析,我們可以將Android應(yīng)用到任何移動(dòng)硬件平臺(tái)上,甚至自己研發(fā)出新的更好的框架。連Google自己也說(shuō),我們的目標(biāo)是,讓我們發(fā)布的強(qiáng)大的平臺(tái)能夠應(yīng)用到數(shù)千種不同的移動(dòng)設(shè)備上。這是可以理解的, Google就是這樣,它的每個(gè)策略都比常理要更進(jìn)一步。不推出專屬的硬件,而是一個(gè)通用的移動(dòng)設(shè)備的軟件平臺(tái),使Android可以更方便的快速占領(lǐng)手機(jī)操作系統(tǒng)的市場(chǎng),而最終可以達(dá)到的份額也會(huì)非常的可觀。
Android是否能夠移植到現(xiàn)有硬件平臺(tái)
當(dāng)然,這都是后話了,group上這幾天的焦點(diǎn)話題就是,我們?nèi)绾巫孉ndroid在現(xiàn)有的硬件平臺(tái)上跑起來(lái),而不是僅僅用模擬器來(lái)模擬它?這個(gè)命題估計(jì)對(duì)所有hacker都有巨大的吸引力,如果Android能在自己的手機(jī)平臺(tái)上跑起來(lái),所有的開發(fā),就突然變得有意義了。我不是說(shuō)目前的開發(fā)沒有意義,畢竟Google N位數(shù)的獎(jiǎng)金在那里擺著的,呵呵,不過對(duì)于上層開發(fā)者來(lái)說(shuō),最終目的還是應(yīng)用的實(shí)際性和流行性,對(duì)吧?應(yīng)用有沒有實(shí)際價(jià)值,實(shí)際硬件平臺(tái)上跑一跑就知道了。
從Android現(xiàn)有的開源情況看,所有的hacking已經(jīng)有一個(gè)比較明確的指導(dǎo)方向了,就是依靠Benno最先放出的方法來(lái)hack各種 image并分析一些東西,從我之前的兩篇文章也可以看出大致步驟。我們現(xiàn)在能夠得到的東西,包括ramdisk image,system image以及data image,當(dāng)然還有open source的Linux kernel。所以,所有的工作都應(yīng)該從這幾個(gè)東西入手。
先看看kernel部分。由于Android基于Linux,因此所有的目標(biāo)移植平臺(tái)都應(yīng)該允許運(yùn)行Linux,對(duì)于嘗試階段的我們來(lái)說(shuō),最好是找一款默認(rèn)就是采用Linux操作系統(tǒng)并提供完善的develop environment的設(shè)備,這樣,我們只需要找出Google提供的Linux 2.6.23 kernel和現(xiàn)有的kernel有什么不同,把所有需要的修改做成patch,patch到現(xiàn)有系統(tǒng)上,就有可能成功移植整個(gè)Android,無(wú)須重新編譯Google的Linux 2.6.23 kernel,然后絞盡腦汁想怎么port到某個(gè)設(shè)備上。先下載一個(gè)standard Linux 2.6.23 kernel,然后使用命令
diff -ruN linux-2.6.23/ Google-linux-2.6.23/ >lk.patch
打開lk.patch,God,有3萬(wàn)多行。仔細(xì)分析一下,大部分都是和Qemu以及goldfish有關(guān)的。我們要做的事情,是讓Android 在真實(shí)平臺(tái)上跑起來(lái),所以不管是用于虛擬處理器的Qemu還是SDK模擬的硬件平臺(tái)Goldfish,都不是我們所需要的,要在patch里面去掉他們,因?yàn)槲覀兿M\(yùn)行在真實(shí)的硬件平臺(tái)上。恩,說(shuō)實(shí)話,是一個(gè)很麻煩的事情,你要分析又30000多行的patch阿……不過里面有一超長(zhǎng)段是關(guān)于yaffs 的補(bǔ)丁,如果你目標(biāo)平臺(tái)所帶的內(nèi)核已經(jīng)支持yaffs了,就沒必要要了。這是我修改后的patch ,放在googlepages上的,要是哪天又被和諧了我也沒有辦法。
下一步,就是讓打了Android patch的內(nèi)核運(yùn)行在你的目標(biāo)硬件上,具體步驟是和不用硬件的開發(fā)環(huán)境相聯(lián)系的。當(dāng)然,還需要導(dǎo)入Android的rootfs以及filesystem。將他們用mkfs.jffs2構(gòu)建成jffs文件系統(tǒng)即可。
需要注意的是,這個(gè)合適的硬件平臺(tái)是需要挑選的,看看Android模擬器里面的信息:
# cat /proc/cpuinfo
Processor : ARM926EJ-S rev 5 (v5l)
BogoMIPS : 331.77
Features : swp half thumb fastmult vfp edsp java
Google默認(rèn)的是ARM926EJ-S核心。這就在一定程度上限制了我們能夠port的平臺(tái)選擇,Benno曾經(jīng)試驗(yàn)在Openmoko上移植Android ,最后失敗了,原因就是ARM926EJ-S采用的是ARMv5TEJ指令集,而Openmoko的ARM920T采用的是ARMv4T指令集。所以,不僅僅是需要能運(yùn)行兼容EABI的Linux的設(shè)備那么簡(jiǎn)單。