机顶盒重启几次就需要重置,否则开不了机让我很苦恼,于是我用终端各处找可疑文件,成功解决这个问题,除此以外找到了修改logo的方法。

Recovery日志

我找到了Recovery模式的日志,位于/cache/recovery,关于清除的数据,日志里面提到,擦除了 /dev/data/dev/cache这两个文件,除此之外还操作了/dev/block/env这个文件。

抱着试一试的心态,我cat了一下/dev/block/env,这不是Uboot的环境变量嘛。

同时/dev/block还有很多其他有趣的文件。

/dev/block

这个目录是linux上面的块状存储设备的目录,像是硬盘什么的就会被以文件的形式放在这里。

我ls了一下:

ffeng@p201_iptv:/dev/block # ls -l
brw------- root     root     179,  12 2015-01-01 08:00 boot
brw------- root     root     179,  16 2015-01-01 08:00 bootfiles
brw------- root     root     179,   1 2015-01-01 08:00 bootloader
brw------- root     root     179,   3 2015-01-01 08:00 cache
brw------- root     root     179,   9 2015-01-01 08:00 crypt
brw------- root     root     179,  15 2015-01-01 08:00 ctc
brw------- root     root     179,  17 2015-01-01 08:00 data
brw------- root     root     179,   4 2015-01-01 08:00 env
brw------- root     root     179,  11 2015-01-01 08:00 instaboot
brw-rw-rw- root     root     179,   5 2015-01-01 08:00 logo
brw------- root     root       7,   0 2015-01-01 08:00 loop0
brw------- root     root       7,   1 2015-01-01 08:00 loop1
brw------- root     root       7,   2 2015-01-01 08:00 loop2
brw------- root     root       7,   3 2015-01-01 08:00 loop3
brw------- root     root       7,   4 2015-01-01 08:00 loop4
brw------- root     root       7,   5 2015-01-01 08:00 loop5
brw------- root     root       7,   6 2015-01-01 08:00 loop6
brw------- root     root       7,   7 2015-01-01 08:00 loop7
brw------- root     root     179,  10 2015-01-01 08:00 misc
brw------- root     root     179,   0 2015-01-01 08:00 mmcblk0
brw------- root     root     179,  32 2015-01-01 08:00 mmcblk0boot0
brw------- root     root     179,  64 2015-01-01 08:00 mmcblk0boot1
brw------- root     root     179,  96 2015-01-01 08:00 mmcblk0rpmb
brw------- root     root     179,  14 2015-01-01 08:00 params
drwxr-xr-x root     root              2015-01-01 08:00 platform
brw------- root     root     179,   6 2015-01-01 08:00 recovery
brw------- root     root     179,   2 2015-01-01 08:00 reserved
brw------- root     root     179,   7 2015-01-01 08:00 rsv
brw------- root     root     179,  13 2015-01-01 08:00 system
brw------- root     root     179,   8 2015-01-01 08:00 tee
drwxr--r-- root     root              2015-01-01 08:00 vold
brw------- root     root     253,   0 2015-01-01 08:00 zram0

这些文件居然还都是可读可写的。

似乎可以从这里直接修改到bootloader,不过我的技术实力就这样,改bootloader就算了,logo倒是可以试一试。

首先,把/dev/block/logo这个文件复制下来,发给电脑。

我直接cat /dev/block/logo > /sdcard/logo.bin然后用ftp来取文件。

这个文件正正好好 32mb - 1b。

猜测,这个文件头记录了文件名和文件数据的对应关系,研究了许久,没弄明白文件头具体什么意思,或许这是一个文件系统也说不定。

我往文件后面翻,找到了一大块不是0的区域,这一块的开头是BM(此时的我没有注意到,文件前面就有BM),我曾经接触过bmp文件,所以知道BM是bmp位图文件的文件标识。我查找下一个BM,然后将两个BM中间夹着的数据另存出来,之前开机的图片呈现在我面前。

所以,看不懂前面也没关系,接下来只要替换掉这些数据就完成了吧。

我比较好奇,于是查找了所有BM,把这个文件的所有位图都提取出来了,这些文件被紧挨着放在一起,根本不需要知道起始位置和结束位置,看BM就知道了。

提取出来的开机logo是一张 1920*1080 24位 的位图,我直接上Photoshop,画了一张格式一样的图片,结果我的比他的文件短8个字节,我的bmp文件头记录的文件长度比他的长2个字节(bmp文件的第3到10字节表示文件长度),怎么办呢?

他的结尾:9E 9D 97 96 90 8D 00 00 00 00 00 00 00 00 00 00
我的结尾:21 18 16 1F 16 13 00 00 -- -- -- -- -- -- -- --

直接,我的bmp文件头记录长度改成他的,然后文件后面补0,和他的一样长。

根据测试,文件依然可以打开。

覆盖原有数据,重新放到盒子上面,cat回去cat /sdcard/logo.bin > /dev/block/logo

reboot,完成!

重置问题

这个问题嘛,其实我早就找到原因了,但只是觉得不对,没再研究。

我在翻/data的时候,发现了/data/property/persist.sys.boot.fail_count文件,他里面写了: 1

是谁把persist.sys.boot.fail_count文件放在这里的呢?是/system/bin/ext_bootfail.sh,他的名字足以说明一切。

ext_bootfail.sh里面写了个计数器,开机boot失败的时候执行一次,每次persist.sys.boot.fail_count加一,到达3的时候,echo 1 > /bootfiles/bootfail.flag

我先是重启了好几次,似乎都没有出发boot失败,计数器都没有增加,于是我执行echo 1 > /bootfiles/bootfail.flag,试了两次,每一次都需要重置。

秉着尽可能不破坏原系统的原则(虽然已经破坏的差不多了),我仅仅把echo那一行注释了。

解决!

我能想到的,最大的成功就是无愧于自己的心。