您的位置 首页 5G

android内核编译办法

google的android很多人都希望在gphone没有出来之前,把它移植到相关的硬件平台上去。网上看了不少文章,总的感觉是:在这一步走得最远的就是openmoko的

google的android许多人都期望在gphone没有出来之前,把它移植到相关的硬件渠道上去。网上看了不少文章,总的感觉是:在这一步走得最远的便是openmoko的一个大师级其他黑客Ben “Benno” Leslie,他从前企图把现在google发布的android移植到openmoko的渠道上去,并且做了10000多行代码的测验。终究尽管由于open moko选用比较老的arm 920t的内核,而android选用较新的arm926-ej-s内核,并且运用了新的内核的一些新特性,导致移植失利,可是anyway,他现已做了足够多的前期作业了,此后的宣告成功移植android到real target板子上的人,大多是在他供给的patch的基础上持续走下去做出来的。

下面是一些有用的参阅,期望有助于对此感兴趣的开发人员:

(1)Ben “Benno” Leslie的关于andorid移植到openmoko的个人博客地址:

http://benno.id.au/blog/

(2)前期宣告成功移植android到zauraus-sl-c760的具体办法描绘的链接:

http://euedge.com/blog/2007/12/06/google-android-runs-on-sharp-zaurus-sl-c760/

(3)后续的依据上述先行者们的作业,成功移植android到zauraus-c3000的办法:

http://androidzaurus.seesaa.net/article/74237419.html

(4)本文是参阅下面的wiki,接合个人的实践写出来的,对原文的作者表明一下感谢:

http://wiki.droiddocs.net/Compilation_of_Android_kernel

很仰慕这些人阿!

不过很可惜,偶的开发板是s3c2410的,恰好是arm920t的中心的。。。估量移植上去戏不是很大,需求重写许多代码,究竟偶跟benno相差得太远太远了,同样是开发人员,距离咋就那么大呢?!

(究竟google仅仅敞开了kernel的源代码罢了,他们需求敞开的东西还许多。)

在这里把关于android内核编译办法简略写一下,或许对期望移植内核的朋友能有些协助:

(看了Benno的移植进程今后,觉得即便你能够编译google敞开出来的内核,含义也不是特别大,由于这个内核中参加了为了支撑qemu的许多东西,而这些代码好像对期望移植到真机上的朋友来说,没有任何含义,反而是一种阻止)。

1)从CodeSourcery上面载用于穿插编译的东西链:

http://www.codesourcery.com/gnu_toolchains/arm/download.html

我在这里挑选的是->ARM GNU/Linux,以及IA32-GNU/Linux。有文章说应该挑选ARM EABI,我不知道了,没有测验过,横竖我挑选的这个编译的内核也是能够跑起来的:P

2)下载google的android linux的内核源代码:

http://code.google.com/p/android/downloads/list

主要是这个文件: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-2007q3-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的内核编译参数的配置文件的时分了,该文件需求从现已装置好的android的模拟器中得到才行。所以装置android的sdk也是有必要的,这一步不太理解的朋友能够参阅我以前发的android命令行体会的文章。首要发动android模拟器,然后经过adb得到模拟器中供给的内核配置文件: $emulator $adb pull /proc/config.gz .这时分adb东西会衔接模拟器,并从它里边下载一个叫做config.gz的文件到你的当时目录下。把它复制到你的kernel目录: $cd ~/android/kernel $cp ~/config.gz . 解压缩该文件,偏重命名为.config,这一步做了就能够越过make menuconfig之类的内核参数设置动作了。 $gunzip config.gz $mv config .config5)修正kernel目录中的Makefile文件,用emacs或vi翻开该Makefile修正CROSS_COMPILE变量为:CROSS_COMPILE=arm-none-linux-gnueabi-这个便是刚刚的下载和解压的东西链的前缀了,旨在告知make,在编译的时分要运用咱们的东西链。在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选项,主要是用于在生成的elf可执行文件中参加一个内置的id,这样在core dump,或许debuginfo的时分就能够很快定位这个模块是哪次build的时分弄出来的。这样就能够防止,每次都把整个文件做一遍效验,然后才干得到该文件的是由哪次build发生的。关于内核开发者来说,这是很不错的主意,能够节省定位模块版别和其影响的时间。现在,该功用还出于early stage的状况,未来的android或许会支撑,但至少现在的版别是不支撑的。所以,用#注释掉即可,或许惧怕不稳妥的话,就参加LDFLAGS_BUILD_ID=空,这样即便编译的时分用了,也仅仅一个空格罢了。对这个–build-id选项感兴趣的朋友,能够拜访下面的网址,它的作者现已解说得十分理解了:http://fedoraproject.org/wiki/Releases/FeatureBuildId6)总算能够开端make了。 $ make不出意外的话,应该整个进程都会十分顺畅,终究会在~/android/kernel/arch/arm/boot目录下面生成一个zImage,这个便是咱们要的内核映像了。7)激动人心的时间总算到来了,咱们能够测验一下刚刚编译出来的内核能够不能够用了。 $emulator -kernel ~/android/kernel/arch/arm/boot/zImage当看到red eye在晃来晃去,终究显示出来android的界面的时分,一颗悬着的心总算放下了。android的proc里边的version如下:# cat versionLinux version 2.6.23 (wayne@wayne) (gcc version 4.2.1 (CodeSourcery Sourcery G++ Lite 2007q3-51)) #1 Sat Jan 19 18:11:44 HKT 2008

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/297892.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部