2012年3月13日星期二

OpenWrt ExtRoot

从淘宝上买了个二手的TL-WR941ND,AR9132,改好USB、内存和Flash,成色和性价比感觉都还不错。不过8M的Flash肯定是不够我折腾的,于是。

OpenWrt Wiki上的相关资料有Flash LayoutExtRoot。在OpenWrt上扩充存储空间,比我想象的容易多了。

首先是准备外部存储器,我用的是一张1G的TF卡。分两个区,第一个850M左右的Ext3,第二个则是剩下的Swap。需要注意的是,TF卡上我其实更倾向于使用Ext2,因为日志型分区格式会带来更多的读写操作,而TF卡却没硬盘那么皮实。不过我也不很确定就是了,所以格式化为Ext3挂载为Ext2用,反正除了一点点空间外,也没什么损失。而分出Swap也只是有备无患,TF卡的读写远慢于内存,实在有需要的时候再swapon吧。

编辑/etc/config/fstab,修改成下面这个样子:

config 'global' 'automount'
        option 'from_fstab' '1'
        option 'anon_mount' '1'

config 'global' 'autoswap'
        option 'from_fstab' '1'
        option 'anon_swap' '0'

config 'swap'
        option 'uuid' 'e9cafe2e-04e8-43ac-b41d-26ea5c7c47c4'
        option 'enabled' '0'

config 'mount'
        option 'uuid' 'c8edd984-aea8-4bcc-b2bd-b5b110eefb6a'
        option 'device' '/dev/sda1'
        option 'target' '/mnt/sda1'
        option 'fstype' 'ext2'
        option 'options' 'rw,sync'
        option 'enabled' '1'
        option 'enabled_fsck' '0'
        option 'is_rootfs' '0'

config 'mount'
        option 'device' '/dev/mtdblock3'
        option 'target' '/mnt/overlay'
        option 'fstype' 'jffs2'
        option 'options' 'rw,noatime'
        option 'enabled' '1'
        option 'enabled_fsck' '0'

UUID可以用blkid /dev/sda*获得。

重启,mount一下看看,如果/dev/sda1被正确挂载到/mnt/sda1下,就证明配置文件没问题了。

接下来搬迁现有的overlay:

cp -a /overlay/* /mnt/sda1/

我是没试过,但据说TF卡读写速度比Flash快很多,如果把ROM的内容都放到TF卡上可以加快速度什么的。如果你想试试的话,可以这样:

cp -a /rom/* /mnt/sda1/
cp -a /overlay/* /mnt/sda1/

然后再次编辑/etc/config/fstab,把TF卡相关内容的is_rootfs设置为1,重启。查看df -h输出:

Filesystem                Size      Used Available Use% Mounted on
rootfs                  798.3M     17.1M    740.6M   2% /
/dev/root                 6.3M      6.3M         0 100% /rom
tmpfs                    30.3M    108.0K     30.1M   0% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/sda1               798.3M     17.1M    740.6M   2% /overlay
overlayfs:/overlay      798.3M     17.1M    740.6M   2% /

rootfs变大了,搞定。

想要的话,可以编辑/etc/banner,随便在什么地方加个记号,比如“Boot from TF-Card!”。下次ssh进去的时候,如果看见这句话,那就证明ExtRoot正在起作用。

2012年3月8日星期四

Upgrade IX828 via USB-To-TTL

不知道是不是觉得我比较无聊?某天一个朋友说他手上有一台某公司定制的高清播放器一台,问我能不能“破解”一下,所以。

经过一番搜索,我找到了该播放器的原型产品,中科智网出的智影IX828,2008年的老东西了。官方网站上有固件可下载(需注册),最新版是2010年4月1日的v1.67G。

拆开机器,如上图所示可以找到四个触点。断电的情况下,万能表可测得最左边一个触点跟视频高频头外侧之间的电阻为0。加电后,测得最右边的触点对地直流电压接近5v,中间两个触点的电压不记得了,3v左右吧。嗯,应该就是TTL了。经过后续测试得知,这四个触点从左到右分别是:GND、TX、RX、VCC。

在板子上焊上三根线并与TTL线相连,GND对GND,TX对RX,RX对TX。串口通讯参数中,波特率为38400(高了低了都是乱码),数据位为8,停止位为1,校验位、流控制都为none。(Windows下Putty和Tera Term都可用,只是Prolific的PL2303驱动v1.5.0版在Windows 7里有蓝屏的问题,所以我用Linux里的minicom。)

打开串口通讯软件并激活该窗口,按住PC键盘上的ESC键并为IX828加电,可中断启动过程并停留在boot loader中。通常情况下,嵌入式Linux的boot loader都提供了相当多的命令。绝大部分刷高清播放器的文章都会教你怎么在PC端建立一个TFTP服务器,怎么设置播放器的网卡等等。但我手上这台机器的boot loader显然是被阉过的,help命令提示Help is not available,config命令不能用,net等命令无反应。

好在,download命令还能用,所以可以从模拟串口直接发送固件过去。

在PC端执行如下命令:

gzip -9 IX828USBromfs.bin
uuencode IX828USBromfs.bin.gz IX828USBromfs.bin.gz > i.txt

然后在播放器端执行:

# 下面这句调整播放器端的波特率设置,执行完毕后PC端也要做同样的调整
config serial 115200
download serial romfs gz

接着回到PC端,调整波特率后执行:

cat i.txt > /dev/ttyUSB0

接近8M的东西,所以即使是115200的速率也会非常的慢。在传送完毕之前,给自己找点事情做吧。在传送完毕后,继续在播放器端执行:

flash romfs 1

基本上,就是这样了。接上电视重启之后发现,遥控器工作不正常,其他倒是都OK。如果要继续折腾的话,就要修改官方固件了。至于可不可行,以后再说吧。