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了。

3 条评论 :

庫魯帕拉 说...

你好!好不容易才找到一个类似的帖子。我也有一个类似的盒子(天敏T6)闲置状态。想刷OpenWrt,不知道从何下手,望指点。这么长时间了,希望能看到。

oCameLo 说...

OpenWrt基本都是用在路由器上的,电视盒弄那个并没什么意义。我当初弄这个东西只是因为那个盒子内置了硬盘,可以用来挂电骡和BT。

想对设备已有的系统进行实质性的修改,得对硬件和软件系统都有相当的了解才行,而且非常花时间。至于把一个新的系统(比如OpenWrt)搬到一个尚未提供支持的平台(天敏T6),那就更不是一般用户搞的定的事情了。

我不太清楚天敏T6有没有人折腾过系统,也不知道你想弄这个东西是做什么。如果你是对嵌入式设备有兴趣,我建议你去搞一块树莓派,更好上手资料也更齐全。如果是想要一台低功耗的HTPC,某宝上那些基于ATOM芯片的产品也并不贵。

庫魯帕拉 说...

谢谢。本来想买个能刷OpenWrt的路由器,在角落里发现了这个盒子,想有处理器有内存按道理可以安装系统,看来远没那么简单。我还是规矩的买路由器吧。你说的树莓派搜索了一下,很感兴趣,准备买一块玩玩。再次感谢。