2012年11月30日星期五

OpenWrt Attitude Adjustment

换上12.09差不多两个月了吧,各方面都很满意。尤其是近几天折腾了一下RTD1186,更觉得有完整的第三方支持是多么幸运多么可贵的一件事。

这是我的补丁包:https://www.boxcn.net/s/ybou0cl9yekzd2x7e5mh

基于svn://svn.openwrt.org/openwrt/branches/attitude_adjustment,r34080,没改多少东西:

./nls-cp936.patch
./package/exfat-utils/Makefile
./package/exfat-utils/src/Makefile
./package/exfat/Makefile
./package/exfat/src/Makefile
./toolchain/uClibc/patches-0.9.33.2/999-posix_fallocate.patch
./feeds/packages/net/aria2/Makefile
./feeds/packages/net/autossh/files/autossh.config
./feeds/packages/net/autossh/files/autossh.init
./feeds/packages/net/openssh/patches/999-env-pwd.patch
./feeds/packages/net/vsftpd/patches/999-ssl.patch
./feeds/packages/net/vsftpd/Makefile
./target/linux/ar71xx/patches-3.3/999-tl-wr941nd-usb.patch

除了nls-cp936.patch需要手工打补丁外,其他文件覆盖即可。

busybox

busybox的中文显示需要特别配置一下,首先是打开unicode支持,其次要将"Range of supported Unicode characters"的值改为0,"Allow wide Unicode characters on output"改为yes。另外vi也可以通过调整配置使之能够显示中文,但也仅仅是显示而已,输入和删除的时候仍然会遇到光标的问题。

nls-cp936.patch

增加nls_cp936.ko,mount的时候可能会用到。

exfat、exfat-utils

虽然放在这里,但不知道是usb供电不足还是代码稳定性不佳,总之我不建议挂OpenWrt上的移动硬盘使用exfat。ntfs我也试过了,跟exfat一样,最后我用的还是ext3。

uClibc

增加了fallocate,据说对samba的性能有帮助,据说。

aria2

OpenWrt挂迅雷离线就靠他了。

autossh、openssh

让openssh可以从环境变量中获得登录密码,出墙需要用,详细说明见之前写的《OpenWRT AutoSSH》

vsftpd

打开ftps支持。如果要给远端共享文件的话,或许用得上。内网还是不要用了,路由的cpu扛不住,会导致速度下降很多。

999-tl-wr941nd-usb.patch

我的路由改了个usb口出来,官方的代码没有提供支持。

2012年11月28日星期三

RTD1186折腾记之修改根分区格式

这个盒子是一个朋友买来之后觉得没用暂时放我这里的,Realtek RTD1186方案,主频750MHz,内存512M,闪存4G。单就硬件而言,比我的路由强很多,只不过没有OpenWrt之类完整的第三方支持,所以干什么都需要自己来。

本地端adb connect 192.168.1.186,然后打开adb putty,Host写transport-any,Port保持5037,居然就这么连进去了。固件本身是已经root了的,倒是少了很多麻烦。只是随便乱逛了一下之后,我有一种头痛的感觉。

从/和/system看来,这像是个标准的Android,只是目录结构和文件各种乱。根目录下居然放了三个内核模块。/system/rtk_rootfs/usr/local/bin/下面有个44.1M大的opt2.8.tar。/system/rtk_rootfs/bin/opt和/system/rtk_rootfs/usr/local/bin/opt下各有一套optware,区别仅仅是前者比后者多了两个可执行文件。至于man、include一类,我都不想提了…

想要删改,第一个问题是/system的分区格式。原厂用的是只读的squashfs,随便改点什么都要刷一次系统,这也太累了,改掉。

刷固件并不需要ttl,但是为了能看见自己都干了啥,ttl还是需要的。

将盒子拆开,电路板上只有一个六针的接口是空着的,标注是J1到J6。用万能表在断电的时候测针脚与高频头外侧之间的电阻,J1是0Ω,J4和J5绝缘,其他三针不为0。上电再测试直流电压,J1为0V,J2为2.8V,J3示数不稳定,J6为3.3V。这应该就是ttl针脚了,J1是GND,J2是RX,J3是TX,J6是VCC。

在最终达到目的之前,我遇到了蛮多问题的,也花了不少时间,这里就不写了,直接上结果。

从ttl看到的启动信息里有这么一段:

One H27UBG8T2A chip has 1 die(s) on board
nand part=H27UBG8T2A, id=add7949a, device_size=4294967296, chip_size=4294967296, num_chips=1, page_size=8192, isLastPage=1, eccBits=24

H27UBG8T2A就是闪存芯片的型号,Page尺寸上面就有,8192字节。以型号为关键字搜到了一个pdf技术文档,其中有写OOB的尺寸,448字节。这两个数据在制作img的时候需要。

从官方下回来的install.img中把mkyaffs2image和squashfs1.img解出来,然后:

unsquashfs squashfs1.img
mv squashfs-root system
mkyaffs2image -f -c 8192 -s 448 ./system yaffs2_root.img

改名的那一步不是多余的,mkyaffs2image那一句的./也不是多余的,神奇的设计。

虽说squashfs是压缩过的,可192M的img转换成yaffs2就膨胀到1.2G,可见官方的固件里有多少垃圾。不过这跟8K的Page尺寸也有关系,这块芯片显然更适合用在DC一类的设备里,当系统盘存小文件实在太浪费空间了。

将原厂install.img里的squashfs1.img替换为自己做的yaffs2_root.img,打开configuration.xml并修改:

--- configuration.xml.orig
+++ configuration.xml
@@ -40,9 +40,10 @@
                 <fileName>package5/bootloader.tar</fileName>
                 <version>N/A</version>
             </image>
-            <image type="squash">
-                <fileName>package5/squashfs1.img</fileName>
+            <image type="yaffs2">
+                <fileName>package5/yaffs2_root.img</fileName>
                 <mountPoint>/</mountPoint>
+                <sizeBytesMin>2147483648</sizeBytesMin>
             </image>
             <image type="yaffs2">
                 <fileName>package5/yaffs2_2.img</fileName>

我把新的/system设置为2G,这样/data还有1.7G。其实MIPS跑安卓压根没什么用,/system再改大点也没关系。

把改好的install.img放到一个U盘的根目录下,按住盒子前面板的reset,或连上ttl的时候按住空格键上电,开始刷固件。bootloader会自动构造传递给内核的参数,原厂init会依序尝试squashfs和yaffs2,所以没什么要改的了。刷完之后会自动重启,挂载分区处不知道为什么需要花很长时间,除此之外一切正常,/system已经变成可写的yaffs2了。