免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2567 | 回复: 0
打印 上一主题 下一主题

ubuntu10.10下Android 内核源代码交叉编译 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 09:44 |只看该作者 |倒序浏览
... 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 文件

下载完AndroidLinux内核源码,你会发现在/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 这个东西确实不怎么好用,还是想念WindowsTortoiseSVN

当下载完,你就能在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

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP