前言
家里有一台机顶盒(移动魔百盒)淘汰下来了,博主想要物尽其用,看看是否能将其改造为一台Linux"开发机",量身定制系统,用作开发和测试,以及跑服务器
博主选择的是Ubuntu发行版系统,话不多说,开始“破解”吧!
准备工作
机顶盒型号:移动魔百盒CM201-2(CH),芯片组: hi3798mv300(hi3798mv3dmm),其他型号类似
理论上适用于以下SOC的机顶盒:Hi3798Mv100 / Hi3798Cv200 / Hi3798Mv200 / Hi3798Mv300
1. 准备Linux系统和Windows系统
前者作为源码编译环境,后者需要使用到进行固件烧录的软件
(烧录也可以命令行形式甚至不需要Windows,需要参考海思官方文档,为了方便故在Windows平台下进行烧录)
故强烈推荐在Windows平台上安装WSL

3. 准备烧录固件所需的USB传串口模块以及接线,其中只需要TXD, RXD, GND三条连接到板上,并准备一根网线用于向机顶盒快速发送固件程序
博主使用的是CH340G,如图

CH340G需要驱动程序,需要去官网下载CH341SER.EXE
若CH340驱动安装正确,进入设备管理器将会看到对应端口

4. 准备机顶盒源码
源码链接:https://github.com/martixjohn/HiSTBLinuxV100R005C00SPC050
源码包含机器的引导程序、启动参数、Linux内核以及一个基本的rootfs
博主修改了部分配置以适配hi3798mv3dmm
5. Ubuntu 镜像
-
从ubuntu官网或镜像源下载匹配机顶盒架构的Ubuntu base
-
新建空文件,建议至少为800M,用作环回文件(loopback)
dd if=/dev/zero of=ubuntu.img bs=400M count=1
-
格式化该环回文件,创建ext4文件系统
mkfs.ext4 ubuntu.img
-
挂载环回文件
# 创建挂载分区
mkdir -p /mnt/loopback
# 虚拟成块设备
losetup --find --show ubuntu.img
# 将块设备挂载到分区,如/dev/loop0
mount /dev/loop0 /mnt/loopback
-
解压Ubuntu base
tar -xzf ubuntu.base.tar.xz -C /mnt/loopback
-
切换根目录
建议使用arch-chroot,其中做了许多挂载等工作,无需关心额外步骤
arch-chroot /mnt/loopback
-
更改root密码
重要:需要修改root密码或创建新用户并指定密码,刷入启动后方能登录
passwd
-
定制你的rootfs,安装必要和非必要软件
注意Ubuntu base预装systemd,Network Manager,需要自行安装
apt install systemd network-manager
建议安装openssh,否则只能串口作为tty交互使用
apt install ssh
提前了解设备配置信息
1. 使用TTL线连接到机顶盒
连接示意图

主板接线如图,从左到右依次连接到转接板的GND, TXD, RXD,不同板子可能有所差别,可以尝试调一下TXD, RXD顺序

2. 连接测试
3. 查看配置信息
若连接无误,将会在终端显示类似于如下启动信息

其中Reg Name是我们需要留意的
关闭机顶盒电源开关,并点击终端页面的断开连接,防止端口占用

在Linux环境下编译源码SDK
1. 下载编译环境
以ubuntu为例
sudo apt install gcc make gettext bison flex bc zlib1g-dev libncurses5-dev lzma
2. 拷贝预先配置,覆盖主目录下的cfg.mak
预先配置文件在configs目录下
cp configs/hi3798mv300/hi3798mv3dmm_hi3798mv300_cfg.mak cfg.mak
3. 预加载编译环境
. ./env.sh
make tools
4. (可选)自定义配置编译选项
和Linux内核一样,所用的配置系统是KConfig
make menuconfig
几个比较重要的配置选项
-
Base->Chip Type: 选择芯片组
-
Base->Out DIR: 输出路径,在out目录下
-
Board->Boot Regfile Config List: 启动的配置文件,将第一个改为自己的机顶盒匹配的配置文件名称

该文件存放于source/boot/sysreg/xxx/*.reg

不同机顶盒的内存颗粒等硬件可能有所区别,参照连接测试显示的Reg Name进行选择

5. 执行编译
make build
可以开启多核编译,如博主使用16核进行编译
make build -j 16
等待编译完成,输出结果放在out目录下,烧录所需的文件如图所示

加上ubuntu rootfs image之后,烧录应当准备好如下所示的文件

修改分区配置文件emmc_partitions.xml,将最后一项的SelectFile改为ubuntu镜像的文件名,Length属性改为-,表示占满存储器剩余空间

打开软件,进入HiBurn视图模式
1. 配置选项
注:以上配置的目的是让机顶盒固定IP地址,以便将固件通过以太网传输到机顶盒,机顶盒会按照配置自动设置对应IP和PC建立通信
2. 烧录固件
-
确保连接好网线,机顶盒处于关机状态
-
点击烧写

-
打开机顶盒电源开关,自动开始烧写
-
烧写完成,弹窗提示成功
3. 验证结果
以后设备每次开机都会自动引导进入Ubuntu
更换或定制属于自己的Linux发行版
只需烧写最后一个分区对应的镜像即可

确保只选择该分区,再点击刷写

任何分区都可以类似地自定义,大家愉快的DIY吧!