Ubuntu11.04 - 64 bits下编译Android2.2内核

[note: 谢谢原作者分享本文,使偶找到了正确的编译道路; 而偶编译2.3内核中的曲折和经验,合并写在此文中,若有缘能够帮助像我一样需要帮助的人,当不负始发文者的本意 ]


Ubuntu10.10下编译Android2.2内核


[from: http://blog.csdn.net/thl789/article/details/6552756

田海立@CSDN 2011/06/17

环境:Ubuntu10.10 Android2.2.2_r1 android-gldfish-2.6.29

 

0 说明

Android2.2的platform和kernel是分别的项目,要分别下载编译。本文是Ubuntu10.10 环境下android 内核(goldfish-2.6.29)的编译。

 

读者:希望深入Android底层开发者,如果只是ANDROID应用开发者,不用如此麻烦,直接下载现成的SDK以及其他相应工具即可。

 

一、环境准备

 

同《Ubuntu10.10下编译Android2.2平台》中环境的准备。

 

二、下载Android2.2 Kernel – Goldfish

Android有各种平台的Kernel版本,其中有一个Goldfish的模拟器使用的Kernel。

 

获取android-gldfish-2.6.29

可以到http://android.git.kernel.org,点击kernel/common.git看当前的版本,笔者选择了android-gldfish-2.6.29。

 

下载android-gldfish-2.6.29,执行

haili@haili-desktop:~$cd android-2.2.2_r1

haili@haili-desktop:~/android-2.2.2_r1$git clone git://android.git.kernel.org/kernel/common.git –b android-2.6.35 kernel

haili@haili-desktop:~/android-2.2.2_r1$cd kernel

haili@haili-desktop:~/android-2.2.2_r1/kernel$git checkout android-gldfish-2.6.29

注释:

当前  android-gldfish-2.6.29 已经不在common.git中,这时先 git branch -a, 有如下结果:
  android-2.6.35
  remotes/origin/HEAD -> origin/android-2.6.36
  remotes/origin/android-2.6.35
  remotes/origin/android-2.6.36
  remotes/origin/android-2.6.37
  remotes/origin/android-2.6.38
  remotes/origin/android-2.6.39
  remotes/origin/android-3.0
  remotes/origin/archive/android-2.6.25
  remotes/origin/archive/android-2.6.27
  remotes/origin/archive/android-2.6.29
  remotes/origin/archive/android-2.6.32
  remotes/origin/archive/android-gldfish-2.6.29
  remotes/origin/archive/android-goldfish-2.6.27
  remotes/origin/linux-bcm43xx-2.6.39
  remotes/origin/linux-wl12xx-2.6.39

然后,git checkout -b working remotes/origin/archive/android-gldfish-2.6.29,这样可以取得android-gldfish-2.6.29。若再git branch -a, 有如下结果:

 android-2.6.35

* working
  remotes/origin/HEAD -> origin/android-2.6.36
  remotes/origin/android-2.6.35
  remotes/origin/android-2.6.36
  remotes/origin/android-2.6.37
  remotes/origin/android-2.6.38
  remotes/origin/android-2.6.39
  remotes/origin/android-3.0
  remotes/origin/archive/android-2.6.25
  remotes/origin/archive/android-2.6.27
  remotes/origin/archive/android-2.6.29
  remotes/origin/archive/android-2.6.32
  remotes/origin/archive/android-gldfish-2.6.29
  remotes/origin/archive/android-goldfish-2.6.27
  remotes/origin/linux-bcm43xx-2.6.39
  remotes/origin/linux-wl12xx-2.6.39


[参考: 从另一个repository中下载objects and refs, http://blog.microsuncn.com/?p=2093]

 

三、获取配置信息

从prebuilt的模拟器中获取编译配置信息

haili@haili-desktop:~/android-2.2.2_r1/kernel$emulator -avd AVD_HVGA

haili@haili-desktop:~/android-2.2.2_r1/kernel$adb pull /proc/config.gz

haili@haili-desktop:~/android-2.2.2_r1/kernel$gunzip config.gz

haili@haili-desktop:~/android-2.2.2_r1/kernel$cp config .config

 

四、编译Android Kernel

编译kernel,需要配置信息,这在上段已经设置;

另外要指定ARCH,Goldfish还是模拟的ARM,这里指定ARCH=arm;

编译器也要指定,这里用prebuilt里的arm-eabi-4.4.0。

所以,执行

haili@haili-desktop:~/android-2.2.2_r1$cd kernel

haili@haili-desktop:~/android-2.2.2_r1/kernel$make ARCH=arm CROSS_COMPILE=~/android-2.2.2_r1/prebuilt/linux-x86/toolchains/arm-eabi-4.4.0/bin/arm-eabi- -j2

 

编译完成,最后生成

Kernel: arch/arm/boot/zImage is ready

 

五、验证

 

指定到编译生成的内核,执行

$cd ~/android-2.2.2_r1

haili@haili-desktop:~/android-2.2.2_r1$emulator –kernel kernel/arch/arm/boot/zImage –avd AVD_HVGA

 

查看内核版本。


[参考: http://wangliangfei4585.blog.163.com/blog/static/448198582011222111959550/]

[参考:在 Android Emulator 中开发 LKM 程序, http://www.linuxidc.com/Linux/2011-05/35740p2.htm]



 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

从另一个repository中下载objects and refs

[from: http://blog.microsuncn.com/?p=2093]

git fetch 从另一个repository中下载objects and refs, 这里用git fetch获取Android Kernel:

Android Kernel的git repository在 git://android.git.kernel.org/kernel/common.git

首先,先建立一个工作目录:
$ mkdir android-kernel-git
$ cd android-kernel-git

建立git环境:
$ git init
$ git remote add android git://android.git.kernel.org/kernel/common.git

获取android kernel
$ git fetch android

remote: Counting objects: 1637009, done.
remote: Compressing objects: 100% (272756/272756), done.
remote: Total 1637009 (delta 1360356), reused 1622966 (delta 1350661)
Receiving objects: 100% (1637009/1637009), 336.06 MiB | 203 KiB/s, done.
Resolving deltas: 100% (1360356/1360356), done.
From git://android.git.kernel.org/kernel/common
* [new branch]      android-2.6.25 -> android/android-2.6.25
* [new branch]      android-2.6.27 -> android/android-2.6.27
* [new branch]      android-2.6.29 -> android/android-2.6.29
* [new branch]      android-2.6.32 -> android/android-2.6.32
* [new branch]      android-2.6.35 -> android/android-2.6.35
* [new branch]      android-goldfish-2.6.27 -> android/android-goldfish-2.6.27
* [new branch]      android-goldfish-2.6.29 -> android/android-goldfish-2.6.29
From git://android.git.kernel.org/kernel/common
* ………
* [new tag]         v2.6.32    -> v2.6.32
* [new tag]         v2.6.32-rc1 -> v2.6.32-rc1
* [new tag]         v2.6.32-rc2 -> v2.6.32-rc2
* [new tag]         v2.6.32-rc3 -> v2.6.32-rc3
* [new tag]         v2.6.32-rc4 -> v2.6.32-rc4
* [new tag]         v2.6.32-rc5 -> v2.6.32-rc5
* [new tag]         v2.6.32-rc6 -> v2.6.32-rc6
* [new tag]         v2.6.32-rc7 -> v2.6.32-rc7
* [new tag]         v2.6.32-rc8 -> v2.6.32-rc8

查看当前有那些分支:
$ git branch -a
remotes/android/android-2.6.25
remotes/android/android-2.6.27
remotes/android/android-2.6.29
remotes/android/android-2.6.32
remotes/android/android-2.6.35
remotes/android/android-goldfish-2.6.27
remotes/android/android-goldfish-2.6.29

把2.6.35的分支checkout出来:
$ git checkout -b working remotes/android/android-2.6.35
$ git branch -a
* working
remotes/android/android-2.6.25
remotes/android/android-2.6.27
remotes/android/android-2.6.29
remotes/android/android-2.6.32
remotes/android/android-2.6.35
remotes/android/android-goldfish-2.6.27
remotes/android/android-goldfish-2.6.29



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值