Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明
目录
- Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明
- Hi3798MV200 恩兔N2 NS-1 (二): 制作 Ubuntu rootfs
- Hi3798MV200 恩兔N2 NS-1 (三): 制作 Debian rootfs
介绍
恩兔N2是一个家庭存储的系列产品, NS-1 是其中体积最小的一个型号, 基于海思ARM64 CPU Hi3798MV200. 和其他设备相比, 特点是内置2.5寸SATA盘位, 并且带千兆网口. 这个设备比较小众, 存量很小, 不如斐讯N1, 玩客云那样有广泛的认知度, 甚至在百度和Google上搜索都没什么结果. 生产商恩兔科技这个公司已经停止经营, 其网站 n2yun.com 也已经无法访问. 因为有海思 Hi3798 系列内核的SDK和刷机工具, 使得这个盒子可以注入新的灵魂, 发挥余热, 物尽其用.
本文的内容, 大量参考自以下链接
- 带图说明 https://www.wdmomo.fun:81/doc/index.html?file=003_各类矿渣/013_恩兔NS-1
- 刷机说明 https://github.com/xiayang0521/n2ns-1/
- HiNAS https://www.ecoo.top/hitool.html
实物图
包装

正面
正面是一个带指示灯的按钮, 和三个指示灯. 这四个指示灯都是红绿双色, 可以用红绿橙三色显示状态

背面
背面包含一个用于供电的 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版下载地址列表
- https://oss.histb.com/HiTool-windows.7z
- http://xz.w10a.com/small/HiTool.7z
- https://dl.ecoo.top/HiTool-soft/HiTool-windows.7z
- https://www.xitongzhijia.net/soft/211748.html
- http://www.hihope.org/en/download/download.aspx?mtt=36 需要注册
Linux的版本比较旧, 未尝试使用
固件
常见固件的下载
- HiNAS https://dl.ecoo.top/
这是一个功能比较完整的集成系统, 内核4.4.35, 选择恩兔N2 NS1定制的 TTL-hi3798mv200-202307-64-n2ns1.zip - Debian https://pan.baidu.com/s/1Dx58Zc43P3b3cx3tnhLlmw?pwd=9qte
这是我基于4.4.35内核做的Debian10系统, 比较干净的版本, 未安装各种服务软件 - 合集 https://github.com/xiayang0521/n2ns-1/releases
这里包含了稍息版的 Debian 10, 以及 Centos7 等系统的固件
备份和刷机
海思烧录的基本原理(摘抄自帮助手册)
HiBurn工具在开始烧写后,
- 首先与bootrom进行交互, 工具将 DDR 参数传送到传到bootrom, 即为uboot下载阶段5%处, 然后初始化DDR
- 把uboot传输到DDR中, uboot下载阶段100%处表示传输完毕
- 从DDR启动uboot
- 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分钟.
刷机
准备分区表和刷机文件
- 解压需要刷机的固件
- 运行 HiTool, 在启动对话框选择正确的芯片型号, 选择默认的按分区烧录
- 在 partition file 那一行点击浏览, 选择对应的分区表文件. 此时 HiTool 会显示定义好的分区列表, 对应的大小和文件
- 在列表中, 勾选的部分是会被执行操作的, 要备份/擦写/写入哪个部分, 就勾上哪个部分
这里以 Debian 固件下载链接 为例进行说明, 其分区表文件为 partition_debian.xml, 对应的六个分区分别是
- fastboot(UBOOT)
- bootargs(启动参数)
- stock_kernel(recovery内核, 小内核)
- stock_squash(recovery系统, 小系统)
- kernel(64位目标内核)
- 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 刷机包为例说明如何写入系统.
将 stretch.tar.bz2 和 bootargs2 文件放入U盘根目录, 插上盒子的USB口.
执行以下命令 开启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
用 blkid 能看到U盘对应的分区, 根据U盘分区方式的不同可能是 /dev/sda 也可能是 /dev/sda1
挂载U盘到 /mnt/usb1
mount /dev/sda /mnt/usb1
# 或者
mount /dev/sda1 /mnt/usb1
这时候ls /mnt/usb1要能看到 stretch.tar.bz2 和 bootargs2 这两个文件
- /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
- 解压 Debian 到 /tmp/mmc, 如果要看详细输出, 加上 v 参数
tar xjpf /mnt/usb1/stretch.tar.bz2 -C /tmp/mmc
注意结束时的输出, 如果最后提示一个 magic 写入错误, 可以忽略, 如果是显示其它类型的错误, 要检查一下, 是否U盘文件损坏
- 用 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
Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明的更多相关文章
- 【源】ensp 绑定本地网卡与仿真设备进行通信 场景下 仿真设备ping 不通 本机IP 问题
环境:Win7, ensp 1.2.00.500 问题现象:本机可以ping 通 仿真设备的接口IP,但是在仿真设备上 ping不通 本机接口ip. 问题处理:把本机win7系统只带的防火墙关闭后,在 ...
- 多个rs485设备怎样跟上位机通讯?
http://bbs.hcbbs.com/thread-819457-1-1.html 多个rs485设备怎样跟上位机通讯? [复制链接] |关注本帖 fdemeng 签到天数: 1228 天 ...
- 一些有意思的VR设备介绍
1.计算机(Computers) 不久以前,一个VR系统需要百万美元的超级计算机:而如今顶级的VR系统正在使用桌面便携式计算机簇,极大的降低了价格和维护成本. 2.跟踪器(Tracking) 为了能与 ...
- linux /dev 常见特殊设备介绍与应用[loop,null,zero,full,random]
linux是文件型系统,所有硬件如软件都会在对于的目录下面有相应的文件表示.对于dev这个目录,我们知道它下面的文件,表示的是linux的设备.在windows系统中,设备大家很好理解,象硬盘,磁盘指 ...
- Virtio SCSI设备介绍
Qemu的存储栈 在KVM虚拟化环境中,当客户机的内核存储系统像在物理机上一样通过页缓存.文件系统.通用块设备层运行到实际设备驱动时,这时驱动对设备寄存器的访问会触发CPU从客户机代码切换到物理机内的 ...
- Catalyst9K设备介绍
Catalyst9K系列的里面包含了多款交换机,以及无线控制器,甚至包含了无线AP,如下将简单的介绍这几款产品的情况: 首先,这是一种总体的对应关系: 1.Catalyst9200 Series 主要 ...
- IOS8设备连接XCODE6真机调试报错"Could not inspect the application package"
每次真机调试都要运行2次才行,解决办法:把product name改成英文就行了.
- openwrt-智能路由器hack技术(2)---"网路信息监控和窃取"
openwrt-智能路由器hack技术(2)---"网路信息监控和窃取" 1 导读 PS:之前写的一个文章,现在发现结构内容排版不是太好,导致阅读体验太差,影响传播和SEO,所 ...
- openwrt-智能路由器hack技术(1)---"DNS劫持"
openwrt-智能路由器hack技术(1)---"DNS劫持" 1 导读 PS:之前写的一个文章,现在发现结构内容排版不是太好,导致阅读体验太差,影响传播和SEO,所以现在整 ...
- 安卓u8800刷机
一篇非常好的帖子:http://bbs.anzhi.com/thread-5113728-1-1.html 虽然不是什么大神,不过在两个QQ群里和这里解答过N多刷机和ROOT中遇到的问题了...而且伸 ...
随机推荐
- vscode取消“禁用错误波形曲线”
刚刚不小心点到了vscode的禁用错误波形曲线,导致现在没有报错提醒了,上网查了一下,重新打开错误曲线的方法是 1.按住Cctrl+shift+p 2.搜索 启用错误波形曲线,选择打开,就可以了
- 【11个适合毕设的Python可视化大屏】用pyecharts开发拖拽式可视化数据大屏
你好,我是@马哥python说,一枚10年程序猿. 一.效果演示 以下是我近期用Python开发的原创可视化数据分析大屏,非常适合毕设用,下面逐一展示:(以下是截图,实际上有动态交互效果哦) 以下大屏 ...
- 高精度------C++
高精度运算------C++ (加减乘除) 例:ZOJ2001 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1001 The ...
- 2021-02-23:给定一个正数n,求n的裂开方法数。规定:后面的数不能比前面的数小 。比如4的裂开方法有: 1+1+1+1、1+1+2、1+3、2+2、4,5种,所以返回5。
2021-02-23:给定一个正数n,求n的裂开方法数.规定:后面的数不能比前面的数小 .比如4的裂开方法有: 1+1+1+1.1+1+2.1+3.2+2.4,5种,所以返回5. 福哥答案2021-0 ...
- 2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态。如何让容器处于running状态?
2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态.如何让容器处于running状态? 答案2022-02-08: 加 ...
- 2022-01-26:最优账单平衡。 一群朋友在度假期间会相互借钱。比如说,小爱同学支付了小新同学的午餐共计 10 美元。如果小明同学支付了小爱同学的出租车钱共计 5 美元。我们可以用一个三元组 (x
2022-01-26:最优账单平衡. 一群朋友在度假期间会相互借钱.比如说,小爱同学支付了小新同学的午餐共计 10 美元.如果小明同学支付了小爱同学的出租车钱共计 5 美元.我们可以用一个三元组 (x ...
- 2021-10-08:填充每个节点的下一个右侧节点指针。给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找
2021-10-08:填充每个节点的下一个右侧节点指针.给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点.填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找 ...
- Pyhton F字符串引起的invalid syntax
事发现场 偶然运行到之前写的爬虫,发现运行不了,报错invalid syntax,于是来找bug 报错截图: 原因: 这样用法称之为 f-string f-string,亦称为格式化字符串常量(for ...
- js 正则校验非法字符
今日使用 vue + element 对数据录入进行非法字符校验,到处找了一圈都不是想要的,于是自己按需求写一个 1.内容可以包含 大小写字母,中文和 . ( ) . , : % 2.内容第一位不允许 ...
- 安装vue后 vue -V查不到版本号 添加环境变量没反应
萌新一枚,今天听老大说后续有项目要用vue,于是找教程自己先看看, 验证vue是否安装成功时,提示 'vue' 不是内部命令,也不是可运行的程序 有说把vue路径添加环境变量的,试了一下,不行(后来看 ...