
前言家里有一台机顶盒移动魔百盒淘汰下来了博主想要物尽其用看看是否能将其改造为一台Linux开发机量身定制系统用作开发和测试以及跑服务器博主选择的是Ubuntu发行版系统话不多说开始“破解”吧准备工作机顶盒型号移动魔百盒CM201-2(CH)芯片组: hi3798mv300hi3798mv3dmm其他型号类似理论上适用于以下SOC的机顶盒Hi3798Mv100 / Hi3798Cv200 / Hi3798Mv200 / Hi3798Mv3001. 准备Linux系统和Windows系统前者作为源码编译环境后者需要使用到进行固件烧录的软件烧录也可以命令行形式甚至不需要Windows需要参考海思官方文档为了方便故在Windows平台下进行烧录故强烈推荐在Windows平台上安装WSL2. 准备海思的烧录软件HiToolWindows软件3. 准备烧录固件所需的USB传串口模块以及接线其中只需要TXD, RXD, GND三条连接到板上并准备一根网线用于向机顶盒快速发送固件程序博主使用的是CH340G如图CH340G需要驱动程序需要去官网下载CH341SER.EXE若CH340驱动安装正确进入设备管理器将会看到对应端口4. 准备机顶盒源码源码链接https://github.com/martixjohn/HiSTBLinuxV100R005C00SPC050源码包含机器的引导程序、启动参数、Linux内核以及一个基本的rootfs博主修改了部分配置以适配hi3798mv3dmm5. Ubuntu 镜像从ubuntu官网或镜像源下载匹配机顶盒架构的Ubuntu base新建空文件建议至少为800M用作环回文件(loopback)dd if/dev/zero ofubuntu.img bs400M count1格式化该环回文件创建ext4文件系统mkfs.ext4 ubuntu.img挂载环回文件# 创建挂载分区 mkdir -p /mnt/loopback # 虚拟成块设备 losetup --find --show ubuntu.img # 将块设备挂载到分区如/dev/loop0 mount /dev/loop0 /mnt/loopback解压Ubuntu basetar -xzf ubuntu.base.tar.xz -C /mnt/loopback切换根目录建议使用arch-chroot其中做了许多挂载等工作无需关心额外步骤arch-chroot /mnt/loopback更改root密码重要需要修改root密码或创建新用户并指定密码刷入启动后方能登录passwd定制你的rootfs安装必要和非必要软件注意Ubuntu base预装systemdNetwork Manager需要自行安装apt install systemd network-manager建议安装openssh否则只能串口作为tty交互使用apt install ssh提前了解设备配置信息1. 使用TTL线连接到机顶盒连接示意图主板接线如图从左到右依次连接到转接板的GND, TXD, RXD不同板子可能有所差别可以尝试调一下TXD, RXD顺序2. 连接测试打开HiTool软件选择芯片第一次使用可能会弹出显示可以百度搜一下自己的机顶盒背面的型号确认芯片点击连接管理器配置端口会自动识别选择CH340的端口波特率为115200打开终端工具机顶盒连接电源并按下机顶盒电源按钮开机3. 查看配置信息若连接无误将会在终端显示类似于如下启动信息其中Reg Name是我们需要留意的关闭机顶盒电源开关并点击终端页面的断开连接防止端口占用在Linux环境下编译源码SDK1. 下载编译环境以ubuntu为例sudo apt install gcc make gettext bison flex bc zlib1g-dev libncurses5-dev lzma2. 拷贝预先配置覆盖主目录下的cfg.mak预先配置文件在configs目录下cp configs/hi3798mv300/hi3798mv3dmm_hi3798mv300_cfg.mak cfg.mak3. 预加载编译环境. ./env.sh make tools4. 可选自定义配置编译选项和Linux内核一样所用的配置系统是KConfigmake menuconfig几个比较重要的配置选项Base-Chip Type: 选择芯片组Base-Out DIR: 输出路径在out目录下Board-Boot Regfile Config List: 启动的配置文件将第一个改为自己的机顶盒匹配的配置文件名称该文件存放于source/boot/sysreg/xxx/*.reg不同机顶盒的内存颗粒等硬件可能有所区别参照连接测试显示的Reg Name进行选择