⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 android kernel porting 的简单总结文档 - colorant的专栏 - csdn博客.htm

📁 Android Kernel Porting 的简单总结文档.rar
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0061)http://blog.csdn.net/colorant/archive/2008/02/27/2124992.aspx -->
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>Android Kernel Porting 的简单总结文档 - colorant的专栏 - CSDN博客</TITLE>
<META content=彩色蚂蚁 name=author>
<META content=Csdn name=Copyright>
<META 
content=移植Android的kernel到实际的硬件平台上,很多人很早就做过这件事了,不过相关的文档和经验总结不多,我就写一个吧,也为了自己记录一下大致的流程,以后好继续。 
name=description>
<META http-equiv=Content-Type content="text/html; charset=utf-8"><LINK 
href="http://profile.csdn.net/colorant/picture/1.ico" rel="Shortcut Icon"><LINK 
media=all 
href="Android Kernel Porting 的简单总结文档 - colorant的专栏 - CSDN博客.files/Cogitation_1.css" 
type=text/css rel=stylesheet><LINK media=all 
href="Android Kernel Porting 的简单总结文档 - colorant的专栏 - CSDN博客.files/csdn_favbykimi.css" 
type=text/css rel=stylesheet>
<SCRIPT 
src="Android Kernel Porting 的简单总结文档 - colorant的专栏 - CSDN博客.files/jquery-1.2.3.pack.js" 
type=text/javascript></SCRIPT>

<SCRIPT 
src="Android Kernel Porting 的简单总结文档 - colorant的专栏 - CSDN博客.files/jquery.highlighter.js" 
type=text/javascript></SCRIPT>

<SCRIPT 
src="Android Kernel Porting 的简单总结文档 - colorant的专栏 - CSDN博客.files/highlighter.js" 
type=text/javascript></SCRIPT>
<LINK title=RSS href="http://feeds.feedsky.com/csdn.net/colorant" 
type=application/rss+xml rel=alternate>
<META content="MSHTML 6.00.2900.3527" name=GENERATOR></HEAD>
<BODY id=defaultuser>
<DIV id=csdnblog_allwrap>
<FORM id=Form1 name=Form1 action=2124992.aspx method=post><INPUT 
id="&#13;&#10;__VIEWSTATE" type=hidden name=__VIEWSTATE> 
<DIV id=csdnblog_midwrap>
<DIV id=csdnblog_header>
<H1><A id=Header1_HeaderTitle 
href="http://blog.csdn.net/colorant/">colorant的专栏</A></H1>
<H2>彩色蚂蚁的Linux博客</H2>
<UL id=personalnav>
  <LI><A href="http://hi.csdn.net/my.html" target=_blank>欢迎 
zhenwenxian!</A></LI>
  <LI><A href="http://writeblog.csdn.net/Signout.aspx">退出</A></LI>
  <LI><A href="http://blog.csdn.net/zhenwenxian">我的博客</A></LI>
  <LI><A href="http://writeblog.csdn.net/configure.aspx" 
  target=_blank>配置</A></LI>
  <LI><A href="http://writeblog.csdn.net/PostEditPlain.aspx" 
  target=_blank>写文章</A></LI>
  <LI><A href="http://writeblog.csdn.net/PostList.aspx" 
  target=_blank>文章管理</A></LI>
  <LI><A href="http://blog.csdn.net/" target=_blank>博客首页</A></LI></UL>
<UL id=blogsearchsty>
  <LI><INPUT class=bolgsearch id=inputSearch 
onkeydown="return keyb(event)"></LI>
  <LI class=selectsty><SELECT id=Search_ddlSearchScope 
  name=Search:ddlSearchScope><OPTION value=all selected>全站</OPTION><OPTION 
    value=colorant>当前博客</OPTION></SELECT></LI>
  <LI><INPUT class=bolggobtn onclick=checkNull() type=button value=搜索></LI></UL>
<UL id=menu>
  <LI><A href="http://hi.csdn.net/colorant">空间</A></LI>
  <LI><A class=on href="http://blog.csdn.net/colorant">博客</A></LI>
  <LI><A 
  href="http://hi.csdn.net/colorant/profile/contactlist/1.html">好友</A></LI>
  <LI><A href="http://album.hi.csdn.net/" target=_blank>相册</A></LI>
  <LI><A class=last 
  href="http://hi.csdn.net/colorant/profile/notebook/1.html">留言</A></LI></UL></DIV>
<DIV id=csdnblog_content>
<DIV class=gutter>
<DIV class=default_contents>
<DIV class=user_article>
<SCRIPT 
src="Android Kernel Porting 的简单总结文档 - colorant的专栏 - CSDN博客.files/LoadFeedbackCount.js" 
type=text/javascript></SCRIPT>

<H1 class=title_txt><IMG height=16 alt=原创 
src="Android Kernel Porting 的简单总结文档 - colorant的专栏 - CSDN博客.files/authorship.gif" 
width=15 border=0>&nbsp;Android Kernel Porting 的简单总结文档<CITE 
class=fav_csdnstylebykimi><A class=fav_csdnstylebykimi title=收藏到我的网摘中,并分享给我的朋友 
href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏</A></CITE></H1>
<DIV class=blogstory>
<SCRIPT>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</SCRIPT>

<P> </P>
<H1><SPAN style="FONT-WEIGHT: bold">Simple Guide for Porting Android 
Kernel</SPAN></H1>
<DIV style="BACKGROUND: white" align=right>作者:刘旭晖 <SPAN><A 
href="mailto:colorant@163.com">colorant@163.com</A> </SPAN>转载请注明出处</DIV>
<DIV style="BACKGROUND: white" align=right><SPAN style="COLOR: navy"><A 
href="http://blog.csdn.net/colorant/">http://blog.csdn.net/colorant/</A></SPAN></DIV>
<DIV style="BACKGROUND: white">&nbsp;</DIV>
<DIV 
style="BACKGROUND: white; TEXT-INDENT: 21pt">移植Android的kernel到实际的硬件平台上,很多人很早就做过这件事了,不过相关的文档和经验总结不多,我就写一个吧,也为了自己记录一下大致的流程,以后好继续。</DIV>
<DIV style="MARGIN-TOP: 31.2pt"><STRONG><FONT size=6><SPAN>1<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>Android内核Porting相关背景知识</FONT></STRONG></DIV>
<DIV><STRONG><FONT size=5><SPAN>1.1<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>运行平台</FONT></STRONG></DIV>
<DIV>Google的Android平台到今天为止(2008-2-27),应用层部分还是以二进制的Binary的形式发布的,其编译的目标平台是ARM926EJ-S的CPU属于ARMV5T的版本,所以ARMV4架构的CPU平台无法使用其二进制代码。关于这点,可以参考下面这篇文章,Benno在此做了详尽的理论分析和代码测试:<A 
href="http://benno.id.au/blog/2007/11/21/android-neo1973">http://benno.id.au/blog/2007/11/21/android-neo1973</A></DIV>
<DIV>所以目前只有基于ArmV5或以上的架构的平台可以实际运行Android。</DIV>
<DIV><STRONG><FONT size=5><SPAN>1.2<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>软件环境</FONT></STRONG></DIV>
<DIV>SDK下载:<A 
href="http://code.google.com/android/download_list.html">http://code.google.com/android/download_list.html</A></DIV>
<DIV>KERNEL,模拟环境等SRC包下载:<A 
href="http://code.google.com/p/android/downloads/list">http://code.google.com/p/android/downloads/list</A></DIV>
<DIV><STRONG><FONT size=4><SPAN>1.2.1<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>Kernel</FONT></STRONG></DIV>
<DIV>到M5-r14 release 
为止,Android的Kernel是基于Linux2.6.23的内核开发的,主要添加了一个名为Goldfish的虚拟CPU以及Android所需相关特定驱动代码。</DIV>
<DIV>你需要一个支持EABI的内核作为你内核Porting的起点(最低版本?不知道,只要EABI 
OK,应该没有本质区别,但是,Android的很多驱动依赖于2.6.23的内核API,版本越低的内核,移植修改内核相关代码的工作量越大)</DIV>
<DIV><STRONG><FONT size=4><SPAN>1.2.2<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>Tools chain</FONT></STRONG></DIV>
<DIV>SDK中的内核使用的是4.2.1版本的GCC,基本上,你需要的是一个支持EABI的工具链,比如你可以使用Codesourcery的最新工具链:<A 
href="http://www.codesourcery.com/">http://www.codesourcery.com/</A></DIV>
<DIV>&nbsp;</DIV>
<DIV><STRONG><FONT size=4><SPAN>1.2.3<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>其它工具</FONT></STRONG></DIV>
<DIV>Android的Emulator是一个很好的仿真工具,其底层是基于QEMU来实现的,可以使用SDK中的adb工具登陆Emulator的控制台,和控制台交换文件等,用于获取你所需的信息。</DIV>
<DIV>&nbsp;</DIV>
<DIV><STRONG><FONT size=5><SPAN>1.3<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>相关论坛资源等</FONT></STRONG></DIV>
<DIV><A href="http://benno.id.au/blog/">http://benno.id.au/blog/</A></DIV>
<DIV><A 
href="http://groups.google.com/group/android-internals">http://groups.google.com/group/android-internals</A></DIV>
<DIV><A 
href="http://groups.google.com/group/android-developers">http://groups.google.com/group/android-developers</A></DIV>
<DIV style="MARGIN-TOP: 31.2pt"><STRONG><FONT size=6><SPAN>2<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>Porting基本思路</FONT></STRONG></DIV>
<DIV><STRONG><FONT size=5><SPAN>2.1<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>所需资源</FONT></STRONG></DIV>
<DIV><STRONG><FONT size=4><SPAN>2.1.1<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>硬件</FONT></STRONG></DIV>
<DIV>首先,当然是需要一个可以用来向上porting的硬件开发板了,对硬件的需求除了上面说的,需要ArmV5+兼容的CPU以外,最低要求基本需要64M+的内存,64M-128M+的FLASH(取决于你加载文件系统的方式,如果可以透过网络使用NFS-ROOT或者MMC卡等来存放文件系统的话,这个应该就无所谓了)</DIV>
<DIV><STRONG><FONT size=4><SPAN>2.1.2<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>软件</FONT></STRONG></DIV>
<DIV>除了上述kernel和tools 
chain,为了方便调试,最好有静态编译的Busybox和Strace等工具。也可以从Benno的blog上下载到他编译好的版本。</DIV>
<DIV>&nbsp;</DIV>
<DIV><STRONG><FONT size=5><SPAN>2.2<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>基本流程</FONT></STRONG></DIV>
<DIV>下载Android内核代码</DIV>
<DIV>下载官方2.6.23内核</DIV>
<DIV>制作Android和2.6.23内核的diff文件</DIV>
<DIV>去除diff文件中和Goldfish和QEMU相关的代码,如果你的系统已经支持YAFFS2,还可以去除这部分代码</DIV>
<DIV>将diff文件Patch到你自己的内核上,如果需要,修改内核相关文件代码使得patch能够顺利完成。(这部分大概是主要的工作量,如果你的内核版本差得比较远的话 
8 )</DIV>
<DIV>如果必要,修改你的内核代码中Framebuffer的驱动,使其Virtual_yres 
等于两倍的Yres,并实际分配两倍分辨率大小的framebuffer内存。</DIV>
<DIV>配置内核,确保下列内容得到配置:</DIV>
<DIV style="MARGIN-LEFT: 10.5pt">CONFIG_ARM_THUMB=y</DIV>
<DIV 
style="MARGIN-LEFT: 31.5pt">CONFIG_AEABI=y<BR>CONFIG_BINDER=y<BR>CONFIG_ANDROID_LOG=y<BR>CONFIG_ANDROID_POWER=y<BR>CONFIG_ANDROID_POWER_STAT=y</DIV>
<DIV>从SDK中获取Android的文件系统,基本上你只需要System etc sbin 
init这几个目录/文件就可以了,其它自建,其中data目录是有内容的,但是这个目录的内容可以由Android在启动时动态的创建出来。(可以使用adb工具在EMULATOR先tar包装,再拷贝出来。M3的release也可以从benno那里直接拿到他抓出来的文件系统)</DIV>
<DIV>确保你的dev目录下有足够系统启动的设备节点,如console等,其它的节点Android在启动过程中会自动创建出来。</DIV>
<DIV>使用NFSROOT或者chroot等手段启动Android的文件系统。</DIV>
<DIV>&nbsp;</DIV>
<DIV>启动流程的大致外在表现分阶段依次是:</DIV>
<DIV>&nbsp;</DIV>
<DIV><SPAN>Ø<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>LCD上出现Android几个字符</DIV>
<DIV><SPAN>Ø<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>LCD短时间的Blank</DIV>
<DIV><SPAN>Ø<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>LCD上出现一个左右滚动的红色滚动条 (如果有问题,基本上就死在这一步了 8 )</DIV>
<DIV><SPAN>Ø<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>进入主界面</DIV>
<DIV>&nbsp;</DIV>
<DIV>目前为止我的状态是:键盘可以工作,触摸屏有响应但是未校准,位置不对,启动最后阶段以及之后启动新的程序,出现Vmalloc分配内存Failed问题,导致如Brower等应用程序不能完全启动。其它网络等东东还没开始看呢 
8 )</DIV>
<DIV style="MARGIN-TOP: 31.2pt"><STRONG><FONT size=6><SPAN>3<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>一些TIPS</FONT></STRONG></DIV>
<DIV>&nbsp;</DIV>
<DIV><SPAN>Ø<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>Android会对文件使用<SPAN>memory 
mapped</SPAN>的方式进行操作,JFFS2不支持这种操作,所以要使用别的文件系统。当然也有绕过去的办法,自己搜一下吧&nbsp;8 )</DIV>
<DIV>&nbsp;</DIV>
<DIV><SPAN>Ø<SPAN 
style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN></SPAN>为了方便测试,可以修改/etc/init.rc,注释掉 
runtime,dbus-daemon,Xzygote等相关内容,在init启动以后再手工启动这些进程:</DIV>
<DIV style="MARGIN-LEFT: 0cm">&nbsp;</DIV>
<DIV style="MARGIN-LEFT: 21pt">/system/bin/app_process -Xzygote /system/bin 
--zygote &amp;</DIV>
<DIV style="MARGIN-LEFT: 21pt">/system/bin/dbus-daemon --system --nofork 
&amp;</DIV>
<DIV style="MARGIN-LEFT: 21pt">sleep 1;</DIV>
<DIV style="MARGIN-LEFT: 21pt">/system/bin/runtime &amp;</DIV>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -