-
MSS小众改造之三--软硬件准备
2008-04-05
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://suanli.blogbus.com/logs/18316191.html
注意:从这篇开始涉及到软硬件的改造了,有造成硬件损坏,金钱损失的危险,本文仅记录我的改造过程,分享资料为同好者提供些经验。本人不承担您follow本文所造成的后果。操刀前请三思!

注意2:本文记录了我的改造过程,使用于开发人员,后面会写一份适合使用者的文章,步骤简单明确,如果你不是要从源代码级别修改,请耐心等待后续文章。===========正文分界线=======================
MSS在硬盘上没有使用分区表来实现硬盘的分区,而是直接从0磁道开始写数据了。所以MSS上的硬盘拿出来放到硬盘盒上并不能使用,在PC上会被认成一个没有分区的硬盘,数据没有办法读出来。而openwrt仍然使用分区表来实现硬盘的分区,硬盘拿出来放到PC上仍然能够使用。我比较倾向于这种用法,但是硬盘需要重新分区,硬盘的数据会丢失,所以先要备份硬盘数据。
1,备份硬盘资料和Flash内的数据
硬盘资料备份没什么特别的,就是要耐心,MSS拷贝数据实在速度太慢了。
备份Flash内资料。MSS用了一块2M的Flash,开机之后CPU从Flash开始执行。里面保存了bootloader,kernel,nvram的数据。因为openwrt的kernel也是写到Flash里面去的,为了防止写错了数据启动不起来,还是先备份一下Flash的数据。
如果你的MSS跑的是openmss,可以从命令行备份。用ssh或者telent登录到MSS上,然后用下面的命令导出Flash内的内容。dd if=/dev/mtd/0 of=/tmp/cfe.bin
dd if=/dev/mtd/1 of=/tmp/linux.bin
dd if=/dev/mtd/3 of=/tmp/nvramcopy.bin
dd if=/dev/mtd/4 of=/tmp/nvram.binLinux下通过MTD驱动来驱动Flash,MTD提供分区的概念,MSS上的Flash划分了5个分区:
-----------------------------------------------------------------------
| CFE | Linux | rootfs | nvramcopy | nvram |
-----------------------------------------------------------------------
其中rootfs是linux分区的一部分。所以备份的时候没有特别备份rootfs。
然后copy到共享目录下,再从PC端copy出来,保存好。
如果是用Jtag来备份的话可以选择备份整个Flash。后面硬件准备部分会提到
参考资料。2 硬件准备
串口是必须的,刷kernel读debug msg都离不开串口。
MSS的串口用的是TTL的电平,应该是0V代表数字0,5V或3.3V代表数字1。PC机标准的串口是
-12V代表数字0,+12V代表数字1。所以需要一个转接器才能接到PC串口上。这个电路是蛮常
见的,一般用MAX232芯片来实现。这里有份比较详细的介绍和电路图:RS232Converter。
MSS上的串口在J10上,靠近电源接口,在板子边缘,可以看到白色的丝印J10标识。
我的板子上没有焊接头,接口定义:
1 - +3v
2 - RX
3 - TX
4 - GND如果你有一台Palm或者PPC,也可以尝试直接将串口连接到Palm上。
Palm很老的一些型号用的是RS232电平比如Vx,需要转接器。
比较新的型号用的是TTL电平,可以直接连接。
交叉线连接就可以了,如下所示
MSS Palm
Rx---------Tx
Tx----------Rx
GND------GND
Palm接口有很多种,定义能在tompda论坛的硬件版里找到。
我先是从taobao上买到一个成品的转换器,不过折腾半天都不能用。转换器硬件没什么问题,
我一直是怀疑是MSS硬件的问题,有哪几个电阻没有焊上的原因吧。后来实在折腾不出来只好接我的TJ37了。
谁接转接器成功了麻烦留言给我,我好更新下这部分。JTAG是备用的,除非bootloader刷坏了,否则不会用到。
MSS上的Jtag接口是12针的,定义如下:
nTRST 1 2 GND
TDI 3 4 GND
TDO 5 6 GND
TMS 7 8 GND
TCK 9 10 GND
nSRST 11 12 GND
软件可以用这个,HairyDairyMaid_WRT54G_Debrick_Utility_v48,链接, pdf文件里有JTAG线的连接方法。
按照文档中的方法制作Jtag线就行了。
MSS的JTAG接口缺5个电阻,需要补上才能使用,如照片红线框起来的地方所示,我补了5个470欧姆的。
3 软件环境准备
指的是开发环境了,一台装着Linux的PC。发行版没什么关系,构架问题么,没有想过,我用的是x86的机子。
其他构架谁有兴趣尝试?
然后是软件了,主要包括开发工具和调试工具。
开发工具,openwrt自带了,它自己从网上下编译工具等等的源代码,然后自己打补丁,自己编译出交叉编译环境。
是我玩过最帅的嵌入式系统了,狂佩服写编译脚本的那个人,方便得狠~~
代码编辑器是不是要算到开发工具里来?找个趁手的工具是十分必要的,光kernel就是个很大的工程。
看大家习惯了,用惯SourceInsight的可以wine一个到linux机器上,跑起来速度和XP下差不多。
得益于它详细分类的彩色标示,读代码还是很舒服的。
或者用SlickEdit的,本来就有Linux版本。当然,用VIM之类的也行,只要你称手。
调试工具主要就个超级终端,Linux下可以用minicom或者gtkterm替代。Palm下有一款叫作online的软件
用起来也还算顺手。
另外如果用到了JTAG,用上面提到的那个软件就可以了。那个软件可以用来备份和写入Flash。它用的是自制的
并口JTAG线,使用时需要切换到root,然后卸载lp驱动。使用方法相对简单。
备份:
./wrt54g -backup:wholeflash /fc:45
-backup后面可以跟cfe,nvram,linux,wholeflash。分别备份CFE分区,NVRAM分区,Linux分区和整个
Flash。需要注意的是它这里备份的linux分区应该是把MSS的linux和nvramcopy一起备份了。
/fc:45指的是MSS用的Flash型号。
写入:
./wrt54g -flash:wholeflash /fc:45
命令类似,如果你写入cfe分区,需要保证当前目录有一个名字为CFE.BIN的文件。
另外需要安装下tftp server,用来让MSS下载kernel。不同的发行版安装的方法也不同,我用的是archlinux,
这里有篇帖子有细节:
http://bbs.archlinux.org/viewtopic.php?pid=280914
======
下篇介绍openwrt的编译过程,简单分析下启动流程。
收藏到:Del.icio.us








评论