如何编译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的主要内容,如果未能解决你的问题,请参考以下文章

如何编译Android的kernel

android 如何编译overlay

如何编译android kernel

如何反编译android应用并重新打包

android编译的时候 是如何配置默认显示横竖屏

如何反编译android应用并重新打包