• 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.bin
    Linux下通过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




    评论

  • 那怎么刷openwrt呢?