去google大神搜尋android kernel馬上可以找到,要下載核心有兩種方式,git and repo。
Git 版本控制系統,跟SVN的架構系統看網路文章寫是差很多,不過就是控管程式版本的輔助程式
下載 android kernel:
$mkdir android
$cd android
$git clone git://android.git.kernel.org/[project path]
EX: git clone git://android.git.kernel.org/kernel/common.git
P.s 如果沒有git可以透過
$sudo apt-get install git-core
進行下載安裝
基本上網路如果延遲時間正常的話,基本上面的指令都能順利下載,有時在一些公司網域會擋Git下載(錯誤顯示如圖),這時可以透過修改過的repo透過http方式進行下載。
android.git.kernel.org[0: 199.6.1.176]: errno=Connection refused
android.git.kernel.org[0: 204.152.191.45]: errno=Connection refused
android.git.kernel.org[0: 130.239.17.12]: errno=Connection refused
android.git.kernel.org[0: 149.20.20.141]: errno=Connection refused
fatal: unable to connect a socket (Connection refused)
透過repo下載:
$curl http://android.git.kernel.org/repo > repo
$chmod 755 repo
$sudo mv repo /bin
第一個要修改的是repo 本身檔案,將下列git部份改成http
REPO_URL='git://android.git.kernel.org/tools/repo.git'
become to
REPO_URL='http://android.git.kernel.org/tools/repo.git'
進行初始 manifest
$ repo init -u git://android.git.kernel.org/platform/manifest.git
結束後修改./.repo/manifest.xml 找到
fetch="git://android.git.kernel.org/"
become to
fetch="http://android.git.kernel.org/"
P.s 在執行repo時如果是ubuntu 10.10版本的話,有可能會有libreadline.so.4找不到的現象,如下
ImportError: libreadline.so.4: cannot open shared object file: No such file or directory
這時你只需要安裝libreadline5
$sudo apt-get install libreadline5
在給他連結起來即可
$sudo ln -s /lib/libreadline.so.5 /lib/libreadline.so.4
都完成後可以透過以下指令下載android kernel:
$repo sync
這時應該不會有擋git的問題發生了。
make menuconfig must require below library
$sudo apt-get install libncurses5-dev
[下載其他版本android]
透過上述的方法可以下載最新的android版本,目前應該為2.3版(2011.2月),如果要下載其他版本,可透過branch的方式,如下指令:
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair
cupcake -> 2.0
eclair -> 2.1
froyo -> 2.2
透過Branch的方式,雖然可以透過版本號下載,但之後在make的時候會出現/build/core/main.mk 最後未加上endif的錯誤。所以建議打上版本名稱即可。
init完了以後
$repo sync
下載之前init 的branch,下載完成需要一些時間。完成後,在make之前,因為Android需要java 1.5版本才能編譯,所以可以透過更改build/core/main.mk java 與 javac 檢查版本的地方,改成
- java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5\. "$$]')
+java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.[56]\. "$$]')
這樣就可以順利make了。
下面為make 的初始訊息:
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.1-update1
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=ECLAIR
============================================
編譯時遇到的錯誤
'out/host/linux-x86/obj/EXECUTABLES/vm-tests_intermediates/tests/data' does not exist
所以就依照目錄建立即可pass.原則上設定無誤,即可編譯完成,有時候會出現JAVA 在編譯時的錯誤通常都是JAVA版本不一致,或不相容所導致,基本上透過上面更改makefile的方式,可以不理會java的版本,所以安裝過後的JAVA是新版的也無妨,如果你java有很多版本,可以透過以下指令還更改java目前使用的版本:
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
$ sudo update-alternatives --config javah
基本上設定無誤,編易會成功的,只是時間的問題而已,我用Acer AO752 11寸小筆電,大概要花4~5個小時左右。
輸出的檔案在
android/out/target/product/generic/ 底下
system.img, ramdisk.img, userdata.img, 基本上 ramdisk必須透過mkimage方式讓u-boot帶起來,視平台而異
rebuild android 2.2
make -j?
/usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: 沒有此一檔案或目錄
solution:
apt-get install libc6-dev-i386
host C: libneo_util <= external/clearsilver/util/neo_files.c
host C++: libhost <= build/libs/host/pseudolocalize.cpp
/bin/bash: g++:命令找不到
sudo
sudo apt-get install gcc-4.3
sudo apt-get install g++-4.3
joe@joe-ubuntu:/usr/bin$ sudo rm -rf gcc
joe@joe-ubuntu:/usr/bin$ sudo ln -s gcc-4.3 gcc
joe@joe-ubuntu:/usr/bin$ sudo rm -rf g++
joe@joe-ubuntu:/usr/bin$ sudo ln -s g++-4.3 g++
/bin/bash: flex:命令找不到
sudo apt-get install flex
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev java-common unixodbc
andorid 2.2 在ubuntu10.10需要先安裝一大堆東西才能正常build 成功
沒有留言:
張貼留言