获取设备信息

观察设备背后的贴纸,得到基本信息如下:

  • 产品名称:新魔百盒
  • 产品型号:M301H
  • CMIT ID:2018AP0342
  • 代工厂:ZN(兆能)

拆开设备,找到 TTL 接口,使用 USB-TTL 转接板连接到电脑。

设备端 - 电脑端
TX - RX
RX - TX
GND - GND
3V3 不接

image.png

打开 HiTool,进入 HiBurn 工具。

image.png

在 HiBurn 打开串口终端,选择对应的 COM 口。

插好网线,给设备上电,观察终端输出,可得到 CPU 型号。

image.png

将 HiTool 软件切换到对应的芯片。

image.png

给在 HiBurn 烧写 EMMC 页面,填好 PC 与板端配置,IP 可以在路由器后台查看。

image.png

分区备份

在串口终端中执行命令。

获取分区表

查看分区大小

cat /proc/cmdline
console=ttyAMA0,115200 blkdevparts=mmcblk0:2M(fastboot),2M(bootargs),2M(bootargsbak),10M(recovery),10M(recoverybak),2M(properties),2M(markparam),2M(baseparam),2M(pqparam),20M(logo),40M(fastplay),20M(kernel),2M(misc),50M(private),100M(factory),700M(cache),800M(system),-(userdata) quiet androidboot.serialno=00500300000299004001E4F3E8A766FD initrd=0x4000000,0x55920 mem=1G mmz=ddr,0,0,44M

查看分区情况

cd /dev/block/platform/soc/by-name
ls -al
lrwxrwxrwx root     root              1970-01-01 08:00 baseparam -> /dev/block/mmcblk0p8
lrwxrwxrwx root     root              1970-01-01 08:00 bootargs -> /dev/block/mmcblk0p2
lrwxrwxrwx root     root              1970-01-01 08:00 bootargsbak -> /dev/block/mmcblk0p3
lrwxrwxrwx root     root              1970-01-01 08:00 cache -> /dev/block/mmcblk0p16
lrwxrwxrwx root     root              1970-01-01 08:00 factory -> /dev/block/mmcblk0p15
lrwxrwxrwx root     root              1970-01-01 08:00 fastboot -> /dev/block/mmcblk0p1
lrwxrwxrwx root     root              1970-01-01 08:00 fastplay -> /dev/block/mmcblk0p11
lrwxrwxrwx root     root              1970-01-01 08:00 kernel -> /dev/block/mmcblk0p12
lrwxrwxrwx root     root              1970-01-01 08:00 logo -> /dev/block/mmcblk0p10
lrwxrwxrwx root     root              1970-01-01 08:00 markparam -> /dev/block/mmcblk0p7
lrwxrwxrwx root     root              1970-01-01 08:00 misc -> /dev/block/mmcblk0p13
lrwxrwxrwx root     root              1970-01-01 08:00 pqparam -> /dev/block/mmcblk0p9
lrwxrwxrwx root     root              1970-01-01 08:00 private -> /dev/block/mmcblk0p14
lrwxrwxrwx root     root              1970-01-01 08:00 properties -> /dev/block/mmcblk0p6
lrwxrwxrwx root     root              1970-01-01 08:00 recovery -> /dev/block/mmcblk0p4
lrwxrwxrwx root     root              1970-01-01 08:00 recoverybak -> /dev/block/mmcblk0p5
lrwxrwxrwx root     root              1970-01-01 08:00 system -> /dev/block/mmcblk0p17
lrwxrwxrwx root     root              1970-01-01 08:00 userdata -> /dev/block/mmcblk0p18

综合上面的信息,使用 AI 辅助编写分区表配置。 AI 辅助指令:请根据信息,编写分区表配置,示例如下:

<?xml version="1.0" encoding="GB2312" ?>  
<Partition_Info ProgrammerFile="">  
<Part Sel="0" PartitionName="fastboot" FlashType="emmc" FileSystem="none" Start="0" Length="2M" SelectFile="fastboot.img"/>  
<Part Sel="0" PartitionName="bootargs" FlashType="emmc" FileSystem="none" Start="2M" Length="2M" SelectFile="bootargs.img"/>  
<Part Sel="0" PartitionName="bootargsbak" FlashType="emmc" FileSystem="none" Start="4M" Length="2M" SelectFile="bootargsbak.img"/>  
<Part Sel="0" PartitionName="recovery" FlashType="emmc" FileSystem="none" Start="6M" Length="10M" SelectFile="recovery.img"/>  
<Part Sel="0" PartitionName="recoverybak" FlashType="emmc" FileSystem="none" Start="16M" Length="10M" SelectFile="recoverybak.img"/>  
<Part Sel="0" PartitionName="properties" FlashType="emmc" FileSystem="none" Start="26M" Length="2M" SelectFile="properties.img"/>  
<Part Sel="0" PartitionName="markparam" FlashType="emmc" FileSystem="none" Start="28M" Length="2M" SelectFile="markparam.img"/>  
<Part Sel="0" PartitionName="baseparam" FlashType="emmc" FileSystem="none" Start="30M" Length="2M" SelectFile="baseparam.img"/>  
<Part Sel="0" PartitionName="pqparam" FlashType="emmc" FileSystem="none" Start="32M" Length="2M" SelectFile="pqparam.img"/>  
<Part Sel="0" PartitionName="logo" FlashType="emmc" FileSystem="none" Start="34M" Length="20M" SelectFile="logo.img"/>  
<Part Sel="0" PartitionName="fastplay" FlashType="emmc" FileSystem="none" Start="54M" Length="40M" SelectFile="fastplay.img"/>  
<Part Sel="0" PartitionName="kernel" FlashType="emmc" FileSystem="none" Start="94M" Length="20M" SelectFile="kernel.img"/>  
<Part Sel="0" PartitionName="misc" FlashType="emmc" FileSystem="none" Start="114M" Length="2M" SelectFile="misc.img"/>  
<Part Sel="0" PartitionName="private" FlashType="emmc" FileSystem="none" Start="116M" Length="50M" SelectFile="private.img"/>  
<Part Sel="0" PartitionName="factory" FlashType="emmc" FileSystem="none" Start="166M" Length="100M" SelectFile="factory.img"/>  
<Part Sel="0" PartitionName="cache" FlashType="emmc" FileSystem="ext4" Start="266M" Length="700M" SelectFile="cache.img"/>  
<Part Sel="0" PartitionName="system" FlashType="emmc" FileSystem="ext4" Start="966M" Length="800M" SelectFile="system.img"/>  
<Part Sel="0" PartitionName="userdata" FlashType="emmc" FileSystem="ext4" Start="1766M" Length="-1" SelectFile="userdata.img"/>  
</Partition_Info>

在目录中创建对应的空镜像:

@echo off  
echo 正在创建img空文件...  
echo fastboot.img > fastboot.img  
echo bootargs.img > bootargs.img  
echo bootargsbak.img > bootargsbak.img  
echo recovery.img > recovery.img  
echo recoverybak.img > recoverybak.img  
echo properties.img > properties.img  
echo markparam.img > markparam.img  
echo baseparam.img > baseparam.img  
echo pqparam.img > pqparam.img  
echo logo.img > logo.img  
echo fastplay.img > fastplay.img  
echo kernel.img > kernel.img  
echo misc.img > misc.img  
echo private.img > private.img  
echo factory.img > factory.img  
echo cache.img > cache.img  
echo system.img > system.img  
echo userdata.img > userdata.img  
echo 文件创建完成!  
pause

提取分区

在 HiBurn 中,导入刚刚 AI 编写的分区表。

在右侧先断开串口终端的连接,否则会提示串口占用。

断开设备电源,在 HiBurn - 烧写 eMMC 中,先选择所有的分区,点击上载,选择覆盖。

给设备上电,等待进度条完成即可得到设备的全盘备份。

image.png

修补 boot

解包

从刚刚得到的备份文件中,找到 kernel.img 即为设备的 boot 分区。

通过 bootimg.exe 可以一键解包和打包 boot,搜索引擎搜索 bootimg.exe 即可找到下载。

.\bootimg.exe --unpack-bootimg # 解包
.\bootimg.exe --repack-bootimg # 打包

修改启动脚本

init.rc 中,找到:

# adbd is controlled via property triggers in init.<platform>.usb.rc
service adbd /sbin/adbd
    class core
    socket adbd stream 660 system system
    disabled
    seclabel u:r:adbd:s0

# adbd on at boot in emulator
on property:ro.kernel.qemu=1
    start adbd

修改为:

# adbd is controlled via property triggers in init.<platform>.usb.rc
service adbd /sbin/adbd
    class core
    socket adbd stream 660 system system
    # disabled
    seclabel u:r:adbd:s0

# adbd on at boot in emulator
on property:ro.kernel.qemu=1
    start adbd
    
on property:sys.boot_completed=1
    start adbd

修改 default.prop 参数:

ro.secure=0
ro.debuggable=1
persist.service.adb.enable=1

修改完成,使用 bootimg.exe 打包,再使用 HiBurn 刷回设备即可。

参考文献

Android开机自启动ADB服务和开启ADB WiFi - QsBlog 海思3798MV310 - 海思机顶盒NAS社区 [DIYROM] 烽火HG680-KB_海思Hi3798MV310_当贝桌面_安卓9.0_海兔烧录…_ROM固件下载_ZNDS TTL 刷机(海思) | 海纳思系统

特别鸣谢:

魔百盒-盘盒小记(切换IPTV桌面/开启ADBD//备份修改boot分区)_ZNDS刷机/救砖_ZNDS 海思机顶盒Hi3798使用Hitool和TTL备份并烧录海纳思Linux服务器系统固件 - 梦幻之心星 - 博客园