Hi3798MV200 恩兔N2 NS-1 (一): 設備介紹和刷機說明

来源:https://www.cnblogs.com/milton/archive/2023/08/06/17608074.html
-Advertisement-
Play Games

恩兔N2是一個家庭存儲的系列產品, NS-1 是其中最小的一個版本, 基於海思ARM64 CPU Hi3798MV200. 和其他設備相比, 特點是內置2.5寸SATA盤位, 並且帶千兆網口. 這個設備比較小眾, 存量很小, 不如斐訊N1, 玩客雲那樣有廣泛的認知度, 甚至在百度和Google上搜索... ...


目錄

介紹

恩兔N2是一個家庭存儲的系列產品, NS-1 是其中體積最小的一個型號, 基於海思ARM64 CPU Hi3798MV200. 和其他設備相比, 特點是內置2.5寸SATA盤位, 並且帶千兆網口. 這個設備比較小眾, 存量很小, 不如斐訊N1, 玩客雲那樣有廣泛的認知度, 甚至在百度和Google上搜索都沒什麼結果. 生產商恩兔科技這個公司已經停止經營, 其網站 n2yun.com 也已經無法訪問. 因為有海思 Hi3798 系列內核的SDK和刷機工具, 使得這個盒子可以註入新的靈魂, 發揮餘熱, 物盡其用.

本文的內容, 大量參考自以下鏈接

實物圖

包裝

正面

正面是一個帶指示燈的按鈕, 和三個指示燈. 這四個指示燈都是紅綠雙色, 可以用紅綠橙三色顯示狀態

背面

背麵包含一個用於供電的 USB Type-C 口, 一個 HDMI 口, 一個千兆網口, 一個USB口和一個SD Card卡槽.

內部

螺絲在包裝的塑料袋裡, 盒子預設沒上螺絲, 用指甲沿兩邊可以輕鬆撬開. 內部可以看到一個標準的2.5寸SATA盤位. 這個高度可以放7mm和9mm厚度的硬碟, 不確定是否能放更厚的15mm厚盤.

PCB特寫

正面和背面

TTL 介面

硬體配置

Part Specs Notes
CPU Hi3798MV200 四核A53, T450 GPU, 詳細型號為 Hi3798MRBCV2010D000 詳細信息
RAM DDR4 1GB K4A4G165WE-BCRC * 2, 單顆256M 16b, 最高支持ddr2400
Flash eMMC 4GB 東芝THGBMDG5D1LBAIT
Ethernet 10/100/1000M * 1 Realtek RTL8211
USB 2.0 USB 2.0 * 1
HDMI HDMI 2.0 * 1
HDD SATA 3.0 * 1 2.5 Inch
Power Supply DC 5V 2A USB-TypeC
Other Interfaces SD Card Reader * 1

刷機前的準備工作

硬體部分

  • 一臺正常工作的, 運行Win10的電腦
  • 網線, 用於連接 N2NS1 到交換機或路由器
  • 用於USB轉串口, USB2TTL的串口模塊, 常見的 CH340 模塊即可

軟體部分

軟體部分主要是刷機工具和固件

刷機工具

刷機工具是基於 Eclipse 框架開發的, Windows版下載地址列表

Linux的版本比較舊, 未嘗試使用

固件

常見固件的下載

備份和刷機

海思燒錄的基本原理(摘抄自幫助手冊)

HiBurn工具在開始燒寫後,

  1. 首先與bootrom進行交互, 工具將 DDR 參數傳送到傳到bootrom, 即為uboot下載階段5%處, 然後初始化DDR
  2. 把uboot傳輸到DDR中, uboot下載階段100%處表示傳輸完畢
  3. 從DDR啟動uboot
  4. uboot啟動完成後, 工具開始與uboot進行交互, 發送燒寫命令, 將DDR中的uboot燒寫到Flash對應地址中

uboot部分是通過TTL傳輸, 其他鏡像分區燒寫, 如kernel, rootfs等分區, 工具預設採用網口傳輸的方式, 客戶可選擇裸燒和非裸燒兩種方式進行燒寫

  • 裸燒即為在按分區燒寫或按Emmc燒寫中勾選uboot進行燒寫,此時uboot會被燒寫到Flash中
  • 非裸燒即為不勾選uboot, 僅勾選其他分區進行燒寫, 此時需要保證當前單板上已經存在uboot, 燒寫時工具會啟動uboot, 與其交互, 通過向uboot發送TFTP命令與Write命令, 完成燒寫.

準備工作

準備 TTL2USB, 排針和網線, 主板上的四孔介面為 TTL, 介面定義參考前面的圖.

方孔為VCC不連接, 工作時測得電壓為3.3V, 因此切勿用5V的電壓連接, 平時最好不連接. USB轉串口模塊連接電腦和盒子, USB轉串口模塊的 RX 接盒子的 TX, TX 接盒子的 RX.

本機(上位機)打開 HiTool, 晶元選擇 Hi3798MV200, 點擊運行 HiBurn, 點擊刷新, 本機會自動識別IP和存在的串口, 將串口修改為USB2TTL所在的串口, 盒子(下位機)的IP和本機IP要在同一網段, 例如本機為 192.168.9.123, 板子的IP就可以設為 192.168.9.100, 不要和網段中其它機器衝突即可. 傳輸方式選擇網口.

MAC 地址可以自行設置, 軟體將根據設置在刷機過程中使用該 MAC 地址作為板端 MAC

備份

準備分區表

盒子先上電啟動一次, 通過串口 TTL 軟體看啟動日誌, 或者在命令行中查看dmesg, 可以得到當前的分區信息, 其格式為

blkdevparts=mmcblk0:2M(fastboot),1M(bootargs),4M(deviceinfo),6M(stbinfo),8M(baseparam),20M(logo),8M(pqparam),40M(private),10M(privatebak),80M(factory),40M(trustedcore_linux),80M(kernel0),80M(kernel1),150M(root0),150M(root1),300M(roothome),-(userdata)

根據上述信息在分區部分逐個添加分區, 最後選擇保存分區表.

除了大小, 分區類型在首次備份可以全部選擇 none, 也就是以 raw 方式備份, 備份完成後用 binwalk 等工具測試分區到底是 raw 還是 ext4, squash. 除了 roothome 和 userdata, 其它全是raw, 也就是none. 都使用raw類型對備份無影響.

執行備份

分區表選擇剛纔設置保存的路徑, 然後逐個選擇文件路徑(備份的目標文件名, 主機上目前沒有)

programmer 文件為刷機模式使用的臨時 fastboot, 可以從別的固件提取, 也可以通過 TFTP 手動備份, 如果留空則使用 eMMC 內置的, 這種情況要求 eMMC 中有 UBOOT, 否則備份失敗.

選擇上傳, 按照提示給盒子上電, 備份需要大約20分鐘.

刷機

準備分區表和刷機文件

  1. 解壓需要刷機的固件
  2. 運行 HiTool, 在啟動對話框選擇正確的晶元型號, 選擇預設的按分區燒錄
  3. 在 partition file 那一行點擊瀏覽, 選擇對應的分區表文件. 此時 HiTool 會顯示定義好的分區列表, 對應的大小和文件
  4. 在列表中, 勾選的部分是會被執行操作的, 要備份/擦寫/寫入哪個部分, 就勾上哪個部分

這裡以 Debian 固件下載鏈接 為例進行說明, 其分區表文件為 partition_debian.xml, 對應的六個分區分別是

  1. fastboot(UBOOT)
  2. bootargs(啟動參數)
  3. stock_kernel(recovery內核, 小內核)
  4. stock_squash(recovery系統, 小系統)
  5. kernel(64位目標內核)
  6. rootfs(64位目標系統)

通過 HiTool 寫入

點擊燒寫/Burn按鈕後, 根據日誌視窗提示斷電然後上電, 工具會檢測到盒子狀態, 自動開始燒錄

日誌視窗會顯示進度, 等待燒寫完畢後會自動reset, 時間大概需要五六分鐘

Debian系統的使用

  • 通過TTL終端軟體在串口可以直接登錄, 也可以在路由器中查到盒子的IP後, 通過SSH登錄.
  • 預設用戶為 root / root
  • 剛刷完的根目錄所在分區, 可用空間為0, 登錄後執行 local-resize.sh 對分區進行擴容.

通過 Recovery 模式恢復或刷機

在固件的6個分區中, stock_kernel 和 stock_squash 組成了一套可以獨立運行的 recovery 系統, 如果要讓盒子啟動進入 recovery 系統, 只需要修改 bootargs 分區.

在 HiTool 中僅勾選 bootargs, 將對應的文件改為 bootargs_stock 進行燒錄, 重啟後就會通過 stock_kernel / stock_squash 啟動, 進入 recovery 命令行

進入 recovery 命令行, 登錄用戶 root, 密碼為空

  • 選項一: 機器連接串口, 通過串口操作
  • 選項二: 機器連接網線, 在路由器找到設備IP, telnet連接

以稍息版的 Debian 刷機包為例說明如何寫入系統.

  1. 將 stretch.tar.bz2 和 bootargs2 文件放入U盤根目錄, 插上盒子的USB口.

  2. 執行以下命令 開啟U盤供電

echo 33 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio33/direction
echo 1 > /sys/class/gpio/gpio33/value

命令行會輸出識別到的 usb storage 設備

# usb-storage 1-1:1.0: USB Mass Storage device detected
scsi host1: usb-storage 1-1:1.0
scsi 1:0:0:0: Direct-Access     Generic  Flash Disk       8.07 PQ: 0 ANSI: 4
sd 1:0:0:0: [sda] 15974400 512-byte logical blocks: (8.18 GB/7.62 GiB)
sd 1:0:0:0: [sda] Write Protect is off
sd 1:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA sda:
sd 1:0:0:0: [sda] Attached SCSI removable disk
udisk1110 -> /dev/sda
  1. 用 blkid 能看到U盤對應的分區, 根據U盤分區方式的不同可能是 /dev/sda 也可能是 /dev/sda1

  2. 掛載U盤到 /mnt/usb1

mount /dev/sda /mnt/usb1
# 或者
mount /dev/sda1 /mnt/usb1

這時候ls /mnt/usb1要能看到 stretch.tar.bz2 和 bootargs2 這兩個文件

  1. /dev/mmcblk0p6 是用於放置新系統的目標分區, 先格式化
mkfs.ext4 /dev/mmcblk0p6

然後掛載到 /tmp/mmc, 如果提示couldn't mount as ext3 due to feature incompatibilities, 可以忽略

mkdir /tmp/mmc
mount /dev/mmcblk0p6 /tmp/mmc
  1. 解壓 Debian 到 /tmp/mmc, 如果要看詳細輸出, 加上 v 參數
tar xjpf /mnt/usb1/stretch.tar.bz2 -C /tmp/mmc

註意結束時的輸出, 如果最後提示一個 magic 寫入錯誤, 可以忽略, 如果是顯示其它類型的錯誤, 要檢查一下, 是否U盤文件損壞

  1. 用 bootargs2 覆蓋當前的 bootargs
dd if=/mnt/usb1/bootargs2 of=/dev/mmcblk0p2

這一步用於改變啟動參數, 重啟後將從 /dev/mmcblk0p5 (64bit kernel) 啟動.

附錄

GPIO 操作

通過GPIO操作LED

# 打開
echo 255 > /sys/class/leds/green:fn/brightness
# 關閉
echo 0 > /sys/class/leds/green:fn/brightness

觸發, 如閃爍、管理mmc讀寫等. 通過cat命令可以看到 LED 支持的觸發方式, 通過echo回寫相應的字元串可以實現 LED 的自動觸發, 如heartbeat代表閃爍, mmc0 代表 mmc0 的讀寫觸發 LED 等等

env 記錄

正常啟動的 bootargs 參數

root@n2ns1:~# fw_printenv 
bootdelay=1
baudrate=115200
bootfile="uImage"
ethaddr=C6:04:53:66:0E:36
filesize=3702000
fileaddr=1000000
netmask=255.255.255.0
ipaddr=192.168.1.10
serverip=192.168.1.254
bootargs_stock=mem=1G mmz=ddr,0,0,60M vmalloc=500M console=ttyAMA0,115200 initrd=0x11000000,0x4600000 root=/dev/ram blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),10M(stock_kernel),60M(stock_squash),32M(kernel),-(rootfs)
bootargs_debian=mem=1G mmz=ddr,0,0,120M console=ttyAMA0,115200 root=/dev/mmcblk0p6 rw blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),10M(stock_kernel),60M(stock_squash),32M(kernel),-(rootfs)
bootargs_512M=mem=512M mmz=ddr,0,0,256M
bootargs_1G=mem=1G mmz=ddr,0,0,380M
bootargs_2G=mem=2G mmz=ddr,0,0,600M
ethact=up
bootcmd_debian=mmc read 0 0x10000000 0x24000 0x10000;setenv bootargs ${bootargs_debian};bootm 0x10000000
bootcmd_stock=mmc read 0 0x10000000 0x1000 0x5000;mmc read 0 0x11000000 0x6000 0x1e000;setenv bootargs ${bootargs_stock};bootm 10000000
stdin=serial
stdout=serial
stderr=serial
ver=Fastboot 3.3.0 (htpc@htpc4105) (Dec 17 2021 - 11:19:34)
bootcmd=mmc read 0 0x10000000 0x24000 0x10000;setenv bootargs ${bootargs_debian};bootm 0x10000000

recovery 環境的 env 帶引導的命令和內核參數

# printenv
USER=root
LD_LIBRARY_PATH=/lib:/usr/local/lib:/usr/lib:/usr/share/bluetooth/lib:/hybroad/lib
SHLVL=1
TERMINFO=/usr/share/terminfo
HOME=/root
LOGNAME=root
TERM=vt100
PATH=/hybroad/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
SHELL=/bin/sh
PWD=/root

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • #### win10 環境搭建 ##### 1.簡易安裝參考菜鳥教程,鏈接: ##### 2.詳細安裝 1. ##### Apache 伺服器安裝:Apache 是C語言實現的,專門用來提供HTTP服務;特性:簡單、速度快、性能穩定、可配置(代理) 2.1.1、主要用於解析靜態文本,併發性能高,側重 ...
  • ### application.yml文件中開啟mybatis自動駝峰映射 ```java configuration: #是否開啟自動駝峰命名規則映射:從資料庫列名到Java屬性駝峰命名的類似映射 map-underscore-to-camel-case: true ``` - 如果不開啟映射 在 ...
  • 本文探討了三種常見的加密演算法:MD5、DES和RAS的工作原理與特點。首先,MD5是一種不可逆的加密演算法,它將任意長度的數據轉化為固定長度的摘要,用於數據完整性校驗。然而,由於其存在碰撞攻擊的漏洞,MD5已經不再被推薦作為安全加密演算法。其次,DES是一種對稱可逆的加密演算法,它使用相同的密鑰進行加密和... ...
  • 本文將介紹ASP.NET Core SignalR,這是一個強大的實時通信庫,用於構建實時、雙向通信應用程式。我們將探討SignalR的基本概念、架構和工作原理,並提供一些示例代碼來幫助讀者更好地理解和使用SignalR。ASP.NET Core SignalR提供了一種簡單而強大的方式來構建實時通 ...
  • # Unity IPreprocessShaders Unity IPreprocessShaders是Unity引擎中的一個非常有用的功能,它可以讓開發者在編譯Shader時自定義哪些操作需要被執行。這個可以幫助開發者更好地控制Shader的編譯過程,確保在編譯Shader時執行必要的操作。在本文 ...
  • ## 引言 今天同事問了我一個問題,`System.Windows.Forms.Timer`是前臺線程還是後臺線程,我當時想的是它是跟著UI線程一起結束的,應該是前臺線程吧? 我確實沒有仔細研究過他們的異同,所以帶著這個疑問探究一下`System.Windows.Forms.Timer`。 ## S ...
  • # DXP TreeList 目錄樹 ## 1.需求背景 需要一個支持`勾選`,`拖動節點`,`保存各節點順序`的目錄樹。 ![image](https://jsd.cdn.zzko.cn/gh/YuanjunXu/Images@main/src/image.3wqa9fpk8xo0.jpg) ## ...
  • # Unity Shader編輯器工具類ShaderUtil 常用函數和用法 ![Unity Shader](https://cdn.pixabay.com/photo/2017/08/30/01/05/milky-way-2695569_960_720.jpg) Unity的Shader編輯器工具 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...