当前位置: 首页 > >

在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的名称。


上图为证:



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

黑屏:


查看环境变量,确认是否有?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





友情链接: