如何编译Android的kernel
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编译Android的kernel相关的知识,希望对你有一定的参考价值。
1.准备工作: (ubuntu1110 32位)ubuntu等linuxOS,下载好eclipse,安装好JDK, 安装好android的SDK, 在eclipse中成功打开android 手机模拟器即OK。
2.初始化编译环境 :
关注该网页上的“installing required packages”,其中有的软件包因为版本问题而安装不上,不用管它,之后遇到错误再单独解决。
3.下载内核源码:
android 2.3 内核 下载需要等待一段时间。
4.下载交叉编译器:
该步骤有可能耗费大量时间,依据网速不同,几个小时到几天不等,或许可以尝试git clone 后面的地址只下载prebuilt/linux-x86/toolchain
5.设置参数以及编译:
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
$ cd goldfish // 进入下载的源代码目录
$ git checkout <commit_from_first_step> //这个步骤我没有做,不知道干嘛用的
$ make goldfish_defconfig
$ make
6.报错信息:
若有报错说找不到 (arm-eabi-gcc command not found)等等,尝试使用采用另外一个交叉编译器。
7.测试:
最后,测试一下刚才编译的内核:emulator -avd myavd -kernel ~/goldfish/arch/arm/boot/zImageemulator若系统找不到,可以去android SDK中某文件夹找到,加入系统PATH即可。 -avd后面的参数 myavd即为模拟器的名字,这个我是在eclipse中的模拟器管理中新建的一个模拟器,用那个模拟器的名字即可。 -kernel后面的参数就找到刚才编译出的内核的路径。
若启动模拟器失败,可尝试关闭后再启动。第一次启动模拟器时可能需要等待比较长的时间。 参考技术A 方法如下:
在Linux的环境下:
建立目录:
mkdir ~/android-kernel cd android-kernel
下载源代码, 大概有280MB, 慢慢等哈~~~ (当然你要先安装git) git clone git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git
类似的屏幕信息:
Initialized empty Git repository in /home/user/android-kernel/kernel/.git/ remote: Counting objects: 908251, done.
remote: Compressing objects: 100% (153970/153970), done.
remote: Total 908251 (delta 755115), reused 906063 (delta 753016) Receiving objects: 100% (908251/908251), 281.86 MiB | 292 KiB/s, done. Resolving deltas: 100% (755115/755115), done. Checking out files: 100% (22584/22584), done.
然后去到htc-msm branch: cd kernel
git checkout -b htc-msm origin/htc-msm
屏幕信息:
Branch htc-msm set up to track remote branch refs/remotes/origin/htc-msm. Switched to a new branch "htc-msm"
下载ARM的toolchain, 大概64MB左右, 下到~/android-kernel: 下
载
:
http://www.codesourcery.com/gnu_toolchains/arm/portal/package2549/public/arm-none-linux-gnueabi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
cd ~/android-kernel
tar xjf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
编译kernel
准备缺省的Kaiser 配置文件.config
cd ~/android-kernel/kernel
make htckaiser_defconfig ARCH=arm
然后编译zImage:
export PATH=~/android-kernel/arm-2008q1/bin:$PATH
make zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
编译好的在: ~/android-kernel/kernel/arch/arm/boot/zImage
如果你的机器是多核的, 可以编译的时候用-j <cores/cpus_number>来加速:
比如, 双核的可以:
make -j 2 zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi本回答被提问者和网友采纳
2. ubuntu下载编译linux kernel
一. 引言
诚如老罗所言,android源代码里面并没有带linux kernel代码。它使用的是预先编译好的kernel,大家可以使用adb shell cat proc/version就可以查看到,如下:
[email protected]:~/working_directory$ adb shell cat proc/version
Linux version 2.6.29-00261-g0097074-dirty ([email protected]) (gcc version 4.4.0 (GCC) ) #20 Wed Mar 31 09:54:02 PDT 2010
[email protected]:~/working_directory$
从kernel版本可以看到现在使用的还是google在2010编译的kernel,那怎么下载/编译/运行自己的kernel呢?
二. 下载kernel
下载方法请参考老罗的博客
http://blog.csdn.net/luoshengyang/article/details/6564592
不过有个地方要注意,跟第1篇帖子类似,由于地址被墙,不能下载成功(至少我没有成功...)
所以得去清华大学的镜像站下载
下载地址https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
1. 新建kernel目录
mkdir kernel
cd kernel
2. git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
clone完成后进入goldfish目录
3. cd goldfish
4. git branch -a 查看远程分支
[email protected]:~/working_directory/kernel/goldfish$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/android-3.10
remotes/origin/android-3.18
remotes/origin/android-3.4
remotes/origin/android-goldfish-2.6.29
remotes/origin/android-goldfish-3.10
remotes/origin/android-goldfish-3.10-l-mr1-dev
remotes/origin/android-goldfish-3.10-m-dev
remotes/origin/android-goldfish-3.18-dev
remotes/origin/android-goldfish-3.4
remotes/origin/android-goldfish-3.4-l-mr1-dev
remotes/origin/linux-goldfish-3.0-wip
remotes/origin/master
[email protected]:~/kerle_test/goldfish$
5. 切换到android-goldfish-2.6.29分支,因为这个分支和2.3版本是最相近的。
git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
6. 查看本地分支和远程分支对应情况
git branch -avv
可以看到我们本地所处的android-goldfish-2.6.29分支和远程分支“4bb8fa0 [origin/android-goldfish-2.6.29] goldfish: Add encrypted SD Card support.”是对应的。
至此,kernel代码就下载完成了。
另外,我发现默认下载的kernel文件夹是goldfish,不知道为啥老罗的是common,也许他的git命令指定了文件夹吧。
三. 编译kernel
编译kernel的话请参考老罗的方法,配置交叉编译环境,使用make命令编译
http://blog.csdn.net/luoshengyang/article/details/6564592
ps:
make menuconfig是启动配置菜单,可以配置编译选项。
四. 运行自己的kernel
emulator -kernel ./kernel/common/arch/arm/boot/zImage
老罗的命令是emulator -kernel ./kernel/common/arch/arm/boot/zImage &
但是发现没有这个&也是可以运行的
本文出自 “www.bogo.com” 博客,请务必保留此出处http://483181.blog.51cto.com/473181/1742559
以上是关于如何编译Android的kernel的主要内容,如果未能解决你的问题,请参考以下文章