当前位置: 代码迷 >> Android >> 利用HaRET移栽android - 老知识收藏
  详细解决方案

利用HaRET移栽android - 老知识收藏

热度:13   发布时间:2016-05-01 15:38:41.0
利用HaRET移植android - 老知识收藏

利用HaRET移植android - 老知识收藏
2011年02月20日
  http://www.handhelds.org/moin/moin.cgi/HaRET
  1. 首先我们大家都知道Android是基于Linux之上的一个软件平台,Android移植的大部分工作其实是Linux到P535的移植。所以,我们首先需要完成Linux的移植。
  2. P535原本是Windows Mobile系统(以下简称WM),因此需要解决如何从WM引导进入Linux的问题。烧boot是不可能了,我只有一台P535,可不想把3000多大洋换成砖头。幸好有HaRET这个好工具,它运行在WM下,可以直接读取linux的zImage文件实现内核加载。所以,欲练神功,必先...
  学习HaRET,主页地址: http://www.handhelds.org/moin/moin.cgi/HaRET
  3. 接下来要编译一个能在P535上跑起来的linux内核文件zImage。从www.kernel.org下载下来的linux源代码编译生成的zImage是无法直接跑起来的,因为缺了对P535硬件设备的驱动支持。最好有一套能直接支持P535设备的Linux源代码,有吗?没有。如果有的话这移植工作就太没劲了。不过,我们可以找到一个好的起点。请访问链接:
  http://www.handhelds.org/moin/moin.cgi/GettingHandheldKernels
  handhelds是一个组织,他们的工作就是移植linux到各种PDA上面,包括HP、HTC、DELL等等,还有Asus,不过都是一些老的型号,不包括P535。这个组织似乎有一两年没什么动静了,他们的Familiar项目最后版本v0.84发布日期是06年8月20日。所以指望他们去更新支持P535是不可能了,我还尝试过发邮件想加入他们的队伍,结果没人理我:( 。
  看来只能自力更生了。他们虽然不更新了,但是他们的网站依然屹立。从上面的链接,我们可以下载到他们维护的最近的linux源代码版本2.6.21。这个版本就是我们的出发点。
  4. 载下来的这套源代码我们称为handheld linux2.6.21,它与官方linux2.6.21的区别在于增加了对很多PDA设备的驱动支持。虽然不包括P535,但我们可以参考其他类似设备完成对我们设备的驱动支持。我当时参考的其它设备主要有:Asus A730, Asus 696, HTC magician等。因为P535的很多硬件部件的芯片型号与这几款设备相同。
  那如何知道P535使用的都是什么芯片呢?这得下点狠功夫了,拆机!而且是很彻底的那种。不狠一点怎么能体会到干底层工作的乐趣?!心肠不够狠的弟兄可以参考我拆机后拍的照片。
  http://sites.google.com/site/siteofhx/Home/android/p535-hardware
  我这台已经被我肢解过好几十次了,之前换触摸屏、升级内存都是大手术,能幸存下来真是顽强。
  5. 知道了硬件芯片型号,可又不知道管脚连接,又不可能向Asus要电路图,怎么办?认真学习并操练过前面几个步骤的弟兄可能已经有答案了。HaRET这个工具再次出马,所以要不我怎么说欲练神功,必先....
  通过HaRET这个工具,我们可以知道P535中各个部件对应的GPIO,最重要的是搞清楚键盘、LCD、触摸屏,这三个硬件驱动的成功移植是我们的首要目标,这样才能体验到Android Touch操作的快感!
  6. OK,这几项准备工作完成后,您就可以开始埋头苦干了,写代码、编译、调试、拷贝、粘贴,快的话几天,慢的话几周,最后炮制出一个能在自己的机器上跑起来的zImage文件。
  对了,得用这个交叉编译器:
  http://www.codesourcery.com/gnu_ ... c-linux-gnu.tar.bz2
  7. 光有zImage最多只能进入黑漆漆的命令行界面,无法验证键盘、液晶和触摸屏是否工作正常,解决这个问题,您可以到这里:
  http://familiar.handhelds.org/re ... /files/ipaq-pxa270/
  下载一个rootfs系统,准备一张空闲的SD卡,将下载的文件解到卡中,然后通过HaRET引导您炮制好的linux kernel,启来后执行rootfs中的初始化脚本,进入GPE或者OPIE的图形界面,这时您就可以验证您的键盘、LCD和触摸屏驱动是否正常工作了。
  如果还不正常,那再埋头苦干吧,这关必须过了才能继续往下走。
  8. 过了上一关,Linux的移植已经被你踩在了脚下,您一定有一点兴奋感和成就感了。别急,让我们继续往上爬。
  Android SDK 1.0使用的linux版本是2.6.25,而我们刚刚完成移植的版本是2.6.21,要知道他们之间有什么不同吗?在此推荐一个非常棒的工具,Meld Diff Viewer,有了它,后面的工作将变得易如反掌。
  从Kernel.org下载一份官方的2.6.25,同您刚完成的handheld 2.6.21比较一下,不比不知道,一比吓一跳!改动的地方是不是很多?不要怕,让我们一步一步搞定。
  我们之前的移植是基于handheld的版本完成的,多少有点让我们感觉是踩在了别人的肩膀上爬上来的。没关系,至少我们学会了爬。现在让我们回到地上,自己爬上来。
  从Kernel.org再下载一份官方的2.6.21,用Meld同前面的handheld 2.6.21比较一下,将官方版本缺少的驱动合并过来,不要一股脑全部合并过来,看看您的P535缺少什么才合并什么,这样子您就非常清楚从官方下载的linux需要增加哪些驱动才能在您的机器上跑起来。
  合并完成后,编译和调试您的官方2.6.21版本,让它也能顺利的跑起来,进入GPE和OPIE图形界面。
  9. 把移植成功的官方2.6.21,同前面下载的官方2.6.25进行比较,官方比官方,差别是不是没那么恐怖了?同样,将2.6.25缺少的驱动文件从2.6.21合并过来,编译调试,让2.6.25也跑起来。
  10. OK,下面我们要真正开始同Android打交道了。
  先下载 Android 使用的linux版本,地址在此:http://code.google.com/p/android/downloads/list
  再下载Android SDK 1.0:http://code.google.com/android/download.html
  照此教程从SDK中提取Android的rootfs:http://discuz-android.blogspot.c ... id-file-system.html
  现在就差Android的linux zImage了。
  11. 将Android linux2.6.25同前面移植完成的官方linux2.6.25比较,找出其中的异同,将官方2.6.25缺少的东东从Android linux2.6.25合并过来,注意不要搞错方向了。其中,凡是涉及QEMU、Goldfish及yaffs2的内容没有用处,不要合并过来。您会发现其实Android对linux的改动很小。
  这一步的详细操作请参考这个链接:http://elinux.org/Android_on_OMAP
  然后编译,又得到一个zImage. 调试它,让它能顺利引导进入Android rootfs中的初始化脚本。
  12. 引导进入Android的图形界面不像进入GPE和OPIE那么顺利,因为Android对LCD驱动有特殊的要求,需要Frame Buffer驱动支持double buffering 和 pan function。您需要参考这个帖子:http://androidzaurus.seesaa.net/article/105551643.html 或者 http://www.androidrd.com/thread-9-1-1.html 完成对2.6.25自带的Frame Buffer驱动的修改。
  LCD驱动完成后就可以看到闪闪发光的 Android 机器人,并进入令人激动的 Android 界面了。
  13. 但等等,触摸屏还不能正常工作!再漂亮的界面,不能 Touch哪来的快感?所以,一定要挺住,完成这最后一步。
  Touchscreen驱动移植的关键在于2.6.25自带的WM97XX触摸驱动在pen点击屏幕时,没有发送 BTN_TOUCH 事件给上层,这在GPE下可以正常工作,但 Android可不理你,一点反应没有,因此,修改您的驱动,让它向Android发出求爱信息吧!
  此外,触摸驱动发出的X坐标是对的,Y坐标是倒过来的,您需要修改驱动纠正一下姿势。参考:http://androidzaurus.seesaa.net/article/90045743.html
  相关解决方案