Android内核编译图文教程

朱登凯 2017-01-05

转载:http://www.miui.com/thread-683503-1-1.html

第0步 编译准备
首先,介绍以下编译内核的环境。
主机:Ubuntu 11.04(32bit)
目标机:HTC Desire HD(G10) 安装系统HTC官方系统2.3(内核版本2.6.35)
需要下载文件:
1> Android源码(仅适合HTC)
http://www.htcdev.com/devcenter/downloads
1.选择 Desire HD -- Carrier -- Region -- v2.3
2.Desire HD N/AN /A MR 2.6.35 v2.3 89.6 MB
3.点击下载

2> 交叉编译工具:
http://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2008q3-41-arm-none-linux-gnueabi.bin

第1步 安装交叉工具链
进入刚才下载的交叉编译目录,执行以下命令
$ chmod a+x arm-2008q3-41-arm-none-linux-gnueabi.bin
$ ./arm-2008q3-41-arm-none-linux-gnueabi.bin
--------------------------------------------------------
这里说明一下,由于安装交叉编译链需要有dash shell(Ubuntu默认)
如果之前进行修改的话,需要切换回来
使用命令:
$ sudo dpkg-reconfigure -plow dash
   Install as /bin/sh? No
---------------------------------------------------------

Android内核编译图文教程
进入安装,比较傻瓜化,Next往下即可,不过要记住以下安装目录,第三步对Makefile的交叉编译工具的配置时需要

第2步 下载Android源码并解压
http://www.htcdev.com/devcenter/downloads
$ tar zxvf ace-2.6.35-gb-MR.tar.gz
得到目录 ace-2.6.35-gb-MR
(记住这个目录哦,第3, 5步需要)
注意之后的修改Makefile(第3步), 执行make(第5步)均在这个目录进行哦

第3步 在Makefile中配置交叉编译工具
由于第1步我安装交叉编译工具的目录在/home/XXX/
所以进入源码目录, 就是第2步解压的地址
$ vim Makefile
修改Makefile 193行,变为(注意最后一个字符是-哦)
CROSS_COMPILE   ?= /home/XXX/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-
如果193行木有,可以:/CROSS_COMPILE快速定位
Android内核编译图文教程

第4步 提取取confg.gz文件
这一步需要通过adb进入真机的shell,具体步骤如下所示(如果已经用过真机调试的同学,自动跳过)
---------------第4步的分割线开始------------------
1.不要插手机
$ lsusb
观察结果

2.插上手机
$ lsusb
再观察结果
发现多了一行,
Android内核编译图文教程
Bus 002 Device 004: ID 0bb4:0ca2 High Tech Computer Corp.
没错这就是你的机子的信息。注意以下ID 后面的两段码值。

3.在/etc/udev/rules.d/70-android.rules写入以下信息
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0ca2"

$ sudo vim /etc/udev/rules.d/70-android.rules
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0ca2"
:wq
$ sudo chmod a+rx /etc/udev/rules.d/70-android.rules


4.测试adb
进入adb所在目录
我的adb目录在~/androidworkspace/android-sdk-linux/platform-tools下面
$ cd ~/androidworkspace/android-sdk-linux/platform-tools
$ sudo service udev restart
$ sudo ./adb kill-server
$ ./adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
HC0CVRX02200    device
Android内核编译图文教程
我们发现device已经被发现,这便说明adb是可用的啦
或许在Android开发过应用程序,并且使用过真机调试的同学可能会比较熟悉上述过程。
---------------第4步的分割线结束------------------
好了,如果adb可以工作了,那么就好办了

可以在shell中风骚一下。
# ./adb shell
# ls
我们可以发现一个叫做proc的目录
# cd proc
# ls | grep config.gz
我们发现有个叫config.gz的文件,这个就是我们第4步需要提取的文件哦。
ctrl+c退出,或者输入exit。

最后一步,
$ ./adb pull /proc/config.gz
这时,你会发现,在当前目录下,出现了一个叫做config.gz
Android内核编译图文教程
$ gunzip config.gz
Android内核编译图文教程
如果你发现当前目录下,出现了一个叫config的文件,恭喜你,提取成功了。

第5步 将config加入内核源码目录, 编译内核

这一步还在adb所在目录哦
$ mv ./config.gz XXXX/ace-2.6.35-gb-MR/.config
$ ls -a
可以ls -a一下看看是否完成复制 .config
(第一个命令后面那个目录当然就是源码目录了第2步的时候,告诉你记住的。。。
解释下./config.gz这个指的是当前目录下的config.gz文件,而.config相当于文件名就叫做.config,不要太纠结)
make
经过个大概10分钟(这个和您电脑有关了,理论上说核越多,内存越高,编译越快)
成功会有以下信息提示
  Kernel: arch/arm/boot/Image is ready
  SHIPPED arch/arm/boot/compressed/lib1funcs.S
  AS      arch/arm/boot/compressed/lib1funcs.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
Android内核编译图文教程
大功告成!祝贺你!

第6步 K.O.
完成,写写总结,或者把这篇文章分享给别的同胞吧!
---------------------
总结一下,我们做了什么。
我们做个假设假如所有的环境都已经配置好了,那么只用下载源码->进入源码目录->make就ok了,但是,为什么要作那么多步呢?
第一是交叉编译
源码下好了,由于您的机子是x86的,而手机的架构是arm的这是您就需要进行交叉编译
(做个形象的比喻,不知是否恰当,就是电脑会说一个叫X86的语言,而手机会说一个叫arm的语言,他们需要一个翻译,这个翻译就是交叉编译工具)
第二是.config文件
      由于编译的时候需要一个.config文件,其实您也完全可以不用这个文件,执行make menuconfig对内核的编译选项进行配置就可以了。但是,那些个内核配置过于繁琐,所以我们便可以通过已经有的.config文件弄进去就好,哪来呢?当然就是已经刷到手机里的ROM里。所以,我们可以总结为以下步骤,
下载源码->进入源码目录->得到.conf->配置交叉工具链->make
好了,收工,碎觉,要健康。
----------------------
Innovation, Share, Growth.
Let's work hard and make progress together!
My Name is Kero.

Screenshot-1.png (54.01 KB, 下载次数: 4)

 

Android内核编译图文教程

相关推荐