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