首页 > 系统相关 >旧物利用 - 将机顶盒改造为一台Linux开发机!

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

时间:2024-08-11 16:38:17浏览次数:6  
标签:烧录 Linux 配置 连接 Ubuntu 机顶盒 ubuntu 旧物

前言

家里的机顶盒淘汰下来,博主想要物尽其用,看看是否能将其改造为一台Ubuntu"开发机",故开始倒腾

准备工作

机顶盒型号:移动魔百盒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/

标签:烧录,Linux,配置,连接,Ubuntu,机顶盒,ubuntu,旧物
From: https://www.cnblogs.com/onecainiao/p/18353586

相关文章

  • Linux 下利用 Valgrind 进行内存调试
    目录一、概述二、Valgrind的使用1、基本格式2、Valgrind工具集3、Memcheck3.1使用未初始化的内存3.2内存泄漏3.3在内存被释放后进行读/写3.4内存块的尾部进行读/写4、常见错误三、分析内存泄漏的使用技巧1、Valgrind协调GDB工作2、利用/proc定位问题3、使用......
  • Linux 错误码
    目录一、概述二、含义三、错误处理函数1、IS_ERR2、strerr、perror一、概述在Linux系统中,错误码是用来表示操作系统运行过程中发生的错误的数字代码。错误码通常由负数表示,0表示成功,正数表示警告或其他非致命错误。为了开发者更好地处理系统错误,内核中预定义的......
  • Linux解决频繁的sudo权限认证
    1.在进行一些软件包的安装时,经常性的需要输入密码以进行sudo权限执行。默认的sudo命令可以维持5分钟时间,这个时间是可以设置的。2.使用vi打开/etc/sudoers配置文件,(修改需要有权限,可以看下面第四点)。3.按i进入编辑状态,修改%admin该行代码,修改后按esc退出编辑状态,输入:wq,以保存退......
  • linux内核级性能调优
    1.Linux内核级性能调优常见选项Linux内核级性能调优是一个广泛的话题,涉及多个方面。以下是一些关键的调优领域和技术:1.CPU调度优化:  -调整CFS(完全公平调度器)参数  -使用CPU亲和性(CPUaffinity)  -配置NUMA(非统一内存访问)策略  -调整进程优先......
  • Linux实时扩展(PREEMPT_RT)
    一.Linux  PREEMPT_RT介绍PREEMPT_RT(实时抢占补丁)是Linux内核的一个重要扩展,专门用于提高Linux系统的实时性能。让我详细解释一下这个概念及其重要性:1.PREEMPT_RT的基本概念:  •全称是"FullyPreemptibleKernel"  •目标是将Linux内核转变为完全可抢......
  • Linux 内存屏障
    一.Linux内存屏障概念Linux内存屏障是一种同步原语,用于确保在多处理器系统或单处理器的乱序执行环境中,内存操作按照特定顺序执行。它们在并发编程、设备驱动程序开发和底层系统编程中扮演着重要角色。以下是关于Linux内存屏障的详细解释:1.基本概念:  •内存屏障是一......
  • linux 使用iio 通过I2C 方式采集实例
    IIO(IndustrialI/O)子系统通过I2C方式采集数据的实例。这个例子包括驱动程序和用户空间应用程序。首先,让我们创建一个简单的IIO驱动程序,它通过I2C接口与ADC(模数转换器)通信,并通过PCI总线连接到系统。1.驱动程序(my_iio_driver.c):```c#include<linux/module.h>......
  • Linux C++ 多线程编程
    LinuxC++多线程编程参考教程:c++:互斥锁/多线程的创建和unique_lock<mutex>的使用_mutex头文件vc++-CSDN博客1.编写unique_mutex1.1创建文件夹通过终端创建一个名为unique_mutex的文件夹以保存我们的VSCode项目,在/unique_mutex目录下打开vscode。rosnoetic@rosnoetic-Virt......
  • Linux常用命令(图文并茂+超详细!)
    ......
  • Linux5:Shell编程——函数、重定向
    目录前言一、函数1.函数结构2.函数实例3.函数传参二、重定向1.输出重定向2.输入重定向3.同时使用4.重定向深入了解 5.垃圾桶总结前言    Shell编程将会在本章完结 一、函数1.函数结构#!/bin/sh#函数functionfun1(){echo"thisisaf......