介紹了使用海思 CPU 的機頂盒的固件備份和燒錄。通過 USB-TTL 串口燒錄器 CH340 連接機頂盒,使用華為海思刷機工具 HiTool 創建和修改分區表文件,備份和燒寫固件,通過升級包升級系統。在海納思系統中安裝homeassistant,通過 FTP、WebDAV、Alist雲盤訪問文件,... ...
海思機頂盒Hi3798使用Hitool和TTL備份並燒錄海納思Linux伺服器系統固件
摘要
- 介紹了使用海思 CPU 的機頂盒的固件備份和燒錄。通過 USB-TTL 串口燒錄器 CH340 連接機頂盒,使用華為海思刷機工具 HiTool 創建和修改分區表文件,備份和燒寫固件,通過升級包升級系統。在海納思系統中安裝homeassistant,通過 FTP、WebDAV、Alist雲盤訪問文件,真實的 CPU 型號和 reg name 的確定,以及加快燒寫速度的方法。
背景說明
-
使用 Home assistant(後文縮寫為 HA)需要個人伺服器,根據不同的情況有不同的家用 Linux 伺服器方案。
伺服器方案 優點 缺點 舊手機 體積小、功耗低、價格低 性能低、網路受限 機頂盒 體積小、功耗低、價格低 性能低、網路受限 樹莓派 體積小、功耗低 價格貴、性能中、網路受限 迷你主機 體積小、價格中 功耗中、性能中、網路受限 NAS 體積中、價格中 功耗高、性能高、網路受限 電腦/伺服器 性能高 價格貴、體積大、功耗高、網路受限 雲伺服器 網路不受限,性能高 價格貴 -
舊手機可用於簡單的功能驗證,安裝較為複雜,也容易出現問題。目前常用的方案有termux、termux+proot、Alpine Term+docker、linux deploy(需要 root 許可權)。termux 和 termux+proot 方案主要是通過安裝 Python 來安裝 HA。經過嘗試,termux 安裝 HA 會出現依賴報錯;termux+proot+debian 啟動 HA 時會出現版本錯誤的提示;Alpine Term+docker 安裝 HA 後可以正常運行,但性能極低卡頓嚴重。
-
機頂盒可用於簡單的個人使用,安裝難度一般,不容易出現問題。目前常用的有Armbian、海納思系統這兩種方案,主要是通過安裝 docker 來安裝 HA。海納思系統 主要支持海思晶元中的 Hi3798MV100 、Hi3798MV200 、Hi3798MV300 ,不支持Hi3798MV300H 等帶尾碼的處理器。Armbian 主要支持晶晨晶元中的 S9xx 系列。
-
原本是打算對型號為
CM211-2
的機頂盒進行刷機,後來發現 CPU 型號為Hi3798MV300H
。於是改為對型號為HG680-j
且 CPU 為Hi3798MV100
的機頂盒進行刷機。
操作實踐
前提要求
-
軟體:華為海思刷機工具HiTool,電視機頂盒工具開心電視助手(非必需)。
-
硬體:電腦,USB-TTL 串口燒錄器 CH340,U 盤。
獲取系統信息
-
使用網線將接機頂盒和電腦連接到網路,使用導線連接機頂盒和 USB-TTL 串口燒錄工具。
-
打開HiTool後點擊HiBurn。
-
設置PC 與板端配置參數。設置 本地 PC 配置下的串口 和 伺服器 IP,板端配置下的IP 地址 和網關。串口 為 USB-TTL 串口燒錄器所使用的埠號(查看方式:控制面板 -> 設備管理器 -> 埠(COM 和 LPT)),伺服器 IP 為電腦的 IP 地址。 IP 地址 為機頂盒的 IP 地址,網關一般保持預設即可 。傳輸方式 選擇 網口(推薦)。
-
獲取中央處理器型號和管腳配置表。點擊 打開終端工具 ,然後點擊連接,最後給機頂盒上電。啟動信息中的
Reg Name
包含管腳配置表、中央處理器型號、記憶體規格、PCB 板層數、快閃記憶體類型。
-
查看分區表。對於型號為
CM211-2
且 CPU 為Hi3798MV300H
的機頂盒,啟動信息中會顯示分區表信息。而對於型號為HG680-j
且 CPU 為Hi3798MV100
的機頂盒,啟動信息中不會顯示分區表,需要執行cat /proc/cmdline
命令查看分區表信息。
-
查看掛載信息。執行
mount
命令查看系統中所有的掛載文件系統。
-
查看快閃記憶體塊分區。對於型號為
CM211-2
機頂盒,執行cd /dev/block/platform/soc/by-name
和ls -al
命令查看快閃記憶體塊分區所指向的分區名。而對於型號為HG680-j
機頂盒,執行cd /dev/block/platform/hi_mci.1/by-name
和ls -al
命令查看快閃記憶體塊分區所指向的分區名。對於其它機頂盒,可在/dev/block/platform
下的目錄的子目錄中尋找by-name
文件夾。
-
查看文件系統信息。執行
df
命令查看系統中分區的大小和使用量。
-
根據系統中分區的使用量,清理無用信息為數據備份做準備。軟體卸載可使用開心電視助手軟體,此軟體還可以便捷的獲取分區表、掛載信息、文件系統信息等。
創建和修改分區表
-
設置晶元型號。點擊晶元 -> 切換晶元 -> Hi3798MV100 。
-
點擊 燒寫 eMMC,點擊表格右側的綠色的加號以創建新的分區。
-
點擊名稱項,根據
分區表
輸入分區名,並遵循快閃記憶體塊分區
中的區塊順序(從mmcblk0p1
到mmcblk0p17
)。 -
點擊文件項裡面的右側的文件夾圖標(選中時出現),在彈出的對話框中選擇文件路徑併在輸入文件名後點擊打開,建議文件名與分區名一致。
-
點擊長度項,根據
分區表
設置對應分區的大小。 -
點擊文件系統項,根據
掛載信息
選擇對應分區的文件系統。此項隻影響燒錄的速度。 -
勾選要操作的分區前面的覆選框。
-
點擊
eMMC分區表文件
右側的瀏覽,在彈出的對話框中選擇文件路徑併在輸入文件名後點擊打開,然後點擊保存。建議文件名包含設備的 CPU 型號和快閃記憶體類型。
操作固件
備份固件
方法一:TTL+HiTool
-
在創建和修改分區表的最後一步點擊上傳。
-
彈出對話框後關閉機頂盒電源。
-
開啟機頂盒電源。
-
等待對話框中的上傳的進度條結束。
方法二:TTL+U 盤
-
點擊 打開終端工具 ,然後點擊連接,最後給機頂盒上電。
-
執行
df
命令查看系統中分區的使用情況。 -
插入 U 盤(FAT32 格式)後執行
df
命令查看系統中分區的使用情況,新出現的/mnt/sda/sda1
表示 U 盤掛載成功。 -
執行
cd /dev/block/platform/soc/by-name
和ls -al
命令查看快閃記憶體塊分區所指向的分區名。root@Hi3798MV300:/ # cd /dev/block/platform/soc/by-name root@Hi3798MV300:/dev/block/platform/soc/by-name # ls -al lrwxrwxrwx root root 1970-01-01 08:00 baseparam -> /dev/block/mmcblk0p5 lrwxrwxrwx root root 1970-01-01 08:00 boot -> /dev/block/mmcblk0p9 lrwxrwxrwx root root 1970-01-01 08:00 cache -> /dev/block/mmcblk0p14 lrwxrwxrwx root root 1970-01-01 08:00 fastboot -> /dev/block/mmcblk0p1 lrwxrwxrwx root root 1970-01-01 08:00 fastplay -> /dev/block/mmcblk0p8 lrwxrwxrwx root root 1970-01-01 08:00 logo -> /dev/block/mmcblk0p7 lrwxrwxrwx root root 1970-01-01 08:00 misc -> /dev/block/mmcblk0p10 lrwxrwxrwx root root 1970-01-01 08:00 partition -> /dev/block/mmcblk0p2 lrwxrwxrwx root root 1970-01-01 08:00 pqparam -> /dev/block/mmcblk0p6 lrwxrwxrwx root root 1970-01-01 08:00 recovery -> /dev/block/mmcblk0p3 lrwxrwxrwx root root 1970-01-01 08:00 securestore -> /dev/block/mmcblk0p12 lrwxrwxrwx root root 1970-01-01 08:00 swdb -> /dev/block/mmcblk0p13 lrwxrwxrwx root root 1970-01-01 08:00 swdevinfo -> /dev/block/mmcblk0p4 lrwxrwxrwx root root 1970-01-01 08:00 system -> /dev/block/mmcblk0p15 lrwxrwxrwx root root 1970-01-01 08:00 trustedcore -> /dev/block/mmcblk0p11 lrwxrwxrwx root root 1970-01-01 08:00 userdata -> /dev/block/mmcblk0p16
-
執行
cd /mnt/sda/sda1
命令以切換當前工作目錄為/mnt/sda/sda1
,執行mkdir FW_BK
命令以在當前工作目錄創建名為FW_BK
的文件夾。 -
使用下麵的
dd
命令備份分區。對於比較大的分區,應執行dd if=/dev/block/platform/soc/by-name/userdata | gzip > /mnt/sda/sda1/FW_BK/userdata.bin.gz
命令以先壓縮後輸出。dd if=/dev/block/platform/soc/by-name/fastboot of=/mnt/sda/sda1/FW_BK/fastboot.bin dd if=/dev/block/platform/soc/by-name/partition of=/mnt/sda/sda1/FW_BK/partition.bin dd if=/dev/block/platform/soc/by-name/recovery of=/mnt/sda/sda1/FW_BK/recovery.bin dd if=/dev/block/platform/soc/by-name/swdevinfo of=/mnt/sda/sda1/FW_BK/swdevinfo.bin dd if=/dev/block/platform/soc/by-name/baseparam of=/mnt/sda/sda1/FW_BK/baseparam.bin dd if=/dev/block/platform/soc/by-name/pqparam of=/mnt/sda/sda1/FW_BK/pqparam.bin dd if=/dev/block/platform/soc/by-name/logo of=/mnt/sda/sda1/FW_BK/logo.bin dd if=/dev/block/platform/soc/by-name/fastplay of=/mnt/sda/sda1/FW_BK/fastplay.bin dd if=/dev/block/platform/soc/by-name/boot of=/mnt/sda/sda1/FW_BK/boot.bin dd if=/dev/block/platform/soc/by-name/misc of=/mnt/sda/sda1/FW_BK/misc.bin dd if=/dev/block/platform/soc/by-name/trustedcore of=/mnt/sda/sda1/FW_BK/trustedcore.bin dd if=/dev/block/platform/soc/by-name/securestore of=/mnt/sda/sda1/FW_BK/securestore.bin dd if=/dev/block/platform/soc/by-name/swdb of=/mnt/sda/sda1/FW_BK/swdb.bin dd if=/dev/block/platform/soc/by-name/cache of=/mnt/sda/sda1/FW_BK/cache.bin dd if=/dev/block/platform/soc/by-name/system of=/mnt/sda/sda1/FW_BK/system.bin dd if=/dev/block/platform/soc/by-name/userdata of=/mnt/sda/sda1/FW_BK/userdata.bin
燒錄固件
方法一:TTL+HiTool
-
解壓海納思系統固件包
TTL-hi3798mv100-202301.zip
。 -
點擊
eMMC分區表文件
右側的瀏覽,在彈出的對話框中選擇海納思系統固件包中的 eMMC 分區表文件後點擊打開。 -
勾選需要燒錄的分區前面的覆選框。
-
點擊燒寫。
-
彈出對話框後關閉機頂盒電源。
-
開啟機頂盒電源。
-
等待對話框中的燒寫的進度條結束。
方法二:TTL+U 盤
-
點擊 打開終端工具 ,然後點擊連接,最後給機頂盒上電。
-
執行
df
命令查看系統中分區的使用情況。 -
插入 U 盤(FAT32 格式)後執行
df
命令查看系統中分區的使用情況,新出現的/mnt/sda/sda1
表示 U 盤掛載成功。 -
執行
cd /dev/block/platform/soc/by-name
和ls -al
命令查看快閃記憶體塊分區所指向的分區名。root@Hi3798MV300:/ # cd /dev/block/platform/soc/by-name root@Hi3798MV300:/dev/block/platform/soc/by-name # ls -al lrwxrwxrwx root root 1970-01-01 08:00 baseparam -> /dev/block/mmcblk0p5 lrwxrwxrwx root root 1970-01-01 08:00 boot -> /dev/block/mmcblk0p9 lrwxrwxrwx root root 1970-01-01 08:00 cache -> /dev/block/mmcblk0p14 lrwxrwxrwx root root 1970-01-01 08:00 fastboot -> /dev/block/mmcblk0p1 lrwxrwxrwx root root 1970-01-01 08:00 fastplay -> /dev/block/mmcblk0p8 lrwxrwxrwx root root 1970-01-01 08:00 logo -> /dev/block/mmcblk0p7 lrwxrwxrwx root root 1970-01-01 08:00 misc -> /dev/block/mmcblk0p10 lrwxrwxrwx root root 1970-01-01 08:00 partition -> /dev/block/mmcblk0p2 lrwxrwxrwx root root 1970-01-01 08:00 pqparam -> /dev/block/mmcblk0p6 lrwxrwxrwx root root 1970-01-01 08:00 recovery -> /dev/block/mmcblk0p3 lrwxrwxrwx root root 1970-01-01 08:00 securestore -> /dev/block/mmcblk0p12 lrwxrwxrwx root root 1970-01-01 08:00 swdb -> /dev/block/mmcblk0p13 lrwxrwxrwx root root 1970-01-01 08:00 swdevinfo -> /dev/block/mmcblk0p4 lrwxrwxrwx root root 1970-01-01 08:00 system -> /dev/block/mmcblk0p15 lrwxrwxrwx root root 1970-01-01 08:00 trustedcore -> /dev/block/mmcblk0p11 lrwxrwxrwx root root 1970-01-01 08:00 userdata -> /dev/block/mmcblk0p16
-
使用下麵的
dd
命令燒錄分區。備份的固件所在的位置為FW_BK
文件夾。對於比較大的分區,應執行gzip -dc /mnt/sda/sda1/FW_BK/userdata.bin.gz | dd of=/dev/block/platform/soc/by-name/userdata
命令以先解壓後輸出。dd if=/mnt/sda/sda1/FW_BK/fastboot.bin of=/dev/block/platform/soc/by-name/fastboot dd if=/mnt/sda/sda1/FW_BK/partition.bin of=/dev/block/platform/soc/by-name/partition dd if=/mnt/sda/sda1/FW_BK/recovery.bin of=/dev/block/platform/soc/by-name/recovery dd if=/mnt/sda/sda1/FW_BK/swdevinfo.bin of=/dev/block/platform/soc/by-name/swdevinfo dd if=/mnt/sda/sda1/FW_BK/baseparam.bin of=/dev/block/platform/soc/by-name/baseparam dd if=/mnt/sda/sda1/FW_BK/pqparam.bin of=/dev/block/platform/soc/by-name/pqparam dd if=/mnt/sda/sda1/FW_BK/logo.bin of=/dev/block/platform/soc/by-name/logo dd if=/mnt/sda/sda1/FW_BK/fastplay.bin of=/dev/block/platform/soc/by-name/fastplay dd if=/mnt/sda/sda1/FW_BK/boot.bin of=/dev/block/platform/soc/by-name/boot dd if=/mnt/sda/sda1/FW_BK/misc.bin of=/dev/block/platform/soc/by-name/misc dd if=/mnt/sda/sda1/FW_BK/trustedcore.bin of=/dev/block/platform/soc/by-name/trustedcore dd if=/mnt/sda/sda1/FW_BK/securestore.bin of=/dev/block/platform/soc/by-name/securestore dd if=/mnt/sda/sda1/FW_BK/swdb.bin of=/dev/block/platform/soc/by-name/swdb dd if=/mnt/sda/sda1/FW_BK/cache.bin of=/dev/block/platform/soc/by-name/cache dd if=/mnt/sda/sda1/FW_BK/system.bin of=/dev/block/platform/soc/by-name/system dd if=/mnt/sda/sda1/FW_BK/userdata.bin of=/dev/block/platform/soc/by-name/userdata
升級固件
-
方法一:使用 TTL+HiTool+U 盤。燒寫
recovery
到recovery
,燒寫emmc
到misc
,然後重啟機頂盒以進入恢復模式,最後在恢復模式中選擇apply update from external storage
後選擇 U 盤中的update.zip
刷機包進行刷機。 -
方法二:使用 TTL+U 盤或者ADB+U 盤。使用
dd
命令輸出recovery
到recovery
,emmc
到misc
,然後執行reboot
命令以重啟進入恢復模式,最後在恢復模式中選擇apply update from external storage
後選擇 U 盤中的update.zip
刷機包進行刷機。 -
方法三:使用ADB或TTL或TTL+HiTool燒寫
recovery
後安裝原生版本的設置
軟體包,進入原生版本的設置後選擇本地升級以升級系統。升級包必須被命名為update.zip
並位於 U 盤的根目錄。軟體包一般被命名為SWProductCheck.apk
,可在卡刷救磚相關教程中搜尋。 -
方法四:把
fastboot.bin
、bootargs.bin
、recovery.img
三個文件複製到U盤根目錄。短接強制刷機的短接點,然後打開機頂盒的電源,等待幾秒後鬆開短接。機頂盒就會載入U 盤中的fastboot.bin
並引導 U 盤中的recovery.img
進入恢復模式,最後在恢復模式中選擇apply update from external storage
後選擇 U 盤中的update.zip
刷機包進行刷機。 -
方法五:把
fastboot.bin
、bootargs.bin
、recovery.img
三個文件複製到U盤根目錄。使用ADB或TTL或TTL+HiTool擦除fastboot.bin
分區。重啟後機頂盒就會載入U 盤中的fastboot.bin
並引導 U 盤中的recovery.img
進入恢復模式,最後在恢復模式中選擇apply update from external storage
後選擇 U 盤中的update.zip
刷機包進行刷機。
使用簡述
-
在瀏覽器輸入機頂盒的IP地址以進入海納思系統首頁。
-
在首頁點擊外網,然後點擊終端管理,初始用戶名和密碼分別為
root
和ecoo1234
,可通過passwd root
命令修改當前系統 root 賬號的密碼。 -
在終端管理頁面輸入
apt install minidlna
安裝 MiniDLNA 軟體。系統內置有基本功能的軟體安裝腳本, 輸入以下命令即可自動安裝並自動配置軟體。Portainer 是可視化的容器鏡像圖形管理工具,青龍面板是支持 Python3、JavaScript、Shell、Typescript 腳本的定時任務管理平臺,Home Assistant 是基於 Python 3 開發的集成現有智能家居生態的開源家庭自動化平臺。install-portainer.sh 安裝 Docker 容器管理面板 install-qinglong.sh 安裝 Docker 應用: 青龍面板 install-homeassistant.sh 安裝智能家居控制面板
-
支持通過 FTP 或 SCP 等方式對伺服器文檔進行管理,初始用戶名和密碼分別為
ubuntu
和ecoo1234
。SFTP 模式的 22 埠可訪問根目錄, FTP 模式的 21 埠則只能訪問/home
目錄。 -
內置的 WebDAV 伺服器在 8081 埠,初始用戶名和密碼分別為
admin
和admin
,預設存儲位置在/home/ubuntu/webdav
。 -
內置的Alist雲盤支持多種存儲,支持網頁瀏覽和 WebDAV 訪問。初始用戶名和密碼分別為
admin
和admin123
。 -
執行
recoverbackup
命令可以還原備份系統, 根分區內的數據將全部被原備份系統清除並覆蓋。
註意事項
-
關於晶元型號:魔百盒 CM211-2 的 CPU 型號有 MV100、MV300、MV300H。實際的 CPU 型號以
reg name
中包含 CPU 型號或晶元本身的絲印為準。 -
關於
reg name
:晶元待燒錄固件的fastboot
中的reg name
與機頂盒現有的fastboot
中的reg name
在管腳配置表和中央處理器型號上應保持一致,否則無法燒錄fastboot
。啟動信息中顯示的reg name
僅供參考,實際的管腳配置表以機頂盒現有的fastboot
中的reg name
包含的管腳配置表為準。
-
關於HiBurn中的傳輸方式:無論傳輸方式選擇串口還是網口,燒寫
fastboot
時,實際上都是通過串口來傳輸數據,因此非常慢。 -
關於HiBurn中的文件系統:如果實際上存在文件系統但軟體中的文件系統被設置為
none
時,在進行燒寫操作時,分區鏡像將會以二進位的形式進行傳輸;如果設置為一個確定的文件系統,如ext3/4
時,在進行燒寫操作時,分區鏡像將會以壓縮包的形式進行傳輸,即對鏡像先壓縮後傳輸,最後解壓並寫入分區。因此,在進行燒寫操作時,設置文件系統可以減少分區鏡像傳輸所需要的時間,最終加快總體的燒寫速度。對於上傳操作,無論是否設置軟體中的文件系統,上傳的分區鏡像總是以二進位的形式進行傳輸,不會改變上傳速度。 -
關於壓縮:
userdata
分區的鏡像大小會超過 4GB,超過 FAT32 文件系統限制,所以需要壓縮。在使用dd
命令時,結合分區的大小和使用量來決定是否進行壓縮可以有效的節省空間占用和傳輸時間。 -
關於終端內容被覆蓋丟失:點擊視窗 -> 首選項 ,點擊終端後修改終端緩存行數。
-
關於使用 HiTool 燒錄和備份固件失敗:點擊視窗 -> 首選項,然後點擊HiBurn,修改TFTP設置和命令設置。根據控制台的報錯信息來修改對應的參數。有時重新操作一次也會恢復正常。
參考資料
- 海思機頂盒 NAS 海納思系統使用指南
- 打造最強華為海思hi3798mv100/200/300機頂盒NAS伺服器系統_華為盒子論壇_ZNDS
- 電視盒子晶元性能那家強?電視盒子變身 linux 系統裝 docker 寶塔青龍打開盒子的另一片天地
- 【狗蛋】搭建一個屬於家庭伺服器,硬體、軟體、配置推薦【萬字長文持續更新】 - 知乎
- 魔百盒CM211-2網路機頂盒固件下載彙總及主板區分-評測/圖文分享-安卓刷機固件網【麒麟刷機網】
- 河南移動cmcc-2 ch電視盒子Hi3798MV310線刷-卡刷-刷機-救磚 - 知乎
- 選擇哪種方式刷入海思設備
- 海思hi3798mv300/300H通用解鎖版recovery_中國移動魔百盒_ZNDS
- 魔百和CM211-2刷機(MV300晶元)朝歌代工拆機TTL破解固件 - 機頂盒/智能電視 數位之家
- 北京CM211-2 原廠救磚包 刷當貝 無需拆機教程_中國移動魔百盒_ZNDS
版權聲明:本文為「夢幻之心星」原創,依據 CC BY-NC-SA 4.0 許可證進行授權,轉載請附上原文出處鏈接及本聲明。
博客園地址:https://www.cnblogs.com/Sky-seeker
微信公眾號:關註微信公眾號,獲取即時推送