舊物利用 - 將機頂盒改造為一臺Linux開發機!

学习新知识的小白白發表於2024-08-11

前言

家裡有一臺機頂盒(移動魔百盒)淘汰下來了,博主想要物盡其用,看看是否能將其改造為一臺Linux"開發機",量身定製系統,用作開發和測試,以及跑伺服器

博主選擇的是Ubuntu發行版系統,話不多說,開始“破解”吧!

準備工作

機頂盒型號:移動魔百盒CM201-2(CH),晶片組: hi3798mv300(hi3798mv3dmm),其他型號類似

理論上適用於以下SOC的機頂盒:Hi3798Mv100 / Hi3798Cv200 / Hi3798Mv200 / Hi3798Mv300

1. 準備Linux系統和Windows系統

前者作為原始碼編譯環境,後者需要使用到進行韌體燒錄的軟體

(燒錄也可以命令列形式甚至不需要Windows,需要參考海思官方文件,為了方便故在Windows平臺下進行燒錄)

故強烈推薦在Windows平臺上安裝WSL

2. 準備海思的燒錄軟體HiTool(Windows軟體)

image

3. 準備燒錄韌體所需的USB傳串列埠模組以及接線,其中只需要TXD, RXD, GND三條連線到板上,並準備一根網線用於向機頂盒快速傳送韌體程式

博主使用的是CH340G,如圖

img

CH340G需要驅動程式,需要去官網下載CH341SER.EXE

若CH340驅動安裝正確,進入裝置管理器將會看到對應埠

image

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線連線到機頂盒

連線示意圖

img

主機板接線如圖,從左到右依次連線到轉接板的GND, TXD, RXD,不同板子可能有所差別,可以嘗試調一下TXD, RXD順序

image

2. 連線測試

  • 開啟HiTool軟體,選擇晶片,第一次使用可能會彈出顯示

    可以百度搜一下自己的機頂盒背面的型號,確認晶片

    image

  • 點選連線管理器

    image

    配置埠,會自動識別,選擇CH340的埠,波特率為115200

    image

  • 開啟終端工具

    image

  • 機頂盒連線電源,並按下機頂盒電源按鈕,開機

3. 檢視配置資訊

若連線無誤,將會在終端顯示類似於如下啟動資訊

image

其中Reg Name是我們需要留意的

關閉機頂盒電源開關,並點選終端頁面的斷開連線,防止埠占用

image

在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: 啟動的配置檔案,將第一個改為自己的機頂盒匹配的配置檔名稱

    image

    該檔案存放於source/boot/sysreg/xxx/*.reg

    image

    不同機頂盒的記憶體顆粒等硬體可能有所區別,參照連線測試顯示的Reg Name進行選擇

    image

5. 執行編譯

make build

可以開啟多核編譯,如博主使用16核進行編譯

make build -j 16

等待編譯完成,輸出結果放在out目錄下,燒錄所需的檔案如圖所示

image

加上ubuntu rootfs image之後,燒錄應當準備好如下所示的檔案

image

修改分割槽配置檔案emmc_partitions.xml,將最後一項的SelectFile改為ubuntu映象的檔名,Length屬性改為-,表示佔滿儲存器剩餘空間

image

在Windows環境下使用HiTool軟體燒錄韌體到EMMC

開啟軟體,進入HiBurn檢視模式

1. 配置選項

  • 取一根網線連線機頂盒主機板和路由器,確保PC和機頂盒能互通,配置IP資訊(使用網路傳輸進行燒錄,原因是串列埠傳輸速率過慢)

    • PC與板端配置選項卡如圖

    image

    • 在本地PC配置下,點選重新整理獲得對應的埠和PC的IP地址

    • 在板端配置下,閘道器一般設定為路由器內網IP,一般路由器預設為192.168.1.1,子網掩碼需要按照路由器進行配置,家用路由器預設是255.255.255.0,IP隨意配置保證與路由器在同一子網,如192.168.1.200,實體地址隨意設定

    • 傳輸方式選擇:網口

注:以上配置的目的是讓機頂盒固定IP地址,以便將韌體透過乙太網傳輸到機頂盒,機頂盒會按照配置自動設定對應IP和PC建立通訊

  • 載入分割槽配置和韌體:依次選擇HiBurn->燒寫EMMC->瀏覽(選擇分割槽配置檔案emmc_paritions.xml)

    image

2. 燒錄韌體

  • 確保連線好網線,機頂盒處於關機狀態

  • 點選燒寫

    image

  • 開啟機頂盒電源開關,自動開始燒寫

  • 燒寫完成,彈窗提示成功

3. 驗證結果

  • 機頂盒可能會自動重啟,先關閉機頂盒開關

  • 開啟HiTool終端工具

    image

  • 右鍵Clear Terminal以清除以前的日誌資訊

    image

  • 點選連線

    image

  • 開啟機頂盒開關,先是列印bootloader等啟動資訊後,直到一串綠色的OK字樣顯示出來,表示Ubuntu已經成功刷入!

    image

  • 登入Ubuntu,開始使用

    image

以後裝置每次開機都會自動引導進入Ubuntu

更換或定製屬於自己的Linux發行版

只需燒寫最後一個分割槽對應的映象即可

image

確保只選擇該分割槽,再點選刷寫

image

任何分割槽都可以類似地自定義,大家愉快的DIY吧!

相關文章