亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1943 | 回復(fù): 0
打印 上一主題 下一主題

android內(nèi)核編譯方法 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-01-19 20:19 |只看該作者 |倒序?yàn)g覽
北京理工大學(xué)  20981  陳罡
google的android很多人都希望在gphone沒有出來之前,把它移植到相關(guān)的硬件平臺上去。網(wǎng)上看了不少文章,總的感覺是:在這一步走得最遠(yuǎn)的就是openmoko的一個(gè)大師級別的黑客Ben “Benno” Leslie,他曾經(jīng)試圖把目前google發(fā)布的android移植到openmoko的平臺上去,并且做了10000多行代碼的嘗試。最終雖然由于open moko采用比較老的arm 920t的內(nèi)核,而android采用較新的arm926-ej-s內(nèi)核,而且使用了新的內(nèi)核的一些新特性,導(dǎo)致移植失敗,但是anyway,他已經(jīng)做了足夠多的前期工作了,爾后的宣布成功移植android到real target板子上的人,大多是在他提供的patch的基礎(chǔ)上繼續(xù)走下去做出來的。
下面是一些有用的參考,希望有助于對此感興趣的開發(fā)人員:
(1)Ben “Benno” Leslie的關(guān)于andorid移植到openmoko的個(gè)人博客地址:
http://benno.id.au/blog/
(2)早期宣布成功移植android到zauraus-sl-c760的詳細(xì)方法描述的鏈接:
http://euedge.com/blog/2007/12/06/google-android-runs-on-sharp-zaurus-sl-c760/
(3)后續(xù)的根據(jù)上述先行者們的工作,成功移植android到zauraus-c3000的方法:
http://androidzaurus.seesaa.net/article/74237419.html
(4)本文是參考下面的wiki,接合個(gè)人的實(shí)踐寫出來的,對原文的作者表示一下感謝:
http://wiki.droiddocs.net/Compilation_of_Android_kernel
很羨慕這些人阿!
不過很可惜,偶的開發(fā)板是s3c2410的,恰好是arm920t的核心的。。。估計(jì)移植上去戲不是很大,需要重寫很多代碼,畢竟偶跟benno相差得太遠(yuǎn)太遠(yuǎn)了,同樣是開發(fā)人員,差距咋就那么大呢?!
(畢竟google僅僅開放了kernel的源代碼而已,他們需要開放的東西還很多。)
在這里把關(guān)于android內(nèi)核編譯方法簡單寫一下,或許對希望移植內(nèi)核的朋友能有些幫助:
(看了Benno的移植過程以后,覺得即使你能夠編譯google開放出來的內(nèi)核,意義也不是特別大,因?yàn)檫@個(gè)內(nèi)核中加入了為了支持qemu的很多東西,而這些代碼似乎對希望移植到真機(jī)上的朋友來說,沒有任何意義,反而是一種阻礙)。
1)從CodeSourcery上面載用于交叉編譯的工具鏈:
http://www.codesourcery.com/gnu_toolchains/arm/download.html
我在這里選擇的是->ARM GNU/Linux,以及IA32-GNU/Linux。有文章說應(yīng)該選擇ARM EABI,我不知道了,沒有測試過,反正我選擇的這個(gè)編譯的內(nèi)核也是可以跑起來的:P
2)下載google的android linux的內(nèi)核源代碼:
http://code.google.com/p/android/downloads/list
主要是這個(gè)文件:linux-2.6.23-android-m3-rc20.tar.gz
3)把下載到的內(nèi)核和交叉編譯工具解壓縮,并最好把工具鏈的路徑放到PATH里面去
解壓縮內(nèi)核:
$ mkdir -p android
$ cd android
$ tar xzvf ../linux-2.6.23-android-m3-rc20.tar.gz
會解壓出來一個(gè)叫做kernel的目錄,google的android的linux內(nèi)核就在里面了。
解壓縮交叉編譯工具鏈:
$ cd /usr/local/
$ sudo cp ~/arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 .
$ sudo tar zxvf arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
此時(shí)會解壓出來一個(gè)叫做arm2007q3的一個(gè)目錄,這里面就是工具鏈了。
設(shè)置一下環(huán)境變量:
$ export PATH=$PATH:/usr/local/arm2007q3/bin
好了,到此,基本的內(nèi)核編譯環(huán)境就搞好了。
4)現(xiàn)在是要得到android的內(nèi)核編譯參數(shù)的配置文件的時(shí)候了,該文件需要從已經(jīng)安裝好的android的模擬器
中得到才行。所以安裝android的sdk也是必須的,這一步不太明白的朋友可以參考我以前發(fā)的android
命令行體驗(yàn)的文章。
首先啟動(dòng)android模擬器,然后通過adb得到模擬器中提供的內(nèi)核配置文件:
$emulator &
$adb pull /proc/config.gz .
這時(shí)候adb工具會連接模擬器,并從它里面下載一個(gè)叫做config.gz的文件到你的當(dāng)前目錄下。
把它拷貝到你的kernel目錄:
$cd ~/android/kernel
$cp ~/config.gz .
解壓縮該文件,并重命名為.config,這一步做了就可以跳過make menuconfig之類的內(nèi)核參數(shù)設(shè)置
動(dòng)作了。
$gunzip config.gz
$mv config .config
5)修改kernel目錄中的Makefile文件,用emacs或vi打開該Makefile
修改CROSS_COMPILE變量為:
CROSS_COMPILE=arm-none-linux-gnueabi-
這個(gè)就是剛剛的下載和解壓的工具鏈的前綴了,旨在告訴make,在編譯的時(shí)候要使用我們的工具鏈。
在Makefile中注釋掉LDFLAGS_BUILD_ID這個(gè)變量:
例如將如下定義:
LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
                              $(call ld-option, -Wl$(comma)--build-id,))
修改為:
LDFLAGS_BUILD_ID=
#LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
#                              $(call ld-option, -Wl$(comma)--build-id,))
把它注釋掉的原因是目前android的內(nèi)核還不支持這個(gè)選項(xiàng)。--build-id選項(xiàng),主要是用于在生成的elf
可執(zhí)行文件中加入一個(gè)內(nèi)置的id,這樣在core dump,或者debuginfo的時(shí)候就可以很快定位這個(gè)模塊是
哪次build的時(shí)候弄出來的。這樣就可以避免,每次都把整個(gè)文件做一遍效驗(yàn),然后才能得到該文件的是由
哪次build產(chǎn)生的。對于內(nèi)核開發(fā)者來說,這是很不錯(cuò)的想法,可以節(jié)約定位模塊版本和其影響的時(shí)間。
目前,該功能還出于early stage的狀態(tài),未來的android或許會支持,但至少目前的版本是不支持的。
所以,用#注釋掉即可,或者害怕不保險(xiǎn)的話,就加入LDFLAGS_BUILD_ID=空,這樣即使編譯的時(shí)候用了,
也只是一個(gè)空格而已。
對這個(gè)--build-id選項(xiàng)感興趣的朋友,可以訪問下面的網(wǎng)址,它的作者已經(jīng)解釋得非常明白了:
http://fedoraproject.org/wiki/Releases/FeatureBuildId
6)終于可以開始make了。
$ make
不出意外的話,應(yīng)該整個(gè)過程都會非常順利,最終會在~/android/kernel/arch/arm/boot目錄下面
生成一個(gè)zImage,這個(gè)就是我們要的內(nèi)核映像了。
7)激動(dòng)人心的時(shí)刻終于到來了,我們可以測試一下剛剛編譯出來的內(nèi)核可以不可以用了。
$emulator -kernel ~/android/kernel/arch/arm/boot/zImage
當(dāng)看到red eye在晃來晃去,最終顯示出來android的界面的時(shí)候,一顆懸著的心總算放下了。
android的proc里面的version如下:
# cat version
Linux version 2.6.23 (wayne@wayne) (gcc version 4.2.1 (CodeSourcery Sourcery G++ Lite 2007q3-51)) #1 Sat Jan 19 18:11:44 HKT 2008
從這里就可以看出,這是自己編譯的kernel,而不是人家sdk里面自帶的kernel-qemu了。
android自帶的sdk里面的kernel映像的version應(yīng)該是:
# cat version
Linux version 2.6.23-gcc3bc3b4 (arve@arvelnx.corp.google.com) (gcc version 4.2.1) #3 Tue Oct 30 16:28:18 PDT 2007
hoho, 這里不會把這個(gè)開發(fā)者的email暴露出來了吧。。。
android的cpuinfo如下:
Processor       : ARM926EJ-S rev 5 (v5l)
BogoMIPS        : 313.75
Features        : swp half thumb fastmult vfp edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 5
Cache type      : write-through
Cache clean     : not required
Cache lockdown  : not supported
Cache format    : Harvard
I size          : 4096
I assoc         : 4
I line length   : 32
I sets          : 32
D size          : 65536
D assoc         : 4
D line length   : 32
D sets          : 512
Hardware        : Goldfish
Revision        : 0000
Serial          : 0000000000000000
不過挺奇怪的,google sdk自帶的內(nèi)核映像的BogoMIPS是3.18的,偶編譯出來的是3.13的。
為了方便沒有安裝sdk的朋友也可以編譯內(nèi)核,我把config.gz貼上來:

       
        文件:config.gz
        大小:5KB
        下載:
下載
       


本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u/26691/showart_468007.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP