|
楼主 |
发表于 2009-3-12 10:39
|
显示全部楼层
http://www.androidin.com/bbs/vie ... &extra=page%3D12 k7 z# [/ O6 G w( O
. o V& V" N5 V7 [
LCD、键盘及触摸屏都已正常工作。 g7 Z7 V$ i" ]& _/ O
, e0 h# L i9 a
演示视频见此:
( i. i0 }* M$ ohttp://www.youtube.com/watch?v=0GZwguPJCmI/ ? {% K) ^: F% O6 z1 P
9 E" E4 l d+ R/ B, p0 \运行文件下载地址:
+ q# q2 n+ n, Ghttp://www.rayfile.com/files/603 ... -b77a-0014221b798a/
) w- K' x5 P# r5 W: e0 r下载后打开readme文件查看如何运行。
$ A2 i9 T8 @" p1 b & C# ~% z) n+ v) u1 Z
1. 首先我们大家都知道Android是基于Linux之上的一个软件平台,Android移植的大部分工作其实是Linux到P535的移植。所以,我们首先需要完成Linux的移植。8 Z5 h8 h1 u" |( M: {. I
( @$ `& m6 ?; Q3 k. U2. P535原本是Windows Mobile系统(以下简称WM),因此需要解决如何从WM引导进入Linux的问题。烧boot是不可能了,我只有一台P535,可不想把3000多大洋换成砖头。幸好有HaRET这个好工具,它运行在WM下,可以直接读取linux的zImage文件实现内核加载。所以,欲练神功,必先...$ s0 [) \. R5 ^9 ^% b$ r
学习HaRET,主页地址: http://www.handhelds.org/moin/moin.cgi/HaRET
- S5 u1 r+ c& J5 `1 b
2 g; ~- y6 a6 N$ A3. 接下来要编译一个能在P535上跑起来的linux内核文件zImage。从www.kernel.org下载下来的linux源代码编译生成的zImage是无法直接跑起来的,因为缺了对P535硬件设备的驱动支持。最好有一套能直接支持P535设备的Linux源代码,有吗?没有。如果有的话这移植工作就太没劲了。不过,我们可以找到一个好的起点。请访问链接:0 O" H2 x) p5 I; _ W9 Q2 ~7 L
http://www.handhelds.org/moin/moin.cgi/GettingHandheldKernels
9 }% s( `- O7 n" \( v/ ahandhelds是一个组织,他们的工作就是移植linux到各种PDA上面,包括HP、HTC、DELL等等,还有Asus,不过都是一些老的型号,不包括P535。这个组织似乎有一两年没什么动静了,他们的Familiar项目最后版本v0.84发布日期是06年8月20日。所以指望他们去更新支持P535是不可能了,我还尝试过发邮件想加入他们的队伍,结果没人理我:( 。% h- ?4 ]! s2 [ T. U% w4 |3 l
- Q3 K, v/ [% h看来只能自力更生了。他们虽然不更新了,但是他们的网站依然屹立。从上面的链接,我们可以下载到他们维护的最近的linux源代码版本2.6.21。这个版本就是我们的出发点。
4 |% w6 f# J0 l, e: _5 w, k. `( _: l- U
4. 载下来的这套源代码我们称为handheld linux2.6.21,它与官方linux2.6.21的区别在于增加了对很多PDA设备的驱动支持。虽然不包括P535,但我们可以参考其他类似设备完成对我们设备的驱动支持。我当时参考的其它设备主要有:Asus A730, Asus 696, HTC magician等。因为P535的很多硬件部件的芯片型号与这几款设备相同。
1 B+ t' |2 d( I, U |; z7 x: j/ O& s. T
那如何知道P535使用的都是什么芯片呢?这得下点狠功夫了,拆机!而且是很彻底的那种。不狠一点怎么能体会到干底层工作的乐趣?!心肠不够狠的弟兄可以参考我拆机后拍的照片。
: c, b( ?0 m( Z/ j$ a/ P4 ahttp://sites.google.com/site/siteofhx/Home/android/p535-hardware, H8 \$ X. r0 ^
我这台已经被我肢解过好几十次了,之前换触摸屏、升级内存都是大手术,能幸存下来真是顽强。& Q! z) E! ]- u
8 t0 D# U' n9 J! d( G5. 知道了硬件芯片型号,可又不知道管脚连接,又不可能向Asus要电路图,怎么办?认真学习并操练过前面几个步骤的弟兄可能已经有答案了。HaRET这个工具再次出马,所以要不我怎么说欲练神功,必先....
( F( A! z: {7 p) B, Z0 {2 N, s
( C: \) c/ \* F/ p# q通过HaRET这个工具,我们可以知道P535中各个部件对应的GPIO,最重要的是搞清楚键盘、LCD、触摸屏,这三个硬件驱动的成功移植是我们的首要目标,这样才能体验到Android Touch操作的快感!" V v1 }7 {' ?- E4 d' [% I- U. n
- \3 Z" ?8 n W* u6. OK,这几项准备工作完成后,您就可以开始埋头苦干了,写代码、编译、调试、拷贝、粘贴,快的话几天,慢的话几周,最后炮制出一个能在自己的机器上跑起来的zImage文件。
1 e- R9 N9 }( v" i- Y% n2 u- q' ], ~. o/ }
对了,得用这个交叉编译器:
( Y5 ?7 D; S3 C+ D9 |1 t5 rhttp://www.codesourcery.com/gnu_ ... c-linux-gnu.tar.bz2
" G9 ?1 H9 v; a. Y2 l7 G2 c& G }1 f% H. L ?" @3 r9 I3 i+ F$ F5 n
7. 光有zImage最多只能进入黑漆漆的命令行界面,无法验证键盘、液晶和触摸屏是否工作正常,解决这个问题,您可以到这里:
@ x# @& |) E6 y/ z8 N9 m& U& uhttp://familiar.handhelds.org/re ... /files/ipaq-pxa270/) p! {- V- i5 W. B8 \7 x: [
下载一个rootfs系统,准备一张空闲的SD卡,将下载的文件解到卡中,然后通过HaRET引导您炮制好的linux kernel,启来后执行rootfs中的初始化脚本,进入GPE或者OPIE的图形界面,这时您就可以验证您的键盘、LCD和触摸屏驱动是否正常工作了。
! f+ g: B& e O+ V' W7 \
0 K" h. v) D) E/ b如果还不正常,那再埋头苦干吧,这关必须过了才能继续往下走。
8 j+ }) Y' f. T4 Z8 f8 ]& |
* e. {6 O' I" V8. 过了上一关,Linux的移植已经被你踩在了脚下,您一定有一点兴奋感和成就感了。别急,让我们继续往上爬。. p% n J( ?! K% N. C* ]
& Z0 T( W# r+ j" q
Android SDK 1.0使用的linux版本是2.6.25,而我们刚刚完成移植的版本是2.6.21,要知道他们之间有什么不同吗?在此推荐一个非常棒的工具,Meld Diff Viewer,有了它,后面的工作将变得易如反掌。- T; `- t% w4 b/ v: l
从Kernel.org下载一份官方的2.6.25,同您刚完成的handheld 2.6.21比较一下,不比不知道,一比吓一跳!改动的地方是不是很多?不要怕,让我们一步一步搞定。7 j7 o9 y0 o! j& V9 C( k7 G4 k
* ~) Z O. W, V: |我们之前的移植是基于handheld的版本完成的,多少有点让我们感觉是踩在了别人的肩膀上爬上来的。没关系,至少我们学会了爬。现在让我们回到地上,自己爬上来。
* Q7 `0 }1 v6 @( O从Kernel.org再下载一份官方的2.6.21,用Meld同前面的handheld 2.6.21比较一下,将官方版本缺少的驱动合并过来,不要一股脑全部合并过来,看看您的P535缺少什么才合并什么,这样子您就非常清楚从官方下载的linux需要增加哪些驱动才能在您的机器上跑起来。
4 H. `9 i q4 X- v) t7 K q' _1 o- K$ f3 k3 l; j
合并完成后,编译和调试您的官方2.6.21版本,让它也能顺利的跑起来,进入GPE和OPIE图形界面。
! m6 ` M6 A& F+ }& |) C9 D, P% L% @- K+ D4 L
9. 把移植成功的官方2.6.21,同前面下载的官方2.6.25进行比较,官方比官方,差别是不是没那么恐怖了?同样,将2.6.25缺少的驱动文件从2.6.21合并过来,编译调试,让2.6.25也跑起来。, L8 F% x: n2 |2 L, n' L5 }
% m5 p, M3 B0 ~2 m8 Y5 u8 A10. OK,下面我们要真正开始同Android打交道了。4 q" `4 `, j6 H
先下载 Android 使用的linux版本,地址在此:http://code.google.com/p/android/downloads/list- Z8 K9 m0 N, n4 ]
再下载Android SDK 1.0:http://code.google.com/android/download.html
2 k. k) w& k6 E照此教程从SDK中提取Android的rootfs:http://discuz-android.blogspot.c ... id-file-system.html
' ]5 |' V. Y( f2 |9 r% ?1 l) A2 z. L1 w+ D
现在就差Android的linux zImage了。' c( N5 T: t ^8 x" h6 m3 F' ~
. N/ x$ a L9 j9 @" ^+ `/ b( H9 g) g11. 将Android linux2.6.25同前面移植完成的官方linux2.6.25比较,找出其中的异同,将官方2.6.25缺少的东东从Android linux2.6.25合并过来,注意不要搞错方向了。其中,凡是涉及QEMU、Goldfish及yaffs2的内容没有用处,不要合并过来。您会发现其实Android对linux的改动很小。' ^! L( x* {% o' A1 c: h
这一步的详细操作请参考这个链接:http://elinux.org/Android_on_OMAP5 l/ c" n4 |% V7 X' V7 J- f4 l: Y
( F, ~! m% o" Q( Z% @然后编译,又得到一个zImage. 调试它,让它能顺利引导进入Android rootfs中的初始化脚本。6 q! i) x/ j5 E! n) W5 \+ }4 @
9 P3 P N3 P8 ~+ I2 }& g' b
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驱动的修改。, F) v2 k& `' M" i' t2 O* c
; B# }5 u5 T% ~$ ^. g
LCD驱动完成后就可以看到闪闪发光的 Android 机器人,并进入令人激动的 Android 界面了。
2 V( B( s8 ^6 [& V/ {+ e% p. `, F! x& X5 R
13. 但等等,触摸屏还不能正常工作!再漂亮的界面,不能 Touch哪来的快感?所以,一定要挺住,完成这最后一步。
/ N n: W# Y% N. b `2 }: oTouchscreen驱动移植的关键在于2.6.25自带的WM97XX触摸驱动在pen点击屏幕时,没有发送 BTN_TOUCH 事件给上层,这在GPE下可以正常工作,但 Android可不理你,一点反应没有,因此,修改您的驱动,让它向Android发出求爱信息吧!' \7 s p) B `8 \7 z+ s$ a2 [
; p2 U8 e; o2 g; w' x! ]
此外,触摸驱动发出的X坐标是对的,Y坐标是倒过来的,您需要修改驱动纠正一下姿势。参考:http://androidzaurus.seesaa.net/article/90045743.html |
|