光进铜退几年了没见到比 中兴 F460 F660 更强性能的板子,不过听说华勤 HGU420G 也是 Marvell 88F6560 了,那么谁有这个猫眯,可以把固件提取出来玩玩。( @' B& m% L5 x9 G. q
( D1 X# s6 W) j# T- \好的硬件却没有自由的软件系统,着实可惜,于是开始自己动动手。先找找论坛网友的肩膀,发现1位前辈已做好一个集成busybox的版本,刷上一试,不错。但还是不甘心,flash 剩余空间太小,发挥余地不大。
_' S" l5 D! ?5 p+ x: i6 [ J1 Z- x
看了眼分区布局,kernel0 kernel1 互相备份,那就舍去这个可靠性,利用其中一个12兆的空间。先去掉原来kernel中的 ramdisk 集成的 rootfs , 将 kernel 恢复到 2M以内,再把原来所有根系统文件制作成 jffs2 ,写入到 kernel 分区后面,这样 root空间一共约 22兆,足以利用 open-wrt 那么多现成的优秀应用程序了。
4 {, q( M1 n! g- A& R
) o% U% w9 J" k- v3 P接下来 MOD uboot,发现这里面也有中兴定制的一堆校验逻辑,本来人家 u-boot 源码只是要去执行 bootcmd 的指令。先分析分析原始 u-boot 代码,在对比一下现在的uboot反汇编后的结果,最终还是恢复了原来启动的流程,跳过了中兴的那些小动作。 这下在 bootcmd 把新的 mtdparts 布局写好,传给kernel 就基本正常启动到 login 了。
/ b; r2 E2 Q$ Q$ t
+ L2 T4 s+ m1 L+ L( J" R3 R u7 E& Y6 k1 A/ u( X; [0 W
但可惜 u-boot 本身还被 Marvell 的 BootROM 给保护了一下,一开始刷上修改 u-boot 竟然被拒绝引导,幸好提前在某个空闲 flash 的 0x4000 整数倍地址处留了一个原始的 u-boot 备份。 呵呵,BootROM 还是比较放水的,0x0 的 u-boot 不给执行,它还热心的帮我查找所有0x4000 整数倍地址,只要发现认可的 u-boot 都给放行。
; {/ f/ K8 f7 L6 g6 n$ _
9 \$ S. D9 U$ r9 K+ @ R! K! J" B7 }) B, l: j$ A/ p- _8 y
BootROM 即没有开源的代码,也是只读的,修改不了,好在 Marvell 的同一个开源硬件系列提供了 pdf 指导,看了看知道了对 u-boot 的要求只是一个 32位的 Rolling Checksum。 u-boot 大概有 240kB ,当然不能自己心算,又不想写 c代码,嫌麻烦, 老美的Google 一搜,哈,发现著名的 谷歌光纤 gufiber 110 也是用的这个芯片,并且开源了,赶紧拖回来,找到里面有个 doimage.c 包含了我需要的代码,自己添加一个 printf 把计算出的校验和显示出来即可。9 a, L& U8 P1 c5 B" C0 f
; r. x# x# h! O# e
从 rootfs 到 kernel 再到 uboot 最后 BootROM 都吃透了,这游戏也就可以告一段落。最后赞一下 Marvell 的 BootROM , 它的 UART 方式可以很方便的引导任何程序,不论 flash 怎样乱刷,总可以最后恢复,设备永不变砖。 仔细看看板子就会发现,除了 TTL 那4个针脚,还有一个 2 Pin 的东东,帅啊,这个就是 UART 开关哦,通向自由的大门。6 u: I% j( r$ o7 X4 w
9 [1 q. h1 c" Y% U
- N7 } ~/ d a& A. f# A6 A
; H B2 @$ w$ ]) @- v7 u5 }8 e$ M/ d* e9 l' ~9 a* ?6 ^- {
2 Z3 a0 c; l/ q: ^1 C------------------------------------------------------------------------- 【纯粹发发牢骚,望坛友包涵】. l" R4 M& {0 b9 N8 y
_7 c: A- ]2 j( `4 P
9 m5 b8 g+ ~- I# Q! @1 {5 V4 K# o
' m [) ~ E, j% f% b& v
% o- Q/ P+ D2 b5 r# Y6 Y1 A- r( t5 T g7 f
5 x$ M, K- H' Z' z+ x N4 S
|