海思TOOL hitools使用详细教程
介绍了使用海思 CPU 的机顶盒的固件备份和烧录。通过 USB-TTL 串口烧录器 CH340 连接机顶盒,使用华为海思刷机工具 HiTool 创建和修改分区表文件,备份和烧写固件,通过升级包升级系统。在海纳思系统中安装homeassistant,通过 FTP、WebDAV、Alist云盘访问文件,真实的 CPU 型号和 reg name 的确定,以及加快烧写速度的方法。
背景说明
使用 Home assistant(后文缩写为 HA)需要个人服务器,根据不同的情况有不同的家用 Linux 服务器方案。
服务器方案 优点 缺点 旧手机 体积小、功耗低、价格低 性能低、网络受限 机顶盒 体积小、功耗低、价格低 性能低、网络受限 树莓派 体积小、功耗低 价格贵、性能中、网络受限 迷你主机 体积小、价格中 功耗中、性能中、网络受限 NAS 体积中、价格中 功耗高、性能高、网络受限 电脑/服务器 性能高 价格贵、体积大、功耗高、网络受限 云服务器 网络不受限,性能高 价格贵 旧手机可用于简单的功能验证,安装较为复杂,也容易出现问题。目前常用的方案有termux、termux+proot、Alpine Term+docker、linux deploy(需要 root 权限)。termux 和 termux+proot 方案主要是通过安装 Python 来安装 HA。经过尝试,termux 安装 HA 会出现依赖报错;termux+proot+debian 启动 HA 时会出现版本错误的提示;Alpine Term+docker 安装 HA 后可以正常运行,但性能极低卡顿严重。
机顶盒可用于简单的个人使用,安装难度一般,不容易出现问题。目前常用的有Armbian、海纳思系统这两种方案,主要是通过安装 docker 来安装 HA。海纳思系统 主要支持海思芯片中的 Hi3798MV100 、Hi3798MV200 、Hi3798MV300 ,不支持Hi3798MV300H 等带后缀的处理器。Armbian 主要支持晶晨芯片中的 S9xx 系列。
原本是打算对型号为
CM211-2
的机顶盒进行刷机,后来发现 CPU 型号为Hi3798MV300H
。于是改为对型号为HG680-j
且 CPU 为Hi3798MV100
的机顶盒进行刷机。
操作实践
前提要求
软件:华为海思刷机工具HiTool,电视机顶盒工具开心电视助手(非必需)。
硬件:电脑,USB-TTL 串口烧录器 CH340,U 盘。
获取系统信息
使用网线将接机顶盒和电脑连接到网络,使用导线连接机顶盒和 USB-TTL 串口烧录工具。
打开HiTool后点击HiBurn。
设置PC 与板端配置参数。设置 本地 PC 配置下的串口 和 服务器 IP,板端配置下的IP 地址 和网关。串口 为 USB-TTL 串口烧录器所使用的端口号(查看方式:控制面板 -> 设备管理器 -> 端口(COM 和 LPT)),服务器 IP 为电脑的 IP 地址。 IP 地址 为机顶盒的 IP 地址,网关一般保持默认即可 。传输方式 选择 网口(推荐)。
获取中央处理器型号和管脚配置表。点击 打开终端工具 ,然后点击连接,最后给机顶盒上电。启动信息中的
Reg Name
包含管脚配置表、中央处理器型号、内存规格、PCB 板层数、闪存类型。查看分区表。对于型号为
CM211-2
且 CPU 为Hi3798MV300H
的机顶盒,启动信息中会显示分区表信息。而对于型号为HG680-j
且 CPU 为Hi3798MV100
的机顶盒,启动信息中不会显示分区表,需要执行cat /proc/cmdline
命令查看分区表信息。查看挂载信息。执行
mount
命令查看系统中所有的挂载文件系统。查看闪存块分区。对于型号为
CM211-2
机顶盒,执行cd /dev/block/platform/soc/by-name
和ls -al
命令查看闪存块分区所指向的分区名。而对于型号为HG680-j
机顶盒,执行cd /dev/block/platform/hi_mci.1/by-name
和ls -al
命令查看闪存块分区所指向的分区名。对于其它机顶盒,可在/dev/block/platform
下的目录的子目录中寻找by-name
文件夹。查看文件系统信息。执行
df
命令查看系统中分区的大小和使用量。根据系统中分区的使用量,清理无用信息为数据备份做准备。软件卸载可使用开心电视助手软件,此软件还可以便捷的获取分区表、挂载信息、文件系统信息等。
创建和修改分区表
设置芯片型号。点击芯片 -> 切换芯片 -> Hi3798MV100 。
点击 烧写 eMMC,点击表格右侧的绿色的加号以创建新的分区。
点击名称项,根据
分区表
输入分区名,并遵循闪存块分区
中的区块顺序(从mmcblk0p1
到mmcblk0p17
)。点击文件项里面的右侧的文件夹图标(选中时出现),在弹出的对话框中选择文件路径并在输入文件名后点击打开,建议文件名与分区名一致。
点击长度项,根据
分区表
设置对应分区的大小。点击文件系统项,根据
挂载信息
选择对应分区的文件系统。此项只影响烧录的速度。勾选要操作的分区前面的复选框。
点击
eMMC分区表文件
右侧的浏览,在弹出的对话框中选择文件路径并在输入文件名后点击打开,然后点击保存。建议文件名包含设备的 CPU 型号和闪存类型。
操作固件
备份固件
方法一:TTL+HiTool
在创建和修改分区表的最后一步点击上载。
弹出对话框后关闭机顶盒电源。
开启机顶盒电源。
等待对话框中的上载的进度条结束。
方法二:TTL+U 盘
点击 打开终端工具 ,然后点击连接,最后给机顶盒上电。
执行
df
命令查看系统中分区的使用情况。插入 U 盘(FAT32 格式)后执行
df
命令查看系统中分区的使用情况,新出现的/mnt/sda/sda1
表示 U 盘挂载成功。执行
cd /dev/block/platform/soc/by-name
和ls -al
命令查看闪存块分区所指向的分区名。root@Hi3798MV300:/ # cd /dev/block/platform/soc/by-nameroot@Hi3798MV300:/dev/block/platform/soc/by-name # ls -allrwxrwxrwx root root 1970-01-01 08:00 baseparam -> /dev/block/mmcblk0p5 lrwxrwxrwx root root 1970-01-01 08:00 boot -> /dev/block/mmcblk0p9 lrwxrwxrwx root root 1970-01-01 08:00 cache -> /dev/block/mmcblk0p14 lrwxrwxrwx root root 1970-01-01 08:00 fastboot -> /dev/block/mmcblk0p1 lrwxrwxrwx root root 1970-01-01 08:00 fastplay -> /dev/block/mmcblk0p8 lrwxrwxrwx root root 1970-01-01 08:00 logo -> /dev/block/mmcblk0p7 lrwxrwxrwx root root 1970-01-01 08:00 misc -> /dev/block/mmcblk0p10 lrwxrwxrwx root root 1970-01-01 08:00 partition -> /dev/block/mmcblk0p2 lrwxrwxrwx root root 1970-01-01 08:00 pqparam -> /dev/block/mmcblk0p6 lrwxrwxrwx root root 1970-01-01 08:00 recovery -> /dev/block/mmcblk0p3 lrwxrwxrwx root root 1970-01-01 08:00 securestore -> /dev/block/mmcblk0p12 lrwxrwxrwx root root 1970-01-01 08:00 swdb -> /dev/block/mmcblk0p13 lrwxrwxrwx root root 1970-01-01 08:00 swdevinfo -> /dev/block/mmcblk0p4 lrwxrwxrwx root root 1970-01-01 08:00 system -> /dev/block/mmcblk0p15 lrwxrwxrwx root root 1970-01-01 08:00 trustedcore -> /dev/block/mmcblk0p11 lrwxrwxrwx root root 1970-01-01 08:00 userdata -> /dev/block/mmcblk0p16
执行
cd /mnt/sda/sda1
命令以切换当前工作目录为/mnt/sda/sda1
,执行mkdir FW_BK
命令以在当前工作目录创建名为FW_BK
的文件夹。使用下面的
dd
命令备份分区。对于比较大的分区,应执行dd if=/dev/block/platform/soc/by-name/userdata | gzip > /mnt/sda/sda1/FW_BK/userdata.bin.gz
命令以先压缩后输出。dd if=/dev/block/platform/soc/by-name/fastboot of=/mnt/sda/sda1/FW_BK/fastboot.bindd if=/dev/block/platform/soc/by-name/partition of=/mnt/sda/sda1/FW_BK/partition.bindd if=/dev/block/platform/soc/by-name/recovery of=/mnt/sda/sda1/FW_BK/recovery.bindd if=/dev/block/platform/soc/by-name/swdevinfo of=/mnt/sda/sda1/FW_BK/swdevinfo.bindd if=/dev/block/platform/soc/by-name/baseparam of=/mnt/sda/sda1/FW_BK/baseparam.bindd if=/dev/block/platform/soc/by-name/pqparam of=/mnt/sda/sda1/FW_BK/pqparam.bindd if=/dev/block/platform/soc/by-name/logo of=/mnt/sda/sda1/FW_BK/logo.bindd if=/dev/block/platform/soc/by-name/fastplay of=/mnt/sda/sda1/FW_BK/fastplay.bindd if=/dev/block/platform/soc/by-name/boot of=/mnt/sda/sda1/FW_BK/boot.bindd if=/dev/block/platform/soc/by-name/misc of=/mnt/sda/sda1/FW_BK/misc.bindd if=/dev/block/platform/soc/by-name/trustedcore of=/mnt/sda/sda1/FW_BK/trustedcore.bindd if=/dev/block/platform/soc/by-name/securestore of=/mnt/sda/sda1/FW_BK/securestore.bindd if=/dev/block/platform/soc/by-name/swdb of=/mnt/sda/sda1/FW_BK/swdb.bindd if=/dev/block/platform/soc/by-name/cache of=/mnt/sda/sda1/FW_BK/cache.bindd if=/dev/block/platform/soc/by-name/system of=/mnt/sda/sda1/FW_BK/system.bindd if=/dev/block/platform/soc/by-name/userdata of=/mnt/sda/sda1/FW_BK/userdata.bin
烧录固件
方法一:TTL+HiTool
解压海纳思系统固件包
TTL-hi3798mv100-202301.zip
。点击
eMMC分区表文件
右侧的浏览,在弹出的对话框中选择海纳思系统固件包中的 eMMC 分区表文件后点击打开。勾选需要烧录的分区前面的复选框。
点击烧写。
弹出对话框后关闭机顶盒电源。
开启机顶盒电源。
等待对话框中的烧写的进度条结束。
方法二:TTL+U 盘
点击 打开终端工具 ,然后点击连接,最后给机顶盒上电。
执行
df
命令查看系统中分区的使用情况。插入 U 盘(FAT32 格式)后执行
df
命令查看系统中分区的使用情况,新出现的/mnt/sda/sda1
表示 U 盘挂载成功。执行
cd /dev/block/platform/soc/by-name
和ls -al
命令查看闪存块分区所指向的分区名。root@Hi3798MV300:/ # cd /dev/block/platform/soc/by-nameroot@Hi3798MV300:/dev/block/platform/soc/by-name # ls -allrwxrwxrwx root root 1970-01-01 08:00 baseparam -> /dev/block/mmcblk0p5 lrwxrwxrwx root root 1970-01-01 08:00 boot -> /dev/block/mmcblk0p9 lrwxrwxrwx root root 1970-01-01 08:00 cache -> /dev/block/mmcblk0p14 lrwxrwxrwx root root 1970-01-01 08:00 fastboot -> /dev/block/mmcblk0p1 lrwxrwxrwx root root 1970-01-01 08:00 fastplay -> /dev/block/mmcblk0p8 lrwxrwxrwx root root 1970-01-01 08:00 logo -> /dev/block/mmcblk0p7 lrwxrwxrwx root root 1970-01-01 08:00 misc -> /dev/block/mmcblk0p10 lrwxrwxrwx root root 1970-01-01 08:00 partition -> /dev/block/mmcblk0p2 lrwxrwxrwx root root 1970-01-01 08:00 pqparam -> /dev/block/mmcblk0p6 lrwxrwxrwx root root 1970-01-01 08:00 recovery -> /dev/block/mmcblk0p3 lrwxrwxrwx root root 1970-01-01 08:00 securestore -> /dev/block/mmcblk0p12 lrwxrwxrwx root root 1970-01-01 08:00 swdb -> /dev/block/mmcblk0p13 lrwxrwxrwx root root 1970-01-01 08:00 swdevinfo -> /dev/block/mmcblk0p4 lrwxrwxrwx root root 1970-01-01 08:00 system -> /dev/block/mmcblk0p15 lrwxrwxrwx root root 1970-01-01 08:00 trustedcore -> /dev/block/mmcblk0p11 lrwxrwxrwx root root 1970-01-01 08:00 userdata -> /dev/block/mmcblk0p16
使用下面的
dd
命令烧录分区。备份的固件所在的位置为FW_BK
文件夹。对于比较大的分区,应执行gzip -dc /mnt/sda/sda1/FW_BK/userdata.bin.gz | dd of=/dev/block/platform/soc/by-name/userdata
命令以先解压后输出。dd if=/mnt/sda/sda1/FW_BK/fastboot.bin of=/dev/block/platform/soc/by-name/fastbootdd if=/mnt/sda/sda1/FW_BK/partition.bin of=/dev/block/platform/soc/by-name/partitiondd if=/mnt/sda/sda1/FW_BK/recovery.bin of=/dev/block/platform/soc/by-name/recoverydd if=/mnt/sda/sda1/FW_BK/swdevinfo.bin of=/dev/block/platform/soc/by-name/swdevinfodd if=/mnt/sda/sda1/FW_BK/baseparam.bin of=/dev/block/platform/soc/by-name/baseparamdd if=/mnt/sda/sda1/FW_BK/pqparam.bin of=/dev/block/platform/soc/by-name/pqparamdd if=/mnt/sda/sda1/FW_BK/logo.bin of=/dev/block/platform/soc/by-name/logodd if=/mnt/sda/sda1/FW_BK/fastplay.bin of=/dev/block/platform/soc/by-name/fastplaydd if=/mnt/sda/sda1/FW_BK/boot.bin of=/dev/block/platform/soc/by-name/bootdd if=/mnt/sda/sda1/FW_BK/misc.bin of=/dev/block/platform/soc/by-name/miscdd if=/mnt/sda/sda1/FW_BK/trustedcore.bin of=/dev/block/platform/soc/by-name/trustedcoredd if=/mnt/sda/sda1/FW_BK/securestore.bin of=/dev/block/platform/soc/by-name/securestoredd if=/mnt/sda/sda1/FW_BK/swdb.bin of=/dev/block/platform/soc/by-name/swdbdd if=/mnt/sda/sda1/FW_BK/cache.bin of=/dev/block/platform/soc/by-name/cachedd if=/mnt/sda/sda1/FW_BK/system.bin of=/dev/block/platform/soc/by-name/systemdd if=/mnt/sda/sda1/FW_BK/userdata.bin of=/dev/block/platform/soc/by-name/userdata
升级固件
方法一:使用 TTL+HiTool+U 盘。烧写
recovery
到recovery
,烧写emmc
到misc
,然后重启机顶盒以进入恢复模式,最后在恢复模式中选择apply update from external storage
后选择 U 盘中的update.zip
刷机包进行刷机。方法二:使用 TTL+U 盘或者ADB+U 盘。使用
dd
命令输出recovery
到recovery
,emmc
到misc
,然后执行reboot
命令以重启进入恢复模式,最后在恢复模式中选择apply update from external storage
后选择 U 盘中的update.zip
刷机包进行刷机。方法三:使用ADB或TTL或TTL+HiTool烧写
recovery
后安装原生版本的设置
软件包,进入原生版本的设置后选择本地升级以升级系统。升级包必须被命名为update.zip
并位于 U 盘的根目录。软件包一般被命名为SWProductCheck.apk
,可在卡刷救砖相关教程中搜寻。方法四:把
fastboot.bin
、bootargs.bin
、recovery.img
三个文件复制到U盘根目录。短接强制刷机的短接点,然后打开机顶盒的电源,等待几秒后松开短接。机顶盒就会加载U 盘中的fastboot.bin
并引导 U 盘中的recovery.img
进入恢复模式,最后在恢复模式中选择apply update from external storage
后选择 U 盘中的update.zip
刷机包进行刷机。方法五:把
fastboot.bin
、bootargs.bin
、recovery.img
三个文件复制到U盘根目录。使用ADB或TTL或TTL+HiTool擦除fastboot.bin
分区。重启后机顶盒就会加载U 盘中的fastboot.bin
并引导 U 盘中的recovery.img
进入恢复模式,最后在恢复模式中选择apply update from external storage
后选择 U 盘中的update.zip
刷机包进行刷机。
使用简述
在浏览器输入机顶盒的IP地址以进入海纳思系统首页。
在首页点击外网,然后点击终端管理,初始用户名和密码分别为
root
和ecoo1234
,可通过passwd root
命令修改当前系统 root 账号的密码。在终端管理页面输入
apt install minidlna
安装 MiniDLNA 软件。系统内置有基本功能的软件安装脚本, 输入以下命令即可自动安装并自动配置软件。Portainer 是可视化的容器镜像图形管理工具,青龙面板是支持 Python3、JavaScript、Shell、Typescript 脚本的定时任务管理平台,Home Assistant 是基于 Python 3 开发的集成现有智能家居生态的开源家庭自动化平台。install-portainer.sh 安装 Docker 容器管理面板 install-qinglong.sh 安装 Docker 应用: 青龙面板 install-homeassistant.sh 安装智能家居控制面板
支持通过 FTP 或 SCP 等方式对服务器文档进行管理,初始用户名和密码分别为
ubuntu
和ecoo1234
。SFTP 模式的 22 端口可访问根目录, FTP 模式的 21 端口则只能访问/home
目录。内置的 WebDAV 服务器在 8081 端口,初始用户名和密码分别为
admin
和admin
,默认存储位置在/home/ubuntu/webdav
。内置的Alist云盘支持多种存储,支持网页浏览和 WebDAV 访问。初始用户名和密码分别为
admin
和admin123
。执行
recoverbackup
命令可以还原备份系统, 根分区内的数据将全部被原备份系统清除并覆盖。
注意事项
关于芯片型号:魔百盒 CM211-2 的 CPU 型号有 MV100、MV300、MV300H。实际的 CPU 型号以
reg name
中包含 CPU 型号或芯片本身的丝印为准。关于
reg name
:芯片待烧录固件的fastboot
中的reg name
与机顶盒现有的fastboot
中的reg name
在管脚配置表和中央处理器型号上应保持一致,否则无法烧录fastboot
。启动信息中显示的reg name
仅供参考,实际的管脚配置表以机顶盒现有的fastboot
中的reg name
包含的管脚配置表为准。关于HiBurn中的传输方式:无论传输方式选择串口还是网口,烧写
fastboot
时,实际上都是通过串口来传输数据,因此非常慢。关于HiBurn中的文件系统:如果实际上存在文件系统但软件中的文件系统被设置为
none
时,在进行烧写操作时,分区镜像将会以二进制的形式进行传输;如果设置为一个确定的文件系统,如ext3/4
时,在进行烧写操作时,分区镜像将会以压缩包的形式进行传输,即对镜像先压缩后传输,最后解压并写入分区。因此,在进行烧写操作时,设置文件系统可以减少分区镜像传输所需要的时间,最终加快总体的烧写速度。对于上载操作,无论是否设置软件中的文件系统,上载的分区镜像总是以二进制的形式进行传输,不会改变上载速度。关于压缩:
userdata
分区的镜像大小会超过 4GB,超过 FAT32 文件系统限制,所以需要压缩。在使用dd
命令时,结合分区的大小和使用量来决定是否进行压缩可以有效的节省空间占用和传输时间。关于终端内容被覆盖丢失:点击窗口 -> 首选项 ,点击终端后修改终端缓存行数。
关于使用 HiTool 烧录和备份固件失败:点击窗口 -> 首选项,然后点击HiBurn,修改TFTP设置和命令设置。根据控制台的报错信息来修改对应的参数。有时重新操作一次也会恢复正常。