旧物利用 - 将机顶盒改造为一台Linux开发机!

news/2024/9/21 22:36:41/文章来源:https://www.cnblogs.com/onecainiao/p/18353586

前言

机顶盒型号:移动魔百盒CM201-2(CH),芯片组: hi3798mv300(hi3798mv3dmm),其他型号类似

理论上适用于以下SOC:Hi3798Mv100 / Hi3798Cv200 / Hi3798Mv200 / Hi3798Mv300

准备工作

1. 准备Linux系统用作编译环境,并使用Windows系统在HiTool软件进行烧录(也可不使用Windows,参考海思官方文档)

故推荐在Windows平台上安装WSL

2. 准备海思的烧录软件HiTool(Windows软件)

image

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: 启动的配置文件,将第一个改为自己的机顶盒匹配的配置文件名称
    image

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

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

4. 源码编译

make build

可以开启多核编译,如博主使用16核进行编译

make build -j 16

等待编译完成,输出结果放在out目录下,烧录所需的文件如图所示

image

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

image

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

在Windows环境下使用HiTool软件烧录固件到EMMC

1. 将TTL线连接到机顶盒主板

  • 若CH340驱动安装正确,进入设备管理器将会看到
    image

  • 连接示意图
    image

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

image

2. 连接测试

  • 打开HiTool软件,选择芯片,第一次使用可能会弹出显示

image

  • 点击连接管理器

image

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

  • 打开终端工具
    image

  • 机顶盒连接电源,并按下机顶盒电源按钮,开机

若连接无误,将会在终端显示类似于如下启动信息
image

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

image

3. 开始烧录

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

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

    • PC与板端配置选项卡如图

    image

    • 在本地PC配置下,点击刷新获得对应的端口和PC的IP地址

    • 在板端配置下,网关一般设置为路由器内网IP,一般路由器默认为192.168.1.1,子网掩码需要按照路由器进行配置,家用路由器默认是255.255.255.0,IP随意配置保证与路由器在同一子网,如192.168.1.200,物理地址随意设置

    注:以上配置的目的是让机顶盒固定IP地址,以便将固件通过以太网传输到机顶盒,机顶盒会按照配置自动设置对应IP和PC建立通信

  • 点击烧写

image

  • 打开机顶盒电源开关,自动开始烧写

  • 烧写完成,弹窗提示成功

4. 验证结果

  • 机顶盒可能会自动重启,先关闭机顶盒开关

  • 打开HiTool终端工具
    image

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

  • 连接
    image

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

image

登录即可
image

更换或定制Linux发行版

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

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

欢迎交流,博主GitHub: https://github.com/martixjohn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/781320.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7-3FM模型

FM算法全称为因子分解机 (FactorizationMachine)。它是广告和推荐领域非常著名的算法,在线性回归模型上考虑了特征的二阶交互。适合捕捉大规模稀疏特征(类别特征)当中的特征交互。FM算法全称为因子分解机 (FactorizationMachine)。 它是广告和推荐领域非常著名的算法,在线性回…

这是DDD建模最难的部分(其实很简单)

本文书接上回《为了落地DDD,我是这样“PUA”大家的》 ,欢迎关注我的同名公众号。 https://mp.weixin.qq.com/s/DjC0FSWY1bgJyLPIND5evA什么是最重要的事如果你认真读过前面的文章,那么一定知道我们的核心逻辑:领域驱动是一种价值观,这个价值观是:“领域(边界)”的明确是…

CSP17

请注意:题目背景与题目可能没有关系第一题,性质题,找到序列的最大值与最小值,我们发现如果只有正数的话和只有负数的话都很好处理,正数正序处理类似前缀加,负数后缀加,那如果正负都有,该怎么办呢?其实我们可以吧序列全变为正的或负的吧,但是需要比较一下最大值最小值,…

丰富有趣的颜色空间

颜色空间就像是一套套颜色语言,其将视觉上的颜色以数字的形式定义表示,使其能够准确描述某个颜色简介 颜色是视觉的表现,而自然界的颜色是多姿多彩的,如果让我们用语言描述一个自然界的颜色,有些人可能会用红橙黄绿蓝靛紫,外加一些修饰词,但它不太能够准确的描述一个颜色…

Struts2基础1--创建一个Struts2 Web应用程序

Struts2不仅仅是Struts1 的升级版本,更是一个全新的Struts架构,是当前较为普及和成熟的基于MVC设计模式的Web应用程序框架,并在RIA(Rich Internet Applications)Web应用程序开发中得到了广泛应用,成为最好的Web框架之一。本文将通过详细的步骤来说明如何下载获取相关资源…

STM32学习记录(九):RTC

RTC框图 实时时钟(Real-time clock: RTC)是一个独立的计时器。RTC提供一组连续运行的计数器,可以与合适的软件一起使用,以提供时钟日历功能。可以写入计数器值以设置系统的当前时间/日期。可以选择以下三种作为RTC时钟源:HSE时钟进行128分频 LSE振荡器时钟 LSI振荡器时钟有关…

炒鸡好用的Markdown语法

简介 Markdown是一种轻量级标记语言,它最初由John Gruber和Aaron Swartz在2004年共同创建,可以通过简单、纯文本的语法,快速构建格式化、排版精美的文档。其可与HTML混编,可导出为HTML、PDF、Word等格式的文件 Markdown可以让作者更多地关注内容本身而非格式排版。同样的内…

Arweave区块链私有化部署

Arweave区块链私有化部署Arweave区块链主打数据永久存储,即保存在区块链的数据永久存在、不可篡改。公链主网络arweave.N.1在2024年8月11日累计产生了148万个区块(见下截图所示),区块还在不断产生,大约2分钟产生一个区块。Arweave区块链可以在Ubuntu 22.04LTS或Ubuntu 24.04…

多线程复习总结

1基本概念 1什么是进程什么是线程 进程:是程序执行一次的过程,他是动态的概念,是资源分配的基本单位。一个应用程序(1个进程是一个软件)。 线程:一个进程可以有多个线程,线程是cpu调度的单位,一个进程中的执行场景/执行单元。 对于java程序来说,当在DOS命令窗口中输入…

kubernetes-POD的基本原理

目录什么是POD?POD有以下特点:为什么使用POD作为最小单元,而不是container为什么允许一个POD里有多个容器POD中如何管理多个容器POD的yaml格式定义配置文件说明如何使用PodPOD的持久性和终止Pause我们首先在节点上运行一个pause容器然后再运行一个nginx容器,nginx将为localh…

【投资认知】- 2024Q1的英伟达NVIDIA

来自关注的Twitter博主@ZeevyInvesting 💡 Investing visuals | 📜 One-pager analysis | 📈 Tech portfolio updates | 🥊 Business Battles来源:https://twitter.com/ZeevyInvesting/status/1801691822705512947名词解释CAGR:复合年增长率(Compound Annual Grow…