旧物利用 - 将机顶盒改造为一台Linux开发机!
前言
机顶盒型号:移动魔百盒CM201-2(CH),芯片组: hi3798mv300(hi3798mv3dmm),其他型号类似
理论上适用于以下SOC:Hi3798Mv100 / Hi3798Cv200 / Hi3798Mv200 / Hi3798Mv300
准备工作
1. 准备Linux系统用作编译环境,并使用Windows系统在HiTool软件进行烧录(也可不使用Windows,参考海思官方文档)
故推荐在Windows平台上安装WSL
2. 准备海思的烧录软件HiTool(Windows软件)

3. 准备烧录固件所需的USB传串口TTL线,博主使用的是CH340G,其中只需要TXD, RXD, GND三条连接到板上,并准备一根网线用于向机顶盒快速发送固件程序
CH340G需要驱动程序,需要去官网下载CH341SER.EXE
4. 准备机顶盒源码
源码链接:https://github.com/martixjohn/HiSTBLinuxV100R005C00SPC050
博主修改了部分配置以适配hi3798mv3dmm
5. 提前下载好编译所需工具链,以Ubuntu为例
sudo apt install gcc make gettext bison flex bc zlib1g-dev libncurses5-dev lzma
6. Ubuntu Rootfs Image
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
定制你的rootfs
安装常用软件,注意Ubuntu base未安装systemdNetwork Manager,需要自行安装
apt install systemd network-manager ssh
重要:需要修改root密码或创建新用户并指定密码,刷入启动后方能登录
passwd
在Linux环境下编译源码SDK
1. 拷贝预先配置,覆盖主目录下的cfg.mak
预先配置文件在configs目录下
cp configs/hi3798mv300/hi3798mv3dmm_hi3798mv300_cfg.mak cfg.mak
2. 预加载环境
. ./env.sh
make tools
3. 自定义配置编译选项(可选),和Linux内核一样,所用的配置系统是KConfig
make menuconfig
几个比较重要的配置选项
Base->Chip Type: 选择芯片组
Base->Out DIR: 输出路径,在out目录下
Board->Boot Regfile Config List: 启动的配置文件,将第一个改为自己的机顶盒匹配的配置文件名称

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

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

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

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

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

在Windows环境下使用HiTool软件烧录固件到EMMC
1. 将TTL线连接到机顶盒主板
若CH340驱动安装正确,进入设备管理器将会看到

连接示意图

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

2. 连接测试
- 打开HiTool软件,选择芯片,第一次使用可能会弹出显示

- 点击连接管理器

配置端口,会自动识别,选择CH340的端口,波特率为115200

打开终端工具

机顶盒连接电源,并按下机顶盒电源按钮,开机
若连接无误,将会在终端显示类似于如下启动信息

- 关闭机顶盒电源开关,点击终端页面的断开连接

3. 开始烧录
加载分区配置和固件:依次选择HiBurn->烧写EMMC->浏览(选择分区配置文件emmc_paritions.xml)

取一根网线连接机顶盒主板和路由器,确保PC和机顶盒能互通,配置IP信息(使用网络传输进行烧录,原因是串口传输速率过慢)
- PC与板端配置选项卡如图

在本地PC配置下,点击刷新获得对应的端口和PC的IP地址
在板端配置下,网关一般设置为路由器内网IP,一般路由器默认为192.168.1.1,子网掩码需要按照路由器进行配置,家用路由器默认是255.255.255.0,IP随意配置保证与路由器在同一子网,如192.168.1.200,物理地址随意设置
注:以上配置的目的是让机顶盒固定IP地址,以便将固件通过以太网传输到机顶盒,机顶盒会按照配置自动设置对应IP和PC建立通信
点击烧写

打开机顶盒电源开关,自动开始烧写
烧写完成,弹窗提示成功
4. 验证结果
机顶盒可能会自动重启,先关闭机顶盒开关
打开HiTool终端工具

右键Clear Terminal以清除以前的信息

连接

打开机顶盒开关,先是打印bootloader等启动信息后,直到一串绿色的OK字样显示出来,表示Ubuntu已经成功刷入!

登录即可

更换或定制Linux发行版
按照烧写步骤,只需更换最后一个分区对应的文件即可,确保只选择该分区,再点击刷写


任何分区都可以类似地自定义,大家愉快的DIY吧!
欢迎交流,博主GitHub: https://github.com/martixjohn/
旧物利用 - 将机顶盒改造为一台Linux开发机!的更多相关文章
- 安装一台Linux练习机前的考虑——主机规划与磁盘分区
要安装一台Linux主机并不是那么简单的事,我们必须要针对distributions的特性.服务器软件的能力.未来的升级需求.硬件扩充性需求等来考虑,对于磁盘分区.文件系统.Linux操作较频繁的目录 ...
- 一台linux真实机实现多台Tomcat服务
一.事前准备 ü 确保linux并未安装tomcat (这里虚拟机测试) ü 下载jdk与tomcat ① jdk-6u18-ea-bin-b01-linux-i586-20_aug_2009.bin ...
- linux开发神器--Tmux
在Linux上工作的朋友,可能会常常遇到这种情况: 痛点1: 在公司用putty连着Linux开发机,程序正跑着,不知不觉到了下班的时候,要和老婆/女朋友约会了,但是程序还没跑完,并且进度有点紧,还得 ...
- 两台linux利用heartbeat+drbd 完美实现双机热备
一直想做基于linux的双机热备,一直没有时间和机会.一直以为只要做双机热备的实验就必须两台机器外接一个存储.甚至一个月以前在学习keepalived的时候还在琢磨keepalvied去掉哪些条件可以 ...
- linux命令——scp 两台linux机器间文件或目录传输
不同的Linux之间copy文件常用有3种方法: 第一种:ftp,也就是其中一台Linux安装ftpServer,这样可以另外一台使用ftp的client程序来进行文件的copy. 第二种:采用sam ...
- 同步两台linux服务器时间同步方案
Linux自带了ntp服务 -- /etc/init.d/ntpd,这个服务不仅可以设置让本机和某台/某些机器做时间同步,他本身还可以扮演一个time server的角色,让其他机器和他同步时间. 配 ...
- 两台linux机器文件传输之scp
0.写在前面:一定要注意我们是否有源文件的读权限,是否有目标文件夹的写权限!没有的话要先把权限设置好! *.设置权限的方法:切换到有权限操作文件或文件夹的用户,利用chmod命令修改权限 1.安装: ...
- 两台linux机器时间同步
Linux自带了ntp服务 -- /etc/init.d/ntpd,这个服务不仅可以设置让本机和某台/某些机器做时间同步,他本身还可以扮演一个time server的角色,让其他机器和他同步时间. 配 ...
- 对拷 使用scp命令在两台linux上对拷文件或者文件夹
以前一直是在服务器上tar打包压缩,下载到本地电脑上,再上传到另外一台服务器上,再解压. 其实使用scp命令就可以直接对拷文件或者文件夹了. scp就是secure copy,是用来进行远程文件拷贝的 ...
- 一台Linux服务器(4C8G配置)可以负载百万个连接?
一台Linux服务器可以负载多少个连接? 首先我们来看如何标识一个TCP连接?系统是通过一个四元组来识别,(src_ip,src_port,dst_ip,dst_port)即源IP.源端口.目标IP. ...
随机推荐
- python sweetviz_数据分析及解决报告图表中文乱码
python sweetviz_数据分析 python 做数据分析,传入数据进去,就可以使用python现有的插件,进行数据分析,生成数据分析的报表,可以将复杂的数据,通过图表的形式,清晰将数据展示出 ...
- 基于SQLite3的C学习总结
背景 针对 SQLite3 的学习总结 arm linux 移植 SQLite 3 如何在 Linux 上移植使用 SQLite3,标题虽然是在讲 arm linux,但实际上是跨平台的. 基于 SQ ...
- Legacy (线段树优化建图)
题目链接:Legacy - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题解: 考虑题目中一个点向区间连边,如真的对区间中的每一点分别连边后跑最短路,时间空间都要炸. 因为是一个点向 ...
- 关于kubesphere集群calico网络组件报错的修复
最近公司的项目用到了Kubesphere,于是自己先在虚拟机上测试了一番,遇到了很多的问题,现将遇到的有关calico的问题记录一下 上一篇介绍了如何离线安装kubesphere v3.0,安装之后我 ...
- mermaid语法画图
mermaid 脚本语言 graph TB 从上到下 graph BT 从下到上 graph RL 从右到左 graph LR 从左到右 graph LR; A001-->B001; graph ...
- Excel 更改数据同步更新到Mysql数据库
刚上班,领导给我提出一个需求,想要每天更新Mysql数据库中的原有商品订单状态,添加新的商品订单状态.因为公司目前的数据库只能添加数据,不能更改数据,想要更改原有的数据,只能将原有的数据清空,再导入新 ...
- 使用docker搭建ELK分式日志同步方案
ELK作为业界最常用日志同步方案,我们今天尝试一下使用docker快速搭建一套ELK方案.ELK使用国内加速源拉取的镜像比较旧,有条件的朋友可以拉取官网的源.elasticsearch作为日志储存库( ...
- 关键点检测(1)——标注关键点检测数据(labelme和CVAT)
关键点检测,作为计算机视觉领域的重要分支,广泛应用于人体姿态估计.面部表情识别.手部动作分析等多个场景.其核心在于从图像中准确检测并定位特定的关键点位置.然而,高效的模型训练离不开大量高质量的标注数据 ...
- ffmpeg中声音解码的流程
声音解码流程: audio初始化 fifo初始化frame初始化init_resampler 解码: 如果有帧 初始化转码空间 做转码操作 resampler 放入fifo fifo是否大于 一帧数据 ...
- 一文全解:LVM(逻辑卷管理器)
前两篇文章已经讲了关于磁盘分区和磁盘阵列的相关内容: 一文全懂:Linux磁盘分区 一文全懂:独立冗余磁盘阵列(RAID) 但是磁盘分区完后再想扩容或者缩容就比较麻烦了,甚至很多时候不能扩容或者缩容, ...