魔百盒----盘盒小记(切换IPTV桌面/开启ADBD//备份修改boot分区)
本帖最后由 wx69wx 于 2019-4-26 20:36 编辑家里机顶盒又换成了移动的魔百盒cm101s-2,不能安装第三方应用,不爽之,所以就有了如下的折腾之旅。首先要感谢坛子各大佬帖子的指引才有此文。
1、安装当贝桌面
根据论坛帖子搜索,盒子没有打开ADB的隐藏开关,只能通过TTL线调试,正好手头有根USB转RS232的线,想着能否通用,所以拆开按引脚定义接了下盒子,结果发现PUTTY 跑码是乱码,试了多种码率都不行,上网一查才知道USB/RS232/TTL电平逻辑是不一样的,中间需要转换芯片,所以最后还是买了根USB TO TTL线,PUTTY跑马正常了。然后安装上当贝桌面等应用。
2、切换IPTV桌面与当贝桌面
进IPTV是无法返回当贝的,参照之前的做法 https://www.znds.com/forum.php?mod=viewthread&tid=975562
找到一个启动会执行的脚本etc/init.bigfish.sh(init.rc----init.bigfish.rc----init.bigfish.sh)
添加如下代码
[*]while [ 1 ]
[*]do
[*] rm_code=`getevent -c 1 /dev/input/event0`
[*]
[*] if [ "$rm_code" = "0001 02f2 00000000" ] ; then
[*] print $rm_code
[*] am start -n com.dangbei.tvlauncher/com.dangbei.tvlauncher.IndexActivity
[*] start adbd
[*] fi
[*]
[*]done
这里说下如何找到自己的切屏热键码,在TTL调试环境下输入 getevent然后遥控器按一下自己想设置的切屏键(注意是没有用或很少用的,比如我选择的是“应用”这个按键,然后就可以看见事件和按键码,如我的 /dev/input/event0 和0001 02f2 00000000,然后可以用getevent -c 1 /dev/input/event0测试,看看返回的是否对。
做完上面的事情后发现要调试盒子,每次都要拆机接TTL线太麻烦,所以灵机一动,直接在上面代码里添加start adbd不就解决了,然后就可以用笔记本 adb connectXXXX(盒子IP):5114 调试了(注:我的盒子是已在init.rc里定义了端口号5114,如下
on boot
setprop service.adb.tcp.port 5114
stop adbd
如init.rc里没定义,也可在上面的按键代码start adbd前增加setprop service.adb.tcp.port YYYY(自定义端口)
至此,我们完成了切屏和启动ADB的热键功能。
3、制作分区表和备份boot分区
上面总觉得没玩过瘾,如果能直接更改init.rc最好,以前修改过发现不行,上网搜索只能烧录(部分分区是烧录的,直接修改无效,比如fastboot/boot(kernel)等,而system/data重新挂载为读写,是可以直接修改的
,这时刚好看到大佬的帖子https://www.znds.com/forum.php?mod=viewthread&tid=1139749&page=
于是下载了HITOOL研究(我下了最新版5.0.27,稍后共享),首先我们没有分区表文件,使用帖子的办法居然失败{:134:},原因是我的TTL跑马里根本没有各分区信息。只能自己琢磨了,终于找到办法如下:
root@Hi3798MV100:/ # cat /proc/partitions 可以等到各分区大小(第3列数据)
major minor#blocksname
179 0 7570432 mmcblk0 总的大小
179 1 1024 mmcblk0p1 如:第一个分区大小1M
179 2 1024 mmcblk0p2
179 3 10240 mmcblk0p3
179 4 2048 mmcblk0p4
179 5 8192 mmcblk0p5
179 6 8192 mmcblk0p6
179 7 20480 mmcblk0p7
259 0 20480 mmcblk0p8
259 1 35840 mmcblk0p9
。。。。
然后显示 /dev/block/platform/hi_mci.1/by-name目录下内容,可以得到各分区的名称。
root@Hi3798MV100:/dev/block/platform/hi_mci.1/by-name # ls -al
lrwxrwxrwx root root 1970-01-01 08:00 baseparam -> /dev/block/mmcblk0p5
lrwxrwxrwx root root 1970-01-01 08:00 bootargs -> /dev/block/mmcblk0p2
lrwxrwxrwx root root 1970-01-01 08:00 cache -> /dev/block/mmcblk0p20
lrwxrwxrwx root root 1970-01-01 08:00 deviceinfo -> /dev/block/mmcblk0p4
lrwxrwxrwx root root 1970-01-01 08:00 fastboot -> /dev/block/mmcblk0p1
lrwxrwxrwx root root 1970-01-01 08:00 fastplay -> /dev/block/mmcblk0p9
lrwxrwxrwx root root 1970-01-01 08:00 fastplaybak -> /dev/block/mmcblk0p10
lrwxrwxrwx root root 1970-01-01 08:00 hibdrv -> /dev/block/mmcblk0p15
lrwxrwxrwx root root 1970-01-01 08:00 kernel -> /dev/block/mmcblk0p12
lrwxrwxrwx root root 1970-01-01 08:00 logo -> /dev/block/mmcblk0p7
lrwxrwxrwx root root 1970-01-01 08:00 logobak -> /dev/block/mmcblk0p8
lrwxrwxrwx root root 1970-01-01 08:00 misc -> /dev/block/mmcblk0p13
。。。。。
后来在研究HITOOL备份和烧录时又找到了第二种方法:
在TTL连接启动过程中,putty里跑马时按CTRL+C,启动会中断在fastboot模式下,输入help有多个命令使用,其中printenv就可以看到分区信息,如下:
fastboot# printenv
bootdelay=0
verify=n
baudrate=115200
ipaddr=192.168.1.10
serverip=192.168.1.1
netmask=255.255.255.0
bootfile="uImage"
phy_intf=mii,rgmii
use_mdio=0,1
phy_addr=2,1
gmac_debug=0
bootcmd=mmc read 0 0x1FFBFC0 0x4B000 0x5000; bootm 0x1FFBFC0
bootargs=console=ttyAMA0,115200 lpj=974848 quiet blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),10M(recovery),2M(deviceinfo),8M(baseparam),8M(pqparam),20M(logo),20M(logobak),35M(fastplay),35M(fastplaybak),10M(ystinfo),40M(kernel),20M(misc),8M(userapi),8M(hibdrv),8M(qbflag),300M(qbdata),800M(system),2048M(userdata),500M(cache),50M(private),-(sdcard)
我们的boot分区根据经验就是kernel,先备份下,备份方法有很多,比如
cat /dev/block/platform/hi_mci.1/by-name/kernel> boot.img
dd if=/dev/block/mmcblk0p12 of=/mnt/sdcard/boot.img
hitool的上载备份
在使用HITOOL上载和烧录功能时,我被制裁了,使用网口方式怎么都不成功,老是显示TTTTT (网络未连接), 使用串口方式可以,但那个慢啊,毕竟时115200bps(换算出来也就10K/S左右),后来终于解决了,折腾过程就不说了,提醒各位同学如下:
a、一定要使用网线连接,不要用WiFi(否则双方都ping不通)
b、一定要关闭笔记本的windows防火墙(因为备份烧录过程时由机顶盒连接PC,所以检查PC能否ping通机顶盒没用,需要机顶盒ping通PC)
重要的事情要说三遍。
4、修改boot分区
boot映像并不是一个完整的文件系统,是一种android自定义的文件格式,该格式包括了2K的文件头,后面紧跟着是用gzip压缩过的内核,再后面是一个ramdisk内存盘等等
之前因为玩过手机,感觉机顶盒和手机差不多,所以该祭出大杀器bootimg工具了(稍后共享),前面备份好kernel分区(boot.img), 将他放在bootimg工具目录下,使用命令bootimg --unpack-bootimg 解包后可以得到initd文件夹,现在我们可以自由修改init.rc 了,比如etc下新建user.sh, 添加上面的切屏按键代码,然后在init.rc末尾添加
[*]service usersh /system/etc/user..sh
[*] class main
[*] user root
[*] group root
修改好后,在使用命令bootimg --repack-bootimg打包成新镜像文件(注:文件大小会变小很多,对比原景象文件,是原景象要凑齐分区大小,末尾都是0,所以不影响使用),直接用hitool 烧录即可。
注:同学如有兴趣,也可以进入fastboot模式,研究使用手动tftp命令烧录
文中提到的HITOOL-STB- 5.0.27和bootimg工具百度网盘链接如下:
**** Hidden Message *****
高手在当贝啊!这次真的长见识了 谢谢分享楼主 先把机器刷成砖,再把砖头刷成机器,我都佩服自己在ZNDS学到的刷机技术! 有料,收藏! 高手在当贝啊!学习了 高手在当贝啊!学习了 cat /dev/block/platform/hi_mci.1/by-name/kernel> boot.img 厉害了
先把机器刷成砖,再把砖头刷成机器,我都佩服自己在ZNDS学到的刷机技术! 这个有点厉害了 专业级别的老师感谢分享 高手在当贝啊!学习了 (切换IPTV桌面/开启ADBD//备份修改boot分区)