... 7环境:
Ubuntu 10.10
Vmware 7.0.1
build-227600
一、配置git
安装各种包
$
sudo aptitude install git-core gnupg flex bison gperf libsdl-dev libesd0-dev
libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
安装Repo
$
curl http://Android.git.kernel.org/repo > ~/bin/repo ;下载repo
$ cp repo
/bin/ ;复制到/bin下
$ chmod a+x
/bin/repo ;添加可执行权限
二、下载android linux kernel
2.1 下载
android linux kernel
git clone
git://android.git.kernel.org/kernel/common.git
2.2 下载
config 文件
下载完Android的Linux内核源码,你会发现在/arch/arm/configs/下没有goldfish_defconfig这个文件,我们需要check_out
gold_fish版本(模拟器的硬件配置就是Gold_Fish的)
$ cd ~/kernel_common
$ git branch -a
$ *android-2.6.36
remotes/origin/HEAD -> origin/android-2.6.36
remotes/origin/android-2.6.35
remotes/origin/android-2.6.36
remotes/origin/archive/android-2.6.25
remotes/origin/archive/android-2.6.27
remotes/origin/archive/android-2.6.29
remotes/origin/archive/android-2.6.32
remotes/origin/archive/android-gldfish-2.6.29
remotes/origin/archive/android-goldfish-2.6.27
//以上显示是目前看到的,将来的某个时候可以就有点不同了,甚至老版本的Branch 名字也会被修改
//故要特别注意
$ git checkout
remotes/origin/archive/android-gldfish-2.6.29
//这个过程就快多了,等待下载完数据
//git 这个东西确实不怎么好用,还是想念Windows上TortoiseSVN
当下载完,你就能在kernel-common/arch/arm/configs/下看到goldfish_defconfig这个文件
三、下载交叉编译工具链
Android的默认硬件处理器是ARM的,因此我们需要在自己的host机器上构建交叉编译环境。来到CodeSourcery,(http://www.codesourcery.com/gnu_toolchains/arm
/download.html),
点击
GNU/Linux Sourcery G++ Lite 2010.09-50
All versions...
点击
Sourcery G++ Lite
2008q3-72
点击
Advanced Packages
IA32 GNU/Linux TAR
下载arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2。
解压到一目录下,如 ~/soft,并加入环境变量中
# vi ~/.bashrc
ARM_TOOLCHAIN=~/soft/arm-2008q3/bin/
export PATH=$PATH:$ARM_TOOLCHAIN;
保存,并source
~/.bashrc
[转]http://blog.csdn.net/HKjinzhao/archive/2009/03/19/4003371.aspx
四、编译并运行
4.0 修改了Makefile之后再git checkout 会出现以下错误
root@ubuntu:~/kernel/common#
git checkout remotes/origin/archive/android-gldfish-2.6.29
error: You have local
changes to 'Makefile'; cannot switch branches.
这时需要把Makefile改到最初状态
4.1 修改
~/kernel/common目录下的Makefile文件
修改之前最好备份下这个文件,因为如果你修改了这个文件 用git获取新版本的时候
会提示Makefile文件被修改
$ vi Makefile
ARCH ?= arm //制定CPU的架构为ARM
CROSS_COMPILE ?= arm-none-linux-gnueabi- //arm编译工具前缀
$ make
goldfish_defconfig
$ make -j2 //现在的机器都是双核的,这样代码编译就快多了
编译最后两行信息:
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
4.2 安装android
sdk
sdk 不是非安装不可,可以直接使用 android源码目录下的sdk,在目录./out/host/linux-x86/bin下,不过这个目录下的emulator非常慢,启动起来之后会花屏,所以还是装了android sdk (解压,在PATH中添加路径)。
4.2.1 创建avd
1.1版本的emulator在设置好环境变量后,直接在命令行中输入 emulator就可以启动了,但是1.5版本中加了个所谓的AVD(Android Virtual Device),AVD就相当于是一个模拟器的,不过你可以利用AVD创建基于不同版本的模拟器,然后使用emulator-avd avdName命令启动不同的模拟器,下面就介绍如何创建AVD:
查看当前支持版本(在列出的版本中我们需要记住id值,这个值在第2步中使用):
android list targets
id: 2 or
"android-10"
Name: Android 2.3.3
Type: Platform
API level: 10
Revision: 1
Skins: WVGA800 (default), WQVGA432,
WVGA854, WQVGA400, QVGA, HVGA
创建AVD(最后的2表示创建1.5版本的avd):
android create avd –n
avdName –t 2
./android create avd
-n ad10 -t 3
查看是否创建成功(如果成功会显示刚才我们创建的avd信息):
android list avd
$ ./android list avd
Available Android
Virtual Devices:
Name: aosp_avd
Path: /root/.android/avd/aosp_avd.avd
Target: Android AOSP (Preview) (API level
AOSP)
Skin: WVGA800
---------
Name: ad10
Path: /root/.android/avd/ad10.avd
Target: Android 2.3.3 (API level 10)
Skin: WVGA800
4.启动模拟器:
./emulator -avd ad10
-kernel /root/kernel/common/arch/arm/boot/zImage -scale 0.8
五、 查看信息
root@ubuntu:/home/toltech/new_source/out/host/linux-x86/bin#
./adb shell
# cat version
version: No such file
or directory
# cd /pr
cd: can't cd to /pr
# cd /proc
# cat version
Linux version 2.6.29-gb0d93fb-dirty
(root@ubuntu) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) ) #1 Fri Mar 25
13:55:18 CST 2011
# cat version
Linux version 2.6.29-gb0d93fb-dirty
(root@ubuntu) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) ) #1 Fri Mar 25
13:55:18 CST 2011
# cat cpuinfo
Processor : ARM926EJ-S rev 5 (v5l)
BogoMIPS : 174.89
Features : swp half thumb fastmult vfp edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 5
Hardware : Goldfish
Revision : 0000
Serial : 0000000000000000
#
六、 遇到的问题
6.1
android list avd 为空的处理情况
解决方法:
./build/envsetup.sh
Run tools/android to
retrieve targets. It'll load up a gui interface, under settings check the box
that says force https to be fetched using http. Then go to Available packages
and select the version of Android you want. The targets are not downloaded by
default in the latest sdk release.
At least that's what
you get on windows, I don't have a linux machine available at the moment but
the tools/android tool was created to manage targets and avds.
[转]http://stackoverflow.com/questions/1671462/android-can-not-find-a-target
在
tools/android目录下
$ cd tools/android
$ ./android
如果成功的话,则会弹出一个gui 界面,选择install packages 按照提示下载安装
6.2.1
./android 不成功,提示没有环境变量
root@ubuntu:/home/toltech/new_source/out/host/linux-x86/bin#
./android
SWT folder
'/home/toltech/new_source/out/host/linux-x86/framework/x86' does not exist.
Please export
ANDROID_SWT to point to the folder containing swt.jar for your platform.
root@ubuntu:/home/toltech/new_source/out/host/linux-x86/bin#
echo "ANDROID_SWT"
root@ubuntu:/home/toltech/new_source#
find . -name "swt.jar"
./prebuilt/darwin-x86/swt/swt.jar
./prebuilt/linux-x86_64/swt/swt.jar
./prebuilt/windows-x86_64/swt/swt.jar
./prebuilt/darwin-x86_64/swt/swt.jar
./prebuilt/windows/swt/swt.jar
./prebuilt/linux-x86/swt/swt.jar
./out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86/tools/lib/x86_64/swt.jar
./out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86/tools/lib/x86/swt.jar
./out/host/linux-x86/framework/swt.jar
添加环境变量
export
ANDROID_SWT=/home/toltech/new_source/out/host/linux-x86/framework/
[转]http://hi.baidu.com/thinke365/blog/item/202733aef773d6f1fbed50c9.html
6.2.2
./android 不成功,提示没有目录
root@ubuntu:/home/toltech/new_source/out/host/linux-x86/bin#
./android
Starting Android SDK
and AVD Manager
Error: Error parsing
the sdk.
Error:
/home/toltech/new_source/out/host/linux-x86/platforms is missing.
Error: Unable to parse
SDK content.
但在out/host/linux-x86/sdk/android-sdk_eng.lawrencekang_linux-x86/tools目录下 ./android 则可以
原来在out/host/linux-x86/sdk/android-sdk_eng.lawrencekang_linux-x86/下面有platforms目录,可见android会查找
上一级目录下的platforms目录
将platforms
和add-ons copy到
out/host/linux-x86下面
然后运行
android就可以了
新建两个文件夹也可以
root@ubuntu:/home/toltech/new_source/out/host/linux-x86/bin#
./android
Starting Android SDK
and AVD Manager
Error: Error parsing
the sdk.
Error:
/home/toltech/new_source/out/host/linux-x86/platforms is missing.
Error: Unable to parse
SDK content.
root@ubuntu:/home/toltech/new_source/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86#
cp -arf ./platforms /home/toltech/new_source/out/host/linux-x86/
root@ubuntu:/home/toltech/new_source/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86#
cp -arf ./add-ons/ /home/toltech/new_source/out/host/linux-x86/
[转]http://blog.csdn.net/livingpark/archive/2010/12/28/6102769.aspx
七、参考:
http://blog.csdn.net/mayqlzu/archive/2010/08/11/5804771.aspx
http://hi.baidu.com/thinke365/blog/item/202733aef773d6f1fbed50c9.html
http://rayleung.javaeye.com/blog/400918
http://stackoverflow.com/questions/1671462/android-can-not-find-a-target |