|
楼主 |
发表于 2009-3-12 10:39
|
显示全部楼层
http://www.androidin.com/bbs/vie ... &extra=page%3D1
/ D! p2 O( j+ l( S. Y% t
/ R6 f* g7 Y; ?/ P7 gLCD、键盘及触摸屏都已正常工作。
# K- x* u! R! \9 u0 k- p7 V3 \9 q. K7 K8 H) K
演示视频见此:
! z# j# c3 \3 a, @, n. I( Ahttp://www.youtube.com/watch?v=0GZwguPJCmI% \) a+ N/ `; N6 B
$ e- |) C9 K. V8 ^, h, |: e
运行文件下载地址:
6 p$ {" }9 [$ k2 u0 \http://www.rayfile.com/files/603 ... -b77a-0014221b798a/
2 v0 r) N1 j( x" g1 V! F2 E7 P下载后打开readme文件查看如何运行。* R6 f$ \, {/ B% ^, x
7 C5 X4 X$ b: I2 u5 ~+ V! o1. 首先我们大家都知道Android是基于Linux之上的一个软件平台,Android移植的大部分工作其实是Linux到P535的移植。所以,我们首先需要完成Linux的移植。- M/ i2 U- g V! i- A( T& \
4 f4 g+ E0 d, Y1 j2. P535原本是Windows Mobile系统(以下简称WM),因此需要解决如何从WM引导进入Linux的问题。烧boot是不可能了,我只有一台P535,可不想把3000多大洋换成砖头。幸好有HaRET这个好工具,它运行在WM下,可以直接读取linux的zImage文件实现内核加载。所以,欲练神功,必先...# c6 |2 `' ]! n6 a4 D. P
学习HaRET,主页地址: http://www.handhelds.org/moin/moin.cgi/HaRET& x7 p5 A* ]- d6 ~
/ s$ A1 R! S$ E
3. 接下来要编译一个能在P535上跑起来的linux内核文件zImage。从www.kernel.org下载下来的linux源代码编译生成的zImage是无法直接跑起来的,因为缺了对P535硬件设备的驱动支持。最好有一套能直接支持P535设备的Linux源代码,有吗?没有。如果有的话这移植工作就太没劲了。不过,我们可以找到一个好的起点。请访问链接:
# |2 H# r" D( [' p& ]http://www.handhelds.org/moin/moin.cgi/GettingHandheldKernels% a, w& A# v1 a6 u: q. B
handhelds是一个组织,他们的工作就是移植linux到各种PDA上面,包括HP、HTC、DELL等等,还有Asus,不过都是一些老的型号,不包括P535。这个组织似乎有一两年没什么动静了,他们的Familiar项目最后版本v0.84发布日期是06年8月20日。所以指望他们去更新支持P535是不可能了,我还尝试过发邮件想加入他们的队伍,结果没人理我:( 。
# O/ `8 Y3 u9 _- {; N! I5 K+ m% p9 N
看来只能自力更生了。他们虽然不更新了,但是他们的网站依然屹立。从上面的链接,我们可以下载到他们维护的最近的linux源代码版本2.6.21。这个版本就是我们的出发点。2 R; N- z3 n+ Z2 p; I9 @! X
5 G2 `8 c7 c9 x+ F0 ~: @1 ^4. 载下来的这套源代码我们称为handheld linux2.6.21,它与官方linux2.6.21的区别在于增加了对很多PDA设备的驱动支持。虽然不包括P535,但我们可以参考其他类似设备完成对我们设备的驱动支持。我当时参考的其它设备主要有:Asus A730, Asus 696, HTC magician等。因为P535的很多硬件部件的芯片型号与这几款设备相同。
9 {' ^# q1 c- g8 R5 a a7 U5 T2 v( G; t+ T7 X" N
那如何知道P535使用的都是什么芯片呢?这得下点狠功夫了,拆机!而且是很彻底的那种。不狠一点怎么能体会到干底层工作的乐趣?!心肠不够狠的弟兄可以参考我拆机后拍的照片。
) O7 u% ]$ j; F* z- g8 f; Ohttp://sites.google.com/site/siteofhx/Home/android/p535-hardware
9 m3 K$ f# I0 h/ c, } Z% e$ X9 O我这台已经被我肢解过好几十次了,之前换触摸屏、升级内存都是大手术,能幸存下来真是顽强。
/ r- g B) q( v1 x8 x+ c
& J' Z9 u4 D4 {. r7 e5. 知道了硬件芯片型号,可又不知道管脚连接,又不可能向Asus要电路图,怎么办?认真学习并操练过前面几个步骤的弟兄可能已经有答案了。HaRET这个工具再次出马,所以要不我怎么说欲练神功,必先....
- A; ]1 Q0 g+ F4 t; p) |: a
3 Z: w, w/ V- n通过HaRET这个工具,我们可以知道P535中各个部件对应的GPIO,最重要的是搞清楚键盘、LCD、触摸屏,这三个硬件驱动的成功移植是我们的首要目标,这样才能体验到Android Touch操作的快感!
2 G( `# ?) x/ j, r0 B* \& O' `+ }6 a
% V- y* s% c$ z6. OK,这几项准备工作完成后,您就可以开始埋头苦干了,写代码、编译、调试、拷贝、粘贴,快的话几天,慢的话几周,最后炮制出一个能在自己的机器上跑起来的zImage文件。
5 y2 v. A2 T% R
5 i8 {' n0 A- r5 v对了,得用这个交叉编译器:
: K- o* x* h, X3 Jhttp://www.codesourcery.com/gnu_ ... c-linux-gnu.tar.bz2( Y, Y4 K; k$ ~8 d
9 B6 G5 ]( L# P' z$ S/ {# p# A7. 光有zImage最多只能进入黑漆漆的命令行界面,无法验证键盘、液晶和触摸屏是否工作正常,解决这个问题,您可以到这里:* B/ H* E T1 A g. A& p# E) |
http://familiar.handhelds.org/re ... /files/ipaq-pxa270/
& W7 H5 O. B. h下载一个rootfs系统,准备一张空闲的SD卡,将下载的文件解到卡中,然后通过HaRET引导您炮制好的linux kernel,启来后执行rootfs中的初始化脚本,进入GPE或者OPIE的图形界面,这时您就可以验证您的键盘、LCD和触摸屏驱动是否正常工作了。
2 @* u) c3 Q' l: C0 X) U+ ?" _8 v' k1 x; O, b) H4 C p
如果还不正常,那再埋头苦干吧,这关必须过了才能继续往下走。) h2 j2 w9 N+ T3 b1 Z
# `& F4 K& Z# `
8. 过了上一关,Linux的移植已经被你踩在了脚下,您一定有一点兴奋感和成就感了。别急,让我们继续往上爬。" T* W1 u- ~- i: c! u
& J$ B5 ]$ a' ?, cAndroid SDK 1.0使用的linux版本是2.6.25,而我们刚刚完成移植的版本是2.6.21,要知道他们之间有什么不同吗?在此推荐一个非常棒的工具,Meld Diff Viewer,有了它,后面的工作将变得易如反掌。0 X" |( X. h/ x; b
从Kernel.org下载一份官方的2.6.25,同您刚完成的handheld 2.6.21比较一下,不比不知道,一比吓一跳!改动的地方是不是很多?不要怕,让我们一步一步搞定。
$ A; ?5 L) S! W4 q: @ @" |6 `
) `7 z0 t$ { A" n% j' `3 v/ Z: h我们之前的移植是基于handheld的版本完成的,多少有点让我们感觉是踩在了别人的肩膀上爬上来的。没关系,至少我们学会了爬。现在让我们回到地上,自己爬上来。
) G. X! i3 O' l+ K$ E0 |从Kernel.org再下载一份官方的2.6.21,用Meld同前面的handheld 2.6.21比较一下,将官方版本缺少的驱动合并过来,不要一股脑全部合并过来,看看您的P535缺少什么才合并什么,这样子您就非常清楚从官方下载的linux需要增加哪些驱动才能在您的机器上跑起来。; g" D+ [0 _/ H9 g
, c6 \7 ?9 F! u# K$ ^合并完成后,编译和调试您的官方2.6.21版本,让它也能顺利的跑起来,进入GPE和OPIE图形界面。9 g2 s4 O$ P9 {
) t# V# s0 `9 q: |( P6 Z- p$ p' P! C
9. 把移植成功的官方2.6.21,同前面下载的官方2.6.25进行比较,官方比官方,差别是不是没那么恐怖了?同样,将2.6.25缺少的驱动文件从2.6.21合并过来,编译调试,让2.6.25也跑起来。
$ C1 B& x* A! |' R- {
1 m% W; J+ [) `& K# S10. OK,下面我们要真正开始同Android打交道了。, q5 g- h& E# c" [3 Y' @7 U- Z
先下载 Android 使用的linux版本,地址在此:http://code.google.com/p/android/downloads/list0 Z% A% [" H* j* T$ A% b' ]: t
再下载Android SDK 1.0:http://code.google.com/android/download.html1 A) U ]# s% g' s3 u( C: W; v% [
照此教程从SDK中提取Android的rootfs:http://discuz-android.blogspot.c ... id-file-system.html
( z1 P/ ^' J! B3 h1 |/ l- u0 h6 M+ C! y% ]. r
现在就差Android的linux zImage了。
# E4 O& S: }5 f! B1 E
5 f, a3 m2 ]6 U) z11. 将Android linux2.6.25同前面移植完成的官方linux2.6.25比较,找出其中的异同,将官方2.6.25缺少的东东从Android linux2.6.25合并过来,注意不要搞错方向了。其中,凡是涉及QEMU、Goldfish及yaffs2的内容没有用处,不要合并过来。您会发现其实Android对linux的改动很小。& w( w- Z ]. S7 c& Y5 t
这一步的详细操作请参考这个链接:http://elinux.org/Android_on_OMAP Y2 a1 b: k4 \% V+ X$ j: A
6 B5 }. j7 U6 x7 k
然后编译,又得到一个zImage. 调试它,让它能顺利引导进入Android rootfs中的初始化脚本。
: q3 K& x$ V7 _% u i: q
+ N @4 ]4 x) t% z( W/ y% G8 v. H12. 引导进入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驱动的修改。
, f: X2 x. C+ h$ E" h, V( q* v7 c7 Z# a7 K% p
LCD驱动完成后就可以看到闪闪发光的 Android 机器人,并进入令人激动的 Android 界面了。' O. z" |3 o' N( I& c- s& [! J
/ J4 ^* }! o# q9 I* l3 Z13. 但等等,触摸屏还不能正常工作!再漂亮的界面,不能 Touch哪来的快感?所以,一定要挺住,完成这最后一步。! I8 [8 g( K* o" V9 Y, A$ n v
Touchscreen驱动移植的关键在于2.6.25自带的WM97XX触摸驱动在pen点击屏幕时,没有发送 BTN_TOUCH 事件给上层,这在GPE下可以正常工作,但 Android可不理你,一点反应没有,因此,修改您的驱动,让它向Android发出求爱信息吧!
# w h" z Q. q8 q( D) P7 G; Z2 N2 i- x: F
此外,触摸驱动发出的X坐标是对的,Y坐标是倒过来的,您需要修改驱动纠正一下姿势。参考:http://androidzaurus.seesaa.net/article/90045743.html |
|