下载并编译Android kernel的指定版本源代码

来源:互联网 发布:不会编程能学数据库吗 编辑:程序博客网 时间:2024/05/01 08:42

下面以下载Android内核源码android-2.6.39为例:https://android.googlesource.com/kernel/common.git

环境:虚拟机中ubuntu系统

一、下载kernel源码:

1、创建repo文件夹:mkdir /Android/kernel/goldfish&& cd /Android/kernel/goldfish

2、初始化git:git init

3、下载源码:git clone https://android.googlesource.com/kernel/goldfish.git

4、查看所有分支:git branch -a

5、在本地创建并checkout指定分支:git checkout -b goldfish-2.6.29 goldfish/android-goldfish-2.6.29

二、下载交叉编译工具:

6、下载交叉编译工具:git clone git://github.com/DooMLoRD/android_prebuilt_toolchains.git /Android/toolchains

三、设置环境变量:

7、临时设置环境变量:export PATH=$PATH:/Android/toolchains/arm-linux-androideabi-4.7/bin

8、或长久设定环境变量:gedit ~/.bashrc
     增加如下两行:
      export PATH=$PATH:/Android/toolchains/arm-eabi-linaro-4.6.2/bin
      export ARCH=arm
     保存后,同步变化:source ~/.bashrc

四、设定交叉编译参数:

9. 打开goldfish目录下的Makefile文件并编辑:ARCH        ?= $(SUBARCH) 改为: ARCH        ?= arm

10. 把CROSS_COMPILE指向刚才下载的prebuilt中的arm-eabi编译器:CROSS_COMPILE ?= arm-eabi-
       这个旨在告诉make,在编译的时候要使用我们的工具链。

11. 把LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,/
                                                     $(call ld-option, -Wl$(comma)–build-id,))
把这一行注释掉,并且添加一个空的LDFLAGS_BUILD_ID定义,如下: LDFLAGS_BUILD_ID =

把它注释掉的原因是目前android的内核还不支持这个选项。--build-id选项,主要是用于在生成的elf可执行文件中加入一个内置的id,这样在core dump,或者debuginfo的时候就可以很快定位这个模块是哪次build的时候弄出来的。这样就可以避免,每次都把整个文件做一遍效验,然后才能得到该文件的是由哪次build产生的。对于内核开发者来说,这是很不错的想法,可以节约定位模块版本和其影响的时间。
目前,该功能还出于early stage的状态,未来的android或许会支持,但至少目前的版本是不支持的。所以,用#注释掉即可,或者害怕不保险的话,就加入LDFLAGS_BUILD_ID=空,这样即使编译的时候用了,也只是一个空格而已。

五、编译内核

$ cd /Android/kernel/goldfish
$ make goldfish_defconfig
$ make

六、测试生成的内核映像

12、下载Android (SDK)ADT bundle:http://developer.android.com/sdk/index.html

13、加入PATH变量:export PATH=$PATH:/Android/sdk/adt-bundle-linux-x86-20130917/sdk/platform-tools:/Android/sdk/adt-bundle-linux-x86-20130917/sdk/tool

14、cd /Android/sdk/adt-bundle-linux-x86-20130917/sdk/tool && ./emulator -avd myavd -kernel /Android/kernel/goldfish/arch/arm/boot/zImage


其中:第3步容易出现fetch出错问题,可以设置goagent proxy后进行重试。

参见blog.csdn.net/dgq227/article/details/12004685 和 blog.csdn.net/dgq227/article/details/11990229

注:

检出仓库:        $ git clone git://github.com/jquery/jquery.git
查看远程仓库:$ git remote -v
添加远程仓库:$ git remote add [name] [url]
删除远程仓库:$ git remote rm [name]
修改远程仓库:$ git remote set-url --push [name] [newUrl]
拉取远程仓库:$ git pull [remoteName] [localBranchName]
推送远程仓库:$ git push [remoteName] [localBranchName]

Reference:

http://blog.csdn.net/ithomer/article/details/7529841 (git常用命令速查表)

http://blog.csdn.net/ithomer/article/details/7529022 (git常用命令详解)

http://blog.csdn.net/ithomer/article/details/7530042 (git绕墙方法介绍)

http://gitref.org/zh/remotes/ (git参考手册)

http://blog.csdn.net/chizhaolin/article/details/5721539 (下载编译android kernel)

http://forum.xda-developers.com/showthread.php?t=1748297 (编译你的第一个kernel)

原创粉丝点击