《2022年android内核编译方法 .pdf》由会员分享,可在线阅读,更多相关《2022年android内核编译方法 .pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、android内核编译方法(转)2008-07-10 16:14 google的 android很多人都希望在gphone没有出来之前,把它移植到相关的硬件平台上去。网上看了不少文章,总的感觉是:在这一步走得最远的就是openmoko的一个大师级别的黑客Ben “Benno ” Leslie,他曾经试图把目前google发布的 android移植到 openmoko的平台上去,并且做了10000多行代码的尝试。最终虽然由于open moko采用比较老的 arm 920t的内核,而 android采用较新的 arm926-ej-s内核,而且使用了新的内核的一些新特性,导致移植失败,但是anywa
2、y,他已经做了足够多的前期工作了,尔后的宣布成功移植android到 real target板子上的人,大多是在他提供的 patch的基础上继续走下去做出来的。下面是一些有用的参考,希望有助于对此感兴趣的开发人员:(1)Ben “Benno” Leslie的关于 andorid移植到 openmoko的个人博客地址:http:/benno.id.au/blog/ (2)早期宣布成功移植android到 zauraus-sl-c760的详细方法描述的链接:http:/ (3)后续的根据上述先行者们的工作,成功移植android到 zauraus-c3000的方法:http:/ (4)本文是参考下
3、面的wiki ,接合个人的实践写出来的,对原文的作者表示一下感谢:http:/ 很羡慕这些人阿!不过很可惜,偶的开发板是s3c2410的,恰好是 arm920t的核心的。估计移植上去戏不是很大 ,需要重写很多代码,毕竟偶跟benno相差得太远太远了,同样是开发人员,差距咋就那么大呢?!(毕竟 google仅仅开放了 kernel 的源代码而已,他们需要开放的东西还很多。)在这里把关于 android 内核编译方法简单写一下,或许对希望移植内核的朋友能有些帮助 : (看了 Benno的移植过程以后,觉得即使你能够编译google开放出来的内核,意义也不是特别大,因为这个内核中加入了为了支持qem
4、u的很多东西,而这些代码似乎对希望移植到真机上的朋友来说,没有任何意义,反而是一种阻碍)。1)从 CodeSourcery上面载用于交叉编译的工具链: http:/ 我在这里选择的是 -ARM GNU/Linux ,以及 IA32-GNU/Linux 。有文章说应该选择ARM EABI ,我不知道了,没有测试过,反正我选择的这个编译的内核也是可以跑名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 起来的 :P 2)下载 googl
5、e的 android linux 的内核源代码:http:/ 主要是这个文件: linux-2.6.23-android-m3-rc20.tar.gz 3)把下载到的内核和交叉编译工具解压缩,并最好把工具链的路径放到PATH 里面去解压缩内核: $ mkdir -p android $ cd android $ tar xzvf ./linux-2.6.23-android-m3-rc20.tar.gz 会解压出来一个叫做kernel的目录, google的 android的 linux内核就在里面了。解压缩交叉编译工具链: $ cd /usr/local/ $ sudo cp /arm-20
6、07q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 . $ sudo tar zxvf arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 此时会解压出来一个叫做arm2007q3的一个目录,这里面就是工具链了。设置一下环境变量: $ export PATH=$PATH:/usr/local/arm2007q3/bin 好了,到此,基本的内核编译环境就搞好了。4) 现在是要得到android的内核编译参数的配置文件的时候了,该文件需要从已经安装好的androi
7、d的模拟器中得到才行。所以安装android的 sdk也是必须的,这一步不太明白的朋友可以参考我以前发的android 命令行体验的文章。首先启动android模拟器,然后通过adb 得到模拟器中提供的内核配置文件: $emulator & $adb pull /proc/config.gz . 这时候 adb 工具会连接模拟器,并从它里面下载一个叫做config.gz的文件到你的当前目录下。把它拷贝到你的kernel目录: $cd /android/kernel $cp /config.gz . 解压缩该文件,并重命名为.config,这一步做了就可以跳过make menuconfig之类的
8、内核参数设置动作了。 $gunzip config.gz $mv config .config 5) 修改 kernel目录中的Makefile文件,用emacs或 vi打开该 Makefile 修改 CROSS_COMPILE 变量为 : CROSS_COMPILE=arm-none-linux-gnueabi- 这个就是刚刚的下载和解压的工具链的前缀了,旨在告诉make ,在编译的时候要使用我们的工具名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - -
9、- - - - - - 链。在 Makefile中注释掉LDFLAGS_BUILD_ID这个变量:例如将如下定义:LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%, $(call ld-option, -Wl$(comma)-build-id,) 修改为:LDFLAGS_BUILD_ID= #LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%, # $(call ld-option, -Wl$(comma)-build-id,) 把它注释掉的原因是目前android的内核还不支持这个选项。-build-id选项,主要
10、是用于在生成的 elf 可执行文件中加入一个内置的id ,这样在core dump,或者 debuginfo的时候就可以很快定位这个模块是哪次 build的时候弄出来的。这样就可以避免,每次都把整个文件做一遍效验,然后才能得到该文件的是由哪次 build产生的。对于内核开发者来说,这是很不错的想法,可以节约定位模块版本和其影响的时间。目前,该功能还出于early stage的状态,未来的android或许会支持,但至少目前的版本是不支持的。所以,用 #注释掉即可,或者害怕不保险的话,就加入LDFLAGS_BUILD_ID=空,这样即使编译的时候用了,也只是一个空格而已。对这个 -build-i
11、d选项感兴趣的朋友,可以访问下面的网址,它的作者已经解释得非常明白了:http:/fedoraproject.org/wiki/Releases/FeatureBuildId 6) 终于可以开始make 了。 $ make 不出意外的话,应该整个过程都会非常顺利,最终会在/android/kernel/arch/arm/boot目录下面生成一个zImage,这个就是我们要的内核映像了。7) 激动人心的时刻终于到来了,我们可以测试一下刚刚编译出来的内核可以不可以用了。 $emulator -kernel /android/kernel/arch/arm/boot/zImage 当看到 red e
12、ye在晃来晃去,最终显示出来android的界面的时候,一颗悬着的心总算放下了。android的 proc里面的 version如下:# cat version Linux version 2.6.23 (waynewayne) (gcc version 4.2.1 (CodeSourcery Sourcery G+ Lite 2007q3-51) #1 Sat Jan 19 18:11:44 HKT 2008 从这里就可以看出,这是自己编译的kernel,而不是人家sdk里面自带的kernel-qemu了。android自带的 sdk里面的 kernel映像的 version应该是:# ca
13、t version Linux version 2.6.23-gcc3bc3b4 () (gcc version 4.2.1) #3 Tue Oct 30 16:28:18 PDT 2007 hoho, 这里不会把这个开发者的email暴露出来了吧。android的 cpuinfo如下:Processor : ARM926EJ-S rev 5 (v5l) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - BogoMIPS : 31
14、3.75 Features : swp half thumb fastmult vfp edsp java CPU implementer : 0 x41 CPU architecture: 5TEJ CPU variant : 0 x0 CPU part : 0 x926 CPU revision : 5 Cache type : write-through Cache clean : not required Cache lockdown : not supported Cache format : Harvard I size : 4096 I assoc : 4 I line length : 32 I sets : 32 D size : 65536 D assoc : 4 D line length : 32 D sets : 512 Hardware : Goldfish Revision : 0000 Serial : 0000000000000000 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -