概述

如果我们仅仅对Android内核感兴趣,我们可以选择合适的Android内核下载并编译。

可供选择的内核源码有很多版本:

[plain] view plain copy
  1. $gitclonehttps://android.googlesource.com/kernel/common.git
  2. $gitclonehttps://android.googlesource.com/kernel/exynos.git
  3. $gitclonehttps://android.googlesource.com/kernel/goldfish.git
  4. $gitclonehttps://android.googlesource.com/kernel/msm.git
  5. $gitclonehttps://android.googlesource.com/kernel/omap.git
  6. $gitclonehttps://android.googlesource.com/kernel/samsung.git
  7. $gitclonehttps://android.googlesource.com/kernel/tegra.git
goldfish这个project包含了适合于模拟器平台的源码;

msm这个project包含了适合于ADP1、ADP2、Nexus One、Nexus 4的源码,并且可以作为高通MSM芯片组开发定制内核工作的起始点;

omap这个project包含了适合于PandaBoard、Galaxy Nexus的源码,并且可以作为德州仪器OMAP芯片组内核开发定制工作的起始点;

samsung这个project包含了适合于Nexus S的源码,并且可以作为三星蜂鸟芯片组内核开发定制工作的起始点;

tegra这个project包含了适合于Xoom和Nexus 7的源码,并且可以作为英伟达图睿芯片组内核开发定制工作的起始点;

exynos这个project包含了适合与Nexus 10的源码,并且可以作为三星猎户座芯片组内核开发定制工作的起始点。

编译

1. 我选择的是goldfish这个版本,也即把goldfish给clone下来即可。

[plain] view plain copy
  1. $mkdirAndroidKernel
  2. $gitclonehttps://android.googlesource.com/kernel/goldfish.git

需要等待一会,视网速而定:

2. 接着进入goldfish,发现里面没有文件,别急,我们还要选择分支,下载真正的源码:

可以通过执行:

[plain] view plain copy
  1. $gitbranch-a

来查看所有分支,接着:

[plain] view plain copy
  1. $gitcheckout-bandroid-goldfish-2.6.29origin/android-goldfish-2.6.29

下载源码:


3. 下载编译所必需的prebuilt工具:

[plain] view plain copy
  1. $gitclonehttps://android.googlesource.com/platform/prebuilt

等待一会:


4. 将prebuilt工具添加到环境变量中以备后续使用:

[plain] view plain copy
  1. $exportPATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

5. 接着配置其他必要的环境变量:

[plain] view plain copy
  1. $exportARCH=arm
  2. $exportSUBARCH=arm
  3. $exportCROSS_COMPILE=arm-eabi-

6. 我们执行:

[plain] view plain copy
  1. $makegoldfish_defconfig

来在内核源码根目录下生成一个默认的.config文件:


7. 最后,我们就可以编译了:

[plain] view plain copy
  1. $make

编译过程截图:


映像的输出为:arch/arm/boot/zImage,这样就通过默认的配置完成了Android内核的编译。


裁剪

裁剪要用到一个很有用的命令:

[plain] view plain copy
  1. $makemenuconfig

上述命令的运行需要以下库,必须提前安装:

[plain] view plain copy
  1. $sudoapt-getinstallncurses-dev

make menuconfig这个命令在编译Linux内核时会用到,有关于它的详细说明可以参考以下地方,详细阅读:

http://blog.csdn.net/xdw1985829/article/details/6833319

http://hi.baidu.com/modygewlmsdnpre/item/b604b1c2ff676b1450505825

http://www.linuxidc.com/Linux/2012-06/63092.htm

简单说来就是编译的过程中编译器通过配置文件得知如何编译,得知该把哪个模块编译进去。这个命令会打开一个蓝色的命令行菜单让你更改编译时的配置,在裁剪时也会通过这个命令打开一个菜单来更改编译配置,在退出时如果有变化它会自动提示你保存。


我们在make menuconfig打开的菜单中修改菜单项进行裁剪,这个菜单还是很友好的,你一下就能知道改如何根据需要裁剪,裁剪完成后,退出时询问是否保存,当然要保存(实际上是更新了上文中所述的默认的源码根目录下的.config文件)。


接着我们就可以编译裁剪之后的内核了(当然,编译过程中读取的也是更新后的配置文件):

[plain] view plain copy
  1. $make

编译完毕之后,再去看看编译好的映像,没什么问题的话,发现新映像比未裁剪编译出的映像小了。




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


1. 环境配备
首先,准备好所需要的linux操作系统以及磁盘空间,磁盘空间要足够大。memory >1G,hard disk> 40G
1.1.安装JDK1.6:sudo apt-get install sun-java6-jdk
1.2. 安装开发过程中需要的一些开发包
sudo apt-get install git-core gnupg valgrind flex bison gperf libsdl-dev libesd0-devlibwxgtk2.6-dev build-essential zip libncurses5-dev zlib1g-dev

若自带的源里面找不到所需要的安装包,可以添加软件源:
添加源的过程:
① 备份当前的源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
② 修改 sudo gedit /etc/apt/sources.list
③ 修改之后保存更新 sudo apt-get update

准备好了获取android源码所需要的环境,下面开始获取android源码



2.获取android源码
2.1. 在用户目录下新建一个文件夹来存放我们的android目录
①mkdir android
②cd android
③mkdir bin
④cd bin
⑤安装repo, 通过curl下载repo:curl http://git-repo.googlecode.com/files/repo-1.17 > repo(如果没有安装curl,sudo apt-get install curl)
sudo chmod a+x repo
⑥然后向PATH中添加bin路径:exportPATH=$PATH:~/bin

2.2. 建立存放android源代码目录source
①mkdir source
②cd source
③获取git上的android源码版本: ../bin/repo init -uhttps://android.googlesource.com/platform/manifest -b android-4.0.3_r1
④当出现提示时,请配置您的真实姓名和电子邮件地址回购。使Gerrit代码审查工具,将需要注册的Google户连接的电子邮件地址。确保这是一个激活活的地址上,你可以接收邮件。你在这里所提供的名称将显示在您的代码提交的属性中,完成之后出现“repoinitialized in/home/***(自己用户名)/android”,则表示初试化完毕,可以开始下载,在Repo初始化完毕后,会产生一个隐藏的目录”.repo”,通过查看此目录下的manifest文件可以看到相应的Project。
⑤在终端执行命令开始下载: ../bin/reposync

3.下载android内核
新建存放android内核的目录
①mkdir kernel
②cd kernel
③android的kernel有多个部分,可根据需要运行以下命令下载需要的内容。git clone https://android.googlesource.com/kernel/goldfish.git
下载android内核时间会比下载源码时间短,需要注意的是,android内核的下载不能被中断,而android源码支持断点下载。下载的内容是隐藏的,用du –sk命令来检测文件夹的大小

4.编译android源码
编译。在Android/source目录下执行以下命令:make
第一次编译要等待比较久的时间,编译成功
编译的时间一般不会比下载的时间长。在默认的情况下,编译完成之后,会在/root/android目录下面生成一个out文件夹,生成的所有文件都放在该文件夹下。编译生成之后会在out/target/product/generic/目录下生成一些.img镜像文件

5. 编译android内核
5.1. 确定内核的版本
进入存放android内核源码的kernel目录,我下载了goldfish.git,进入goldfish目录,在命令行输入以下命令,显示所有分支及当前所在的分支:
$git branch -a
输入以下命令选择当前的版本(goldfish为android的模拟器描述的CPU):
$git checkout -b android-goldfish-2.6.29origin/android-goldfish-2.6.29
再次输入命令git branch -a,将会显示刚刚选择的最新分支,表示目前工作在这个被选择的分支上

5.2. 设定环境变量
export PATH=$PATH:~/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/:$PATH
export ARCH=arm
export CROSS_COMPILE=arm-eabi-

5.3. 编译内核源码
设置完之后,就是编译android内核源码了,进入kernel目录,输入以下命令
$make ARCH=arm goldfish_armv7_defconfig
$make
第一条命令为编译时的默认配置文件。如果不执行这条命令,编译时可能会提示“找不到配置文件”。第一条命令执行完后,会在goldfish目录下生成一个.config文件。之后便是一段时间的等待了。。。时间不长,一会即可编译好,比编译android源码时间要少得多。编译完成之后,会在“kernel/arch/arm/boot/”目录下生成名为zImage的文件。

6. 运行android系统
设置路径
export PATH=$PATH:~/android/source/out/host/linux-x86/bin/
export ANDROID_PRODUCT_OUT=~/android/source/out/target/product/generic/
加载:emulator–kernel ./kernel/goldfish/arch/arm/boot/zImage

更多相关文章

  1. Android之一个简单计算器源代码
  2. 自制android1.5的源码包
  3. Android中三级缓存实现原理及LruCache 源码分析
  4. Android(安卓)logcat内核信息
  5. 【Android(安卓)系统开发】使用 Source InSight 阅读 Android(安
  6. android handler
  7. Android源码下载,利用一个shell脚本
  8. Android上通过gcc编译普通的C程序
  9. android 开发环境配置

随机推荐

  1. android (java) 网络发送get/post请求参
  2. 6个必看的Android网站
  3. MVC架构设计与三层模型 & MVP思想精髓与
  4. android webview使用html5 上传相册、拍
  5. Android(安卓)TextView文字横向自动滚动(
  6. Android利用Fiddler进行网络数据抓包
  7. Android(安卓)使用Theme实现动态切换主题
  8. Android简明开发教程十九:线程 Bezier曲线
  9. android中使用线程池和临时缓存优化网络
  10. 【Android(安卓)4.0】Android(安卓)Icon