在Ubuntu上下载编译安装Android最新内核源代码

前提:

按照上一篇博文介绍的配置好android编译环境《ubuntu 下载编译运行android source code--gingerbread》。

以免编译工具缺失造成编译失败。

下载配置编译工具:

可以使用android自带的编译环境,使用方法可以google一下。

本人使用的是第三方编译工具 Code Sourcery ARM EABI Toolchain

https://sourcery.mentor.com/sgpp/lite/arm/portal/subscription3053

IA32 GNU/Linux Installer
IA32 GNU/Linux TAR
二选一即可,我使用的是 2011.03-42 版本,其他版本没有试过。

安装:

安装到 ~即可。

配置:

sudo gedit /etc/environment
增加路径到PATH
PATH=/home/yuchengliu/CodeSourcery/Sourcery_G++_Lite/bin:/home/yuchengliu/bin:
更新环境变量

source /etc/environment 


下载kernel源代码:

$ git clone https://android.googlesource.com/kernel/goldfish.git
下载完成功后发现代码目录中没有code,很是奇怪。

执行:

git branch

显示(没有记错的话是这么显示的,博文是编译成功之后写的,可能会记错):

* master

查看下所有的branch

git branch -a
显示:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/android-goldfish-2.6.29
  remotes/origin/master
下面切换到 goldfish这个branch

git checkout remotes/origin/archive/android-gldfish-2.6.29
一会之后,去代码目录中看看,果然代码都出来了,真是让人纳闷,非得这么搞才出来。

已经非常明确要拿goldfish的代码,非得多操作一步才行。

编译kernel代码:

修改kernel目录中的Makefile文件

修改CROSS_COMPILE变量为:
CROSS_COMPILE=arm-none-linux-gnueabi-
这个就是刚刚的下载和解压的工具链的前缀了,旨在告诉make,在编译的时候要使用我们的工具链。

在Makefile中注释掉LDFLAGS_BUILD_ID这个变量:
例如将如下定义:
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的内核还不支持这个选项。--build-id选项,主要是用于在生成的elf
可执行文件中加入一个内置的id,这样在core dump,或者debuginfo的时候就可以很快定位这个模块是
哪次build的时候弄出来的。这样就可以避免,每次都把整个文件做一遍效验,然后才能得到该文件的是由
哪次build产生的。对于内核开发者来说,这是很不错的想法,可以节约定位模块版本和其影响的时间。
目前,该功能还出于early stage的状态,未来的android或许会支持,但至少目前的版本是不支持的。
所以,用#注释掉即可,或者害怕不保险的话,就加入LDFLAGS_BUILD_ID=空,这样即使编译的时候用了,
也只是一个空格而已。
对这个--build-id选项感兴趣的朋友,可以访问下面的网址,它的作者已经解释得非常明白了:

http://fedoraproject.org/wiki/Releases/FeatureBuildId

获取android的内核编译参数的配置文件

首先启动android模拟器,然后通过adb得到模拟器中提供的内核配置文件:
$emulator &
$adb pull /proc/config.gz .
这时候adb工具会连接模拟器,并从它里面下载一个叫做config.gz的文件到你的当前目录下。
把它拷贝到你的kernel目录:
$cd ~/android/kernel
$cp ~/config.gz . 
解压缩该文件,并重命名为.config,这一步做了就可以跳过make menuconfig之类的内核参数设置
动作了。
$gunzip config.gz

$mv config .config

编译:

make

测试内核:

emulator -avd 2.3  -kernel android/kernel/google/goldfish/arch/arm/boot/zImage 
其中 2.3 为你创建的 avd的名称。

上图为证:

在Ubuntu上下载编译安装Android最新内核源代码_第1张图片

碰到的问题以及解决方法:

黑屏:

查看环境变量,确认是否有 ANDROID_PRODUCT_OUT="/home/yuchengliu/android/google/gingerbread/out/target/product/generic" 

这样的路径在你的环境变量中

env | grep "generic"
如果存在,删除掉,更新环境变量。如果还是不行就logout一次再login(为就是这么办的)。

再测试内核

emulator -avd 2.3  -kernel android/kernel/google/goldfish/arch/arm/boot/zImage 

你可能感兴趣的:(android,ubuntu,Build,工具,makefile,branch)