Difference between revisions of "NanoPi Zero2/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
 
(updated by API)
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[NanoPi R4SE|English]]
+
[[NanoPi Zero2|English]]
  
 
==介绍==
 
==介绍==
[[File:NanoPi_R4SE_Overview.jpg|thumb|300px|Overview]]
+
[[File:NanoPi_Zero2_Overview.jpg|thumb|300px|Overview]]
[[File:NanoPi_R4SE_Front.jpg|thumb|300px|Front]]
+
[[File:NanoPi_Zero2_Front.jpg|thumb|300px|Front]]
[[File:NanoPi_R4SE_Back.jpg|thumb|300px|Back]]
+
[[File:NanoPi_Zero2_Back.jpg|thumb|300px|Back]]
[[File:R4SE_Case-01.jpg|thumb|300px|Case]]
+
[[File:Zero2_Case-01.jpg|thumb|300px|Case]]
[[File:R4SE_Case-02.jpg|thumb|300px|Case]]
+
[[File:Zero2_Case-02.jpg|thumb|300px|Case]]
[[File:R4SE_Case-03.jpg|thumb|300px|Case]]
+
[[File:Zero2_Case-03.jpg|thumb|300px|Case]]
[[File:R4SE_Case-04.jpg|thumb|300px|Case]]
+
[[File:Zero2_Case-04.jpg|thumb|300px|Case]]
[[File:R4SE_Case-05.jpg|thumb|300px|Case]]
+
[[File:Zero2_Case-05.jpg|thumb|300px|Case]]
* The NanoPi R4SE(as "R4SE") is an open source platform with dual-Gbps Ethernet ports designed and developed by FriendlyElec for IoT applications.
+
* NanoPi-Zero2是友善电子团队面向创客、嵌入式爱好者,电子艺术家、发烧友等群体推出的又一款完全开源的掌上创客神器。
* The NanoPi R4SE uses the RK3399 SoC. It has two Gbps Ethernet ports and 4G LPDDR4 RAM. FriendlyElec ported an OpenWrt system for it. It works with Docker CE. It is a good platform for developing IoT applications, NAS applications etc.
+
==NanoPi Zero2资源特性==
==NanoPi R4SE资源特性==
+
* 主芯片: 瑞芯微 RK3528A
* SoC: Rockchip RK3399
+
** CPU: 四核 ARM Cortex-A53
** CPU: big.LITTLE,Dual-Core Cortex-A72(up to 2.0GHz) + Quad-Core Cortex-A53(up to 1.5GHz)
+
** GPU: ARM Mali-450 GPU
** GPU: Mali-T864 GPU,supports OpenGL ES1.1/2.0/3.0/3.1, OpenCL, DX11, and AFBC
+
** VPU: 支持4K H265/H264 60fps解码,1080p H265/H264 60fps编码
** VPU: 4K VP9 and 4K 10bits H265/H264 60fps decoding, Dual VOP, etc
+
* 内存: 1GB/2GB LPDDR4/LPDDR4X
* PMU: RK808-D PMIC, cooperated with independent DC/DC, enabling DVFS, software power-down, RTC wake-up, system sleep mode
+
* 闪存: 支持eMMC模块
* RAM: 4GB LPDDR4
+
* 以太网: 一个原生千兆以太网
* Flash: 32GB eMMC
+
* 无线网络: 一个M.2 Key-E 2230接口,支持PCIe无线网卡
* Ethernet: one Native Gigabit Ethernet, and one PCIe Gigabit Ethernet
+
* USB接口:
* USB: two USB 3.0 Type-A ports
+
** 一个USB2.0 Host A型口
* microSD Slot x 1
+
** 一个USB-C接口,支持Device模式,可用于线刷eMMC
* Debug: one Debug UART, 3 Pin 2.54mm header, 3V level, 1500000bps
+
* 一个microSD卡槽
* LEDs: 1 x power LED and 3 x GPIO Controlled LED (SYS, LAN, WAN)
+
* 一个30-pin FPC GPIO接口
* others:  
+
* 调试: 3.3V调试串口,波特率为1500000bps
** 2 Pin 1.27/1.25mm RTC battery input connector
+
* 指示灯: 2个GPIO控制的LED(SYS & LED1)
** one User Button
+
* 其它:  
** one MASK Button for eMMC upgrade
+
** 一个2 Pin 1.27/1.25mm 低功耗RTC备份电池接口
** one 5V Fan connector
+
** 具有RESET按键, RECOVERY按键, 和MASK按键
* Power supply: DC 5V/3A, via USB-C connector
+
* 供电: DC 5V/2A, 可通过USB-C或2.54mm排针接口供电
* PCB: 8 Layer, 66 mm x 66 mm
+
* PCB尺寸: 45*45*1.2mm
* Temperature measuring range: 0℃ to 80℃
+
* 工作环境温度: 0℃ to 80℃
  
 
==接口布局和尺寸==
 
==接口布局和尺寸==
 
===接口布局===
 
===接口布局===
[[File:NanoPi_R4SE_Layout.jpg |thumb|300px|NanoPi R4SE Layout]]
+
[[File:NanoPi_Zero2_Layout.jpg |800px|NanoPi Zero2 Layout]]
  
* '''调试串口'''
+
* '''8-Pin 2.54mm 排针 & Debug UART'''
:: 3V level signals, 1500000bps
+
:: 调试串口是3.3V电平, 1500000bps
 
::{| class="wikitable"
 
::{| class="wikitable"
 
|-
 
|-
|'''Pin#''' ||'''Assignment''' ||   '''Description '''  
+
|'''Pin#''' ||'''Assignment''' || '''描述 ''' || '''Pin#''' ||'''Assignment''' || '''描述'''
 
|-
 
|-
|1   || GND                 || 0V
+
|1         || GND             || 0V                 || 2          || VCC5V0_SYS      || 5V电源输出/输入
 
|-  
 
|-  
||| UART2DBG_TX         || output
+
|3          || UART2DBG_TX     || 调试串口输出      || 4          || VCC5V0_SYS      || 5V电源输出/输入             
 
|-
 
|-
||| UART2DBG_RX        || intput
+
|5          || UART2DBG_RX     || 调试串口输入      || 6          || GND            || 0V 
 +
|-
 +
|7          || VCC_3V3         || 3.3V电源输出      || 8          || GND            || 0V       
 
|}
 
|}
 +
:: VCC5V0_SYS系直接与USB-C 5V相连。
 +
:: VCC_3V3是系统3.3V电源, 同时被分配到M.2 Key-E, eMMC, SD, 30-pin GPIO, Ethernet等模块. 若要从此引脚取电,建议不要超过300mA。
  
*'''USB Port'''
+
* '''M.2 Key-E'''
:: Each USB 3.0 port has 2A overcurrent protection.
+
:: M.2 Key-E包含PCIe信号,支持PCIe wifi,以及NVMe SSD等PCIe外设(需要额外转接板)。
 +
 
 +
* '''30-Pin FPC GPIO'''
 +
:: 这是一个0.5mm FPC 连接器。
 +
[[File:NanoPi_Zero2_Gpio.jpg |800px|NanoPi Zero2 GPIO]]
 +
:: VCC5V0_SYS系直接与USB-C 5V相连。由于连接器不支持大电流,不建议从此处给板子供电。
 +
:: VCC_3V3是系统3.3V电源, 同时被分配到M.2 Key-E, eMMC, SD, 30-pin GPIO, Ethernet等模块. 若要从此引脚取电,建议不要超过300mA。
 +
 
 +
*'''USB 接口'''
 +
:: USB2.0 A口具有0.95A过流保护功能。
  
 
*'''RTC'''
 
*'''RTC'''
::RTC backup current is 27uA.
+
::RTC备份电流为0.25μA TYP (VDD =3.0V, TA =25℃).
::Connector P/N: Molex 53398-0271
+
::连接器型号:Molex 53398-0271 或兼容
:'''Notes'''
+
 
::#Power Input : 5V/3A, via USB Type-C(USB PD Specification is not supported)
+
* '''电源'''
 +
::裸板峰值功耗为5W。
 +
::要估算整体功耗,除裸板功耗之外,还应考虑 eMMC模块、M.2模块、USB外围设备和GPIO板的功耗。
 +
 
 
==快速入门==
 
==快速入门==
 
===准备工作===
 
===准备工作===
要开启你的NanoPi R4SE新玩具,请先准备好以下硬件
+
要开启你的NanoPi Zero2新玩具,请先准备好以下硬件
* NanoPi R4SE
+
* NanoPi Zero2
 
* MicroSD卡/TF卡: Class10或以上的 8GB SDHC卡
 
* MicroSD卡/TF卡: Class10或以上的 8GB SDHC卡
* 一个USB Type-C接口的外接电源,建议使用传统5V/3A及以上的电源适配器(注:部分QC/PD快速充电器可能存在兼容性问题),可选用以下或类拟规格的电源适配器:
+
* 一个USB Type-C接口的外接电源,建议使用传统5V/3A及以上的电源适配器
**[https://www.friendlyarm.com/index.php?route=product/product&path=73&product_id=238 5V 4A Power Adapter]
+
 
* 如果需要开发与编译,则需要一台可以联网的电脑,推荐安装Ubuntu 20.04 64位系统,并使用下面的脚本初始化开发环境, 也可以使用Docker容器: <br />
 
* 如果需要开发与编译,则需要一台可以联网的电脑,推荐安装Ubuntu 20.04 64位系统,并使用下面的脚本初始化开发环境, 也可以使用Docker容器: <br />
 
**[https://github.com/friendlyarm/build-env-on-ubuntu-bionic How to setup the Compiling Environment on Ubuntu bionic]<br />
 
**[https://github.com/friendlyarm/build-env-on-ubuntu-bionic How to setup the Compiling Environment on Ubuntu bionic]<br />
Line 73: Line 88:
 
{{1500000SerialPortDebugSetting/zh}}
 
{{1500000SerialPortDebugSetting/zh}}
 
===安装系统===
 
===安装系统===
{{BurnLinuxToSD-RK3399Router/zh|NanoPi-R4SE}}
+
{{Downloads-RK3528/zh|NanoPi-Zero2}}
{{BurnLinuxToEMMC-RK3399Router/zh|NanoPi-R4SE}}
+
{{BurnLinuxToSD-Rockchip/zh|NanoPi-Zero2}}
{{FriendlyWrt21/zh|NanoPi-R4SE}}
+
{{BurnLinuxToEMMC-Rockchip/zh|NanoPi-Zero2}}
{{OfficialUbuntuCore/zh|NanoPi-R4SE}}
+
{{BurnLinuxToExtDrive-Rockchip/zh|NanoPi-Zero2}}
{{FriendlyCoreRemoveQt/zh}}
+
{{OfficialUbuntuCore/zh|NanoPi-Zero2}}
===读取EEPROM中的Mac Address===
+
{{OfficialDebianCore/zh|NanoPi-Zero2}}
====命令行读取====
+
==如何编译系统==
先安装i2c工具, 用如下命令:
+
稍后提供 ...
<syntaxhighlight lang="bash">
+
{{Rockchip-DevEnv/zh|NanoPi-Zero2}}
sudo apt-get update
+
{{RK3528-BuildFromSource/zh|NanoPi-Zero2}}
sudo apt-get install i2c-tools
+
{{RK3528-HWAccess/zh|NanoPi-Zero2}}
</syntaxhighlight>
+
{{RockchipMiscCustome/zh|RK3528}}
然后通过如下命令可以读取EEPROM中的Mac Address, 仅适用于有EEPROM芯片的型号:
+
{{RockchipCommonLinuxTips/zh|RK3528}}
<syntaxhighlight lang="bash">
+
{{RockchipUnbrick/zh|NanoPi-Zero2}}
sudo i2ctransfer -y 2 w1@0x51 0xfa r6
+
</syntaxhighlight>
+
会输出类拟如下格式的Mac Address:
+
<syntaxhighlight lang="bash">
+
0x68 0x27 0x19 0xa5 0x2d 0xdf
+
</syntaxhighlight>
+
如果命令出错, 则表示没有内建EEPROM芯片.
+
====程序中读取====
+
安装libi2c:
+
<syntaxhighlight lang="bash">
+
sudo apt-get install libi2c0:arm64
+
cd /lib/aarch64-linux-gnu/
+
sudo ln -s libi2c.so.0 libi2c.so
+
</syntaxhighlight>
+
新建源代码getmac.c:
+
<syntaxhighlight lang="c">
+
#include <stdio.h>
+
#include <stdlib.h>
+
#include <linux/i2c-dev.h>
+
#include <fcntl.h>
+
#include <string.h>
+
#include <sys/ioctl.h>
+
#include <sys/types.h>
+
#include <sys/stat.h>
+
#include <unistd.h>
+
#include <errno.h>
+
#include <linux/i2c.h>
+
  
#define RK3399_I2C_NUM (2)
+
==资源链接==
#define RK3328_I2C_NUM (0)
+
===原理图和数据手册===
 
+
*Schematic: [https://wiki.friendlyelec.com/wiki/images/3/37/NanoPi_Zero2_2407_SCH.pdf NanoPi Zero2原理图]
int getMacAddressFromEEPROM(int adapter_nr, char* dest, int maxlen) {
+
*PCB CAD File:[https://wiki.friendlyelec.com/wiki/images/7/75/NanoPi_Zero2_2407_DXF.zip NanoPi_Zero2_2407_DXF.zip]
    int file;
+
*RK3528A Datasheet:[https://wiki.friendlyelec.com/wiki/images/7/70/Rockchip_RK3528A_Datasheet_V1.2-20240410.pdf Rockchip_RK3528A_Datasheet_V1.2-20240410.pdf]
    char filename[20];
+
    snprintf(filename, 19, "/dev/i2c-%d", adapter_nr);
+
    file = open(filename, O_RDWR);
+
    if (file < 0) {
+
        return -1;
+
    }
+
 
+
    int addr = 0x51; /* The I2C address */
+
    if (ioctl(file, I2C_SLAVE, addr) < 0) {
+
        close(file);
+
        return -1;
+
    }
+
    unsigned char reg = 0xfa; /* Device register to access */
+
    unsigned char buf[6] = { 0 };
+
    int res;
+
    /* Using SMBus commands */
+
    res = i2c_smbus_read_i2c_block_data(file, reg, 6, buf);
+
    close(file);
+
 
+
    if (res < 0) {
+
        return -1;
+
    }
+
 
+
    snprintf(dest, maxlen, "%02x:%02x:%02x:%02x:%02x:%02x",
+
                buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
+
 
+
    return 0;
+
}
+
 
+
int main() {
+
    char mac[50]={0};
+
    if (getMacAddressFromEEPROM(RK3399_I2C_NUM, mac, sizeof(mac)-1) == 0) {
+
        printf("macaddress: %s\n", mac);
+
    } else {
+
        printf("no eeprom found.\n");
+
    }
+
    return 0;
+
}
+
</syntaxhighlight>
+
编译并运行:
+
<syntaxhighlight lang="bash">
+
root@FriendlyELEC:~# gcc getmac.c -li2c -o getmac
+
root@FriendlyELEC:~# ./getmac
+
macaddress: 68:27:19:a5:2d:df
+
</syntaxhighlight>
+
==Debian11 桌面系统的使用==
+
===Debian11桌面系统简介===
+
{{DebianBullseyeDesktop-Intro/zh|NanoPi-R4SE}}
+
{{DebianBullseyeDesktop-Common/zh|NanoPi-R4SE}}
+
==Debian10 桌面系统的使用==
+
* Refer to:
+
** [[Debian Buster Desktop/zh|Debian Buster]]
+
==Buildroot Linux系统的使用==
+
{{RK3399 Buildroot Intro/zh|NanoPi-R4SE}}
+
<br />
+
关于Buildroot系统更详细的说明,请参考: [[Buildroot/zh|Buildroot]]<br />
+
==如何编译系统==
+
{{Rockchip-DevEnv/zh|NanoPi-R4SE}}
+
{{RK3399-BuildFromSource/zh|NanoPi-R4SE}}
+
{{RK3399-HWAccess/zh|NanoPi-R4SE}}
+
{{RockchipMiscCustome/zh|RK3399}}
+
{{RockchipUnbrick/zh|NanoPi-R4SE}}
+
==性能测试方法==
+
===测试网口速率===
+
====软件下载====
+
Windows下可以到官网下载 iperf3测速工具: https://iperf.fr/iperf-download.php <br >
+
Linux系统可以用以下命令安装: sudo apt-get install iperf3<br >
+
====开始测速====
+
用网线连接电脑到Lan网口, <br>
+
电脑上打开浏览器, 进入FriendlyWrt后台页面, 进入 "服务“ -> “终端”, 登录后输入以下命令启用 iperf3 服务: <br>
+
<syntaxhighlight lang="bash">
+
iperf3 -s -i 2
+
</syntaxhighlight>
+
再打开电脑的终端, 输入以下命令开始测试RX速率:
+
<syntaxhighlight lang="bash">
+
iperf3 -c 192.168.2.1 -i 2 -t 30 -P4
+
</syntaxhighlight>
+
输入以下命令开始测试TX速率:
+
<syntaxhighlight lang="bash">
+
iperf3 -c 192.168.2.1 -i 2 -t 30 -P4 -R
+
</syntaxhighlight>
+
==Link to Rockchip Resources==
+
{{LinkToRockchipResources|NanoPi-R4SE}}
+
==手册原理图等开发资料==
+
*Schematic:  [https://wiki.friendlyelec.com/wiki/images/c/cf/NanoPi_R4SE_2205_SCH.PDF NanoPi_R4SE_2205_SCH.PDF]
+
*PCB CAD File:[https://wiki.friendlyelec.com/wiki/images/8/83/NanoPi_R4SE_2205_DXF.zip NanoPi_R4SE_2205_DXF.zip]
+
  
 
==更新日志==
 
==更新日志==
{{RK3399Router-UpdateLog/zh|NanoPi-R4SE}}
+
{{RK3528-UpdateLog/zh|NanoPi-Zero2}}

Latest revision as of 11:04, 29 October 2024

English

Contents

1 介绍

Overview
Front
Back
Case
Case
Case
Case
  • NanoPi-Zero2是友善电子团队面向创客、嵌入式爱好者,电子艺术家、发烧友等群体推出的又一款完全开源的掌上创客神器。

2 NanoPi Zero2资源特性

  • 主芯片: 瑞芯微 RK3528A
    • CPU: 四核 ARM Cortex-A53
    • GPU: ARM Mali-450 GPU
    • VPU: 支持4K H265/H264 60fps解码,1080p H265/H264 60fps编码
  • 内存: 1GB/2GB LPDDR4/LPDDR4X
  • 闪存: 支持eMMC模块
  • 以太网: 一个原生千兆以太网
  • 无线网络: 一个M.2 Key-E 2230接口,支持PCIe无线网卡
  • USB接口:
    • 一个USB2.0 Host A型口
    • 一个USB-C接口,支持Device模式,可用于线刷eMMC
  • 一个microSD卡槽
  • 一个30-pin FPC GPIO接口
  • 调试: 3.3V调试串口,波特率为1500000bps
  • 指示灯: 2个GPIO控制的LED(SYS & LED1)
  • 其它:
    • 一个2 Pin 1.27/1.25mm 低功耗RTC备份电池接口
    • 具有RESET按键, RECOVERY按键, 和MASK按键
  • 供电: DC 5V/2A, 可通过USB-C或2.54mm排针接口供电
  • PCB尺寸: 45*45*1.2mm
  • 工作环境温度: 0℃ to 80℃

3 接口布局和尺寸

3.1 接口布局

NanoPi Zero2 Layout

  • 8-Pin 2.54mm 排针 & Debug UART
调试串口是3.3V电平, 1500000bps
Pin# Assignment 描述 Pin# Assignment 描述
1 GND 0V 2 VCC5V0_SYS 5V电源输出/输入
3 UART2DBG_TX 调试串口输出 4 VCC5V0_SYS 5V电源输出/输入
5 UART2DBG_RX 调试串口输入 6 GND 0V
7 VCC_3V3 3.3V电源输出 8 GND 0V
VCC5V0_SYS系直接与USB-C 5V相连。
VCC_3V3是系统3.3V电源, 同时被分配到M.2 Key-E, eMMC, SD, 30-pin GPIO, Ethernet等模块. 若要从此引脚取电,建议不要超过300mA。
  • M.2 Key-E
M.2 Key-E包含PCIe信号,支持PCIe wifi,以及NVMe SSD等PCIe外设(需要额外转接板)。
  • 30-Pin FPC GPIO
这是一个0.5mm FPC 连接器。

NanoPi Zero2 GPIO

VCC5V0_SYS系直接与USB-C 5V相连。由于连接器不支持大电流,不建议从此处给板子供电。
VCC_3V3是系统3.3V电源, 同时被分配到M.2 Key-E, eMMC, SD, 30-pin GPIO, Ethernet等模块. 若要从此引脚取电,建议不要超过300mA。
  • USB 接口
USB2.0 A口具有0.95A过流保护功能。
  • RTC
RTC备份电流为0.25μA TYP (VDD =3.0V, TA =25℃).
连接器型号:Molex 53398-0271 或兼容
  • 电源
裸板峰值功耗为5W。
要估算整体功耗,除裸板功耗之外,还应考虑 eMMC模块、M.2模块、USB外围设备和GPIO板的功耗。

4 快速入门

4.1 准备工作

要开启你的NanoPi Zero2新玩具,请先准备好以下硬件

  • NanoPi Zero2
  • MicroSD卡/TF卡: Class10或以上的 8GB SDHC卡
  • 一个USB Type-C接口的外接电源,建议使用传统5V/3A及以上的电源适配器
  • 如果需要开发与编译,则需要一台可以联网的电脑,推荐安装Ubuntu 20.04 64位系统,并使用下面的脚本初始化开发环境, 也可以使用Docker容器:

4.2 经测试可选用的TF卡

请参考: TF Cards We Tested

4.3 调试串口参数配置

使用以下串口参数:

波特率 1500000
数据位 8
奇偶校验 None
停止位 1
流控制 None

4.4 安装系统

4.4.1 下载固件

4.4.1.1 官方固件

访问此处的下载地址下载固件文件 (位于网盘的"01_系统固件"目录):
下表列出了所有官方固件,文件名中的XYZ代表文件的不同用途,其含义如下:

  • sd: 安装系统到TF卡时使用
  • eflasher: 需要通过TF卡烧写系统到eMMC时使用
  • usb: USB线刷时使用
图标 文件名 版本 描述 内核版本
Debian-icon.svg rk3528-XYZ-debian-bookworm-core-6.1-arm64-YYYYMMDD.img.gz bookworm Debian12 精简版固件,没有桌面, 仅命令行 6.1.y
Ubuntu-icon.svg rk3528-XYZ-ubuntu-noble-core-6.1-arm64-YYYYMMDD.img.zip noble 精简版64位Ubuntu系统固件,基于Ubuntu core 24.04构建 6.1.y
Openmediavault250.png rk3528-XYZ-openmediavault-6.1-YYYYMMDD.img.gz Shaitan OpenMediaVault NAS系统,基于Debian12构建 6.1.y
Proxmox.svg rk3528-XYZ-proxmox-6.1-YYYYMMDD.img.gz 8.2.7 Proxmox VE 系统 (预览版),基于Debian12构建 6.1.y
Openwrt-icon.svg rk3528-XYZ-friendlywrt-21.02-YYYYMMDD.img.gz 21.02 FriendlyWrt, 基于OpenWrt 21.02 6.1.y
Openwrt-icon.svg rk3528-XYZ-friendlywrt-21.02-docker-YYYYMMDD.img.gz 21.02 预装了Docker的FriendlyWrt, 基于OpenWrt 21.02 6.1.y
Openwrt-icon.svg rk3528-XYZ-friendlywrt-23.05-YYYYMMDD.img.gz 23.05 FriendlyWrt, 基于OpenWrt 23.05 6.1.y
Openwrt-icon.svg rk3528-XYZ-friendlywrt-23.05-docker-YYYYMMDD.img.gz 23.05 预装了Docker的FriendlyWrt, 基于OpenWrt 23.05 6.1.y
Other Image
Linux-tux.svg rk3528-XYZ-multiple-os-YYYYMMDD-25g.img.gz - 内含了多个操作系统的eMMC烧写文件,方便测试各个OS,此固件不会开机自动烧写,需要手动选择要烧写的OS
4.4.1.2 工具软件(可选)

访问 此处的下载链接 下载所需要的工具软件 (位于网盘的"05_工具软件"目录).

文件名 描述
win32diskimager.rar 用于将映象文件写入SD卡
SD Card Formatter 用于清空SD卡中的引导数据
RKDevTool_Release_v2.84.zip 瑞芯微的刷机工具,USB线刷系统时需要使用此工具

4.4.2 通过TF卡运行系统

操作步骤如下:

  • 准备一张8G或以上容量的TF卡;
  • 访问此处的下载地址下载需要的固件(位于"01_系统固件/01_SD卡固件"目录);
  • 下载烧写工具 win32diskimager (位于"05_工具软件"目录),或者选用你喜爱的工具;
  • 解压 .gz 格式的压缩文件得到 .img 格式的镜像文件;
  • 在Windows下以管理员身份运行 win32diskimager,在界面上选择你的SD卡盘符,选择解压后的固件文件,点击 Write 按钮烧写到SD卡;
  • 将SD卡从电脑端弹出,插入NanoPi-Zero2的microSD卡槽;
  • 连接NanoPi-Zero2的电源,系统会从TF卡启动, 某些型号可能需要按下Power键才会启动;

4.4.3 烧写系统到eMMC

4.4.3.1 方法1: 用TF启动卡进行自动烧写

此方法是通过SD卡启动一个小型的Linux系统, 借助名为EFlasher的工具来烧写固件到eMMC。

如果有连接HDMI显示器, 可通过图形界面观察烧写进度, 也可以通过板载LED灯来掌握烧写进度:

进度

SYS灯 (红灯)

上电开机

长亮

系统启动

慢闪

正在烧写

快闪

烧写完成

慢闪

默认情况下烧写是上电自动开始的,所以要注意备份eMMC里的数据,如果不想自动,可以使用文件名含"multiple-os"字样的固件,在界面上手动选择要烧写的系统。

4.4.3.1.1 烧写官方固件到eMMC

详细操作步骤如下:

  • 准备一张8G或以上容量的SDHC卡;
  • 访问此处的下载地址下载需要的固件(位于"01_系统固件/02_SD卡刷机固件(SD-to-eMMC)"目录)和烧写工具win32diskimager(位于"05_工具软件"目录);
  • 解压 .gz 格式的压缩文件得到 .img 格式的镜像文件;
  • 在Windows下以管理员身份运行 win32diskimager,在界面上选择你的SD卡盘符,选择解压后的固件文件,点击 Write 按钮烧写到SD卡;
  • 将SD卡从电脑端弹出,插入NanoPi-Zero2的microSD卡槽;
  • 连接NanoPi-Zero2的电源,系统会从SD卡启动,并自动启动 EFlasher 烧写工具将系统安装到 eMMC;
  • 烧写完成后,从NanoPi-Zero2弹出SD卡,NanoPi-Zero2会自动重启并从eMMC启动你刚刚烧写的系统;
4.4.3.1.2 烧写第三方固件(镜像文件)到eMMC

1) 从网盘上下载文件名带 eflasher 字样的任意固件(位于"01_系统固件/02_SD卡刷机固件(SD-to-eMMC)"目录), 解压后烧进TF卡;
2) 重新拨插一次TF卡, PC上会出现一个名为FriendlyARM的盘符(Linux下是FriendlyARM目录), 将 .raw 或者 .gz 结尾的固件复制进去 (注:如果你的文件为 .img 格式那么请改名为 .raw 格式);
3) 编辑TF卡上的 eflasher.conf 配置文件, 修改 autoStart= 后面的值指定为你的固件文件名, 例如:

autoStart=openwrt-rockchip-armv8_nanopi-ext4-sysupgrade.img.gz

除了第三方固件,亦支持文件名带 "-sd-" 字样的官方固件文件, 例如: rk3NNN-sd-friendlywrt-21.02-YYYYMMDD.img.gz
4) 安全弹出TF卡, 将TF卡放在NanoPi-Zero2上上电启动, 会自动烧写你的固件, 通过板载 LED 灯来了解安装进度;

4.4.3.2 方法2: 在网页上烧写

使用烧写了FriendlyWrt固件的TF卡启动NanoPi-Zero2, 登录FriendlyWrt页面, 在网页菜单上点击 "系统" -> "eMMC刷机助手" 进入eMMC刷机助手界面, 点击界面上的 "选择文件" 按钮, 选择你要刷写的文件 (官方固件选用文件名有"-sd-"的文件), 亦可选择第三方固件, 文件支持 .gz 格式的压缩文件, 或者以 .img 作为扩展名的raw格式。

选择文件后, 点击 “上传并烧写” 按钮, 开始上传并烧写, 如下图所示:
Friendlywrt-emmctools2-cn.png
烧写完成后,请弹出SD卡,设备会自动重启, 并从eMMC引导新系统,可留意指示灯的状态, 在系统状态灯闪烁,同时网卡状态灯亮起时,表示系统启动完成, 如果eMMC安装的系统是 FriendlyWrt, 则可以通过点击“进入首页”进入FriendlyWrt管理页面。
官方固件需要选用文件名带 "-sd-" 字样的镜像文件, 例如: rk3NNN-sd-friendlywrt-21.02-YYYYMMDD.img.gz, 压缩文件只支持gz格式, 如果文件太大, 可以先压缩成gz格式再上传。

4.4.3.3 方法3: 通过USB烧写
4.4.3.3.1 USB烧写步骤1: 安装USB驱动和工具

网盘的tools目录下载瑞芯微的USB驱动: DriverAssitant_v5.12.zip, 解压后安装;
在相同目录下, 下载瑞芯微开发工具: RKDevTool_Release_v2.84.zip, 解压后备用;

4.4.3.3.2 USB烧写步骤2: 将NanoPi-Zero2与电脑连接, 并进入刷机模式

按住Mask按键不放, 用USB数据线, 将NanoPi-Zero2与电脑进行连接, 保持按住Mask键, 状态灯亮起3秒后即可松开;
Zero2-usbflash.jpg

4.4.3.3.3 USB烧写步骤3: 开始烧写

固件格式一般有两种格式, 一种是单个的image文件, 通常第三方固件会使用这种打包方式, 另一种是多个分区镜像, FriendlyELEC的固件采用这种方式, 下面分别对这两种格式的固件进行说明:

  • 选项1: 烧写打包成单个image文件的固件

在电脑上双击 RKDevTool_Release_v2.84 目录下的 RKDevTool.exe 启动瑞芯微开发工具, 与电脑连接正常的情况下, 瑞芯微开发工具界面上会显示 "发现一个Maskrom设备";
在瑞芯微开发工具界面上, 点击 “升级固件”, 再点击 “固件” 按钮, 选择你要烧写的image文件, 点击 “升级” 然后等待烧写完成即可, 完成后设备会自动重启, 并从eMMC启动你刚刚安装的系统;

  • 选项2: 烧写由多个分区镜像组成的固件

根据需要到网盘上下载对应的压缩包(位于"01_系统固件/03_USB线刷固件(USB-to-eMMC)"目录), 在电脑上解压: 解压后, 可以看到固件目录下已内置了瑞芯微开发工具和预设好的配置文件, 双击 RKDevTool.exe 启动瑞芯微开发工具, 界面上会显示 "发现一个Maskrom设备", 点击界面上的“执行”按钮, 稍等片刻即可完成烧写, 完成后设备会自动重启, 并从eMMC启动你安装的系统;

4.4.4 安装系统到M.2或USB硬盘

可以通过使用TF卡启动eFlasher系统,将引导和系统分别安装到不同存储设备,但是由于CPU不支持直接从M.2和USB设备引导,所以虽然系统可以安装到M.2和USB设备,但是引导仍然需要安装到eMMC或者TF卡。
操作步骤如下:

  • 准备一张32G或以上容量的TF卡;
  • 访问此处的下载地址下载文件名为XXXX-eflasher-multiple-os-YYYYMMDD-30g.img.gz的固件(位于"01_系统固件/02_SD卡刷机固件(SD-to-eMMC)"目录);
  • 将固件写入TF卡,在NanoPi-Zero2上连接好存储设备,插入TF卡上电开机,接下来要在界面上操作,如果没有显示设备,可以使用VNC代替,请参考使用VNC操作eFlasher;
  • 在eFlasher界面上,首先选择要安装的OS,然后选择引导安装的目的地 (通常选eMMC),以及选择系统安装的目的地(可以选eMMC,M.2硬盘,USB存储设备等),如下图所示:

Eflasher-select-boot-and-system-device.png

  • 没有eMMC时可使用TF卡作为引导,方法是将另一个TF卡通过USB读卡器插入USB端口,然后选择USB设备作为引导安装目的地,从而实现从TF卡引导,但系统存放在M.2或USB硬盘的目的;
  • 烧写完成后,从NanoPi-Zero2弹出SD卡,引导在eMMC的情况下,NanoPi-Zero2会自动重启至你刚刚烧写的系统,如果引导安装在TF卡,则需要拨掉电源,插入TF引导卡再上电开机;
  • 更详细的安装指南请参考此处;

5 FriendlyCore的使用

5.1 FriendlyCore默认帐户

  • 普通用户:
   用户名: pi
   密码: pi
  • Root用户:
   用户名: Root用户:
   密码: fa

5.2 更新软件包

$ sudo apt-get update

5.3 配置网络

5.3.1 设置静态IP地址

默认已将 eth0 配置成 dhcp 自动获取IP地址,要更改配置,可以修改这个文件:

vi /etc/network/interfaces.d/eth0

比如修改成静态IP地址,如下所示:

auto eth0
iface eth0 inet static
    address 192.168.1.231
    netmask 255.255.255.0
    gateway 192.168.1.1

5.3.2 设置DNS

还需要修改如下文件加入DNS的配置:

vi /etc/systemd/resolved.conf

例如设置为192.168.1.1:

[Resolve]
DNS=192.168.1.1

再用以下命令重新启动systemd-resolved服务:

sudo systemctl restart systemd-resolved.service
sudo systemctl enable systemd-resolved.service

5.3.3 设置使用另一个网络接口

要配置另一个网口, 例如eth1,可以在 /etc/network/interfaces.d/ 下复制 eth0 成 eth1,然后编辑eth1, 把其中的eth0改为eth1, 根据需要指定网络配置:

cp /etc/network/interfaces.d/eth0 /etc/network/interfaces.d/eth1
vi /etc/network/interfaces.d/eth1

5.4 连接WiFi

先用以下命令检查一下系统是否有安装Network-Manager:

which nmcli

如果有安装Network-Manager, 则参考此链接的方法连接WiFi: Use NetworkManager to configure network settings/zh, 如果没有安装, 则参考如下方法配置WiFi,
输入以下命令查询一下WiFi的网络接口,wlan开头的就是WiFi:

ifconfig -a

默认情况下是wlan0,在/etc/network/interfaces.d/目录下新建一个与网络接口同名的配置文件 ,以wlan0为例,用vi命令新建以下文件:

sudo vi /etc/network/interfaces.d/wlan0

wlan0文件的内容如下:

auto lo
iface lo inet loopback
auto wlan0
iface wlan0 inet dhcp
wpa-driver wext
wpa-ssid YourWiFiESSID
wpa-ap-scan 1
wpa-proto RSN
wpa-pairwise CCMP
wpa-group CCMP
wpa-key-mgmt WPA-PSK
wpa-psk YourWiFiPassword

其中,YourWiFiESSID和YourWiFiPassword请替换成你要连接的无线AP名称和密码, 保存文件后输入以下命令, 或者重启以应用配置:

sudo systemctl daemon-reload
sudo systemctl restart networking

需要注意的是,如果你的SD卡在多个硬件上运行,WiFi的网络接口可能会被重命名为wlan1, wlan2等,你可以通过清空这个文件的内容并重启让它恢复为默认值:/etc/udev/rules.d/70-persistent-net.rules。

5.5 安装内核头文件

sudo dpkg -i /opt/linux-headers-*.deb


6 Debian Core的使用

6.1 帐户与密码

普通用户:
    用户名: pi
    密码: pi

Root用户:
    默认没有设置root密码,可通过sudo passwd root命令配置root密码

6.2 查看IP地址

由于Debian Bullseye主机名默认为硬件型号, 所以可以使用ping命令来获得IP地址: ping NanoPi-Zero2
Debian Bullseye使用network-manager管理网络, 网口默认配置成DHCP自动获取IP地址 (包括有多网口的设备)。

6.3 通过ssh登录Debian

使用以下命令:ssh pi@NanoPi-Zero2
默认密码为pi

6.4 更新软件包

6.4.1 更换软件源为国内镜像源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.org
sudo sed -i -e 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo sed -i -e 's/security.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo apt update

6.5 更改时区

6.5.1 检查当前时区

timedatectl

6.5.2 列出所有时区

timedatectl list-timezones

6.5.3 设置时区 (比如上海)

sudo timedatectl set-timezone Asia/Shanghai

替换内核下面的两个文件,重新编译内核:
kernel/logo.bmp
kernel/logo_kernel.bmp
或者使用脚本来操作,如下所示:

  • 下载脚本
git clone https://github.com/friendlyarm/sd-fuse_rk3399.git -b kernel-4.19 --single-branch
cd sd-fuse_rk3399
  • 编译内核并重新打包固件
convert files/logo.jpg -type truecolor /tmp/logo.bmp
convert files/logo.jpg -type truecolor /tmp/logo_kernel.bmp
sudo LOGO=/tmp/logo.bmp KERNEL_LOGO=/tmp/logo_kernel.bmp ./build-kernel.sh debian-bookworm-core-arm64
sudo ./mk-sd-image.sh debian-bookworm-core-arm64
sudo ./mk-emmc-image.sh debian-bookworm-core-arm64

6.6.1 恢复出厂设置

在终端上执行如下命令:

sudo firstboot && sudo reboot

6.7 在Debian系统上安装Docker

请参考此链接: How to Install Docker on Debian/zh

7 如何编译系统

稍后提供 ...

7.1 搭建编译环境

7.1.1 方法1: 使用Docker进行交叉编译

请参考 docker-cross-compiler-novnc,也可使用网盘 “04_SDK与编译器/docker” 目录下的本地镜像,参考README.md用docker load命令导入即可。

7.1.2 方法2: 本地搭建交叉编译环境

7.1.2.1 安装编译所需软件包

建议使用amd64架构Ubuntu 20.04操作系统,参考如下内容安装编译及打包所需要的软件包:

sudo apt-get -y update
sudo apt-get install -y sudo curl
sudo bash -c \
  "$(curl -fsSL https://raw.githubusercontent.com/friendlyarm/build-env-on-ubuntu-bionic/master/install.sh)"

对于中国大陆的用户亦可使用以下地址:

sudo bash -c \
  "$(curl -fsSL http://112.124.9.243:3000/friendlyelec/build-env-on-ubuntu-bionic/raw/branch/cn/install.sh)"

你的电脑上会安装好如下交叉编译器:

版本 架构 编译器路径 用途
4.9.3 armhf /opt/FriendlyARM/toolchain/4.9.3 用于编译armhf架构的应用程序
6.4 aarch64 /opt/FriendlyARM/toolchain/6.4-aarch64 用于交叉编译4.4内核
11.3 aarch64 /opt/FriendlyARM/toolchain/11.3-aarch64 用于交叉编译4.19及以上内核(含5.10,6.1)及uboot
7.1.2.2 设置交叉编译器

参考上一节的表格,选用合适版本的编译器,然后将编译器的路径加入到PATH中,例如要使用11.3的交叉编译器,用vi编辑~/.bashrc,在末尾加入以下内容:

export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin:$PATH
export GCC_COLORS=auto

执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:

. ~/.bashrc

验证是否安装成功:

$ aarch64-linux-gcc -v
Using built-in specs.
COLLECT_GCC=aarch64-linux-gcc
COLLECT_LTO_WRAPPER=/opt/FriendlyARM/toolchain/11.3-aarch64/libexec/gcc/aarch64-cortexa53-linux-gnu/11.3.0/lto-wrapper
Target: aarch64-cortexa53-linux-gnu
Configured with: /home/cross/arm64/src/gcc/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=aarch64-cortexa53-linux-gnu --prefix=/opt/FriendlyARM/toolchain/11.3-aarch64 --exec_prefix=/opt/FriendlyARM/toolchain/11.3-aarch64 --with-sysroot=/opt/FriendlyARM/toolchain/11.3-aarch64/aarch64-cortexa53-linux-gnu/sysroot --enable-languages=c,c++ --enable-fix-cortex-a53-843419 --with-arch=armv8-a+crypto+crc --with-cpu=cortex-a53 --with-pkgversion=ctng-1.25.0-119g-FA --with-bugurl=http://www.friendlyelec.com/ --enable-objc-gc --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --disable-libmpx --with-gmp=/home/cross/arm64/buildtools --with-mpfr=/home/cross/arm64/buildtools --with-mpc=/home/cross/arm64/buildtools --with-isl=/home/cross/arm64/buildtools --enable-lto --enable-threads=posix --disable-libstdcxx-pch --enable-clocale=gnu --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-indirect-function --enable-gnu-unique-object --enable-default-pie --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-gold --with-libintl-prefix=/home/cross/arm64/buildtools --disable-multilib --with-local-prefix=/opt/FriendlyARM/toolchain/11.3-aarch64/aarch64-cortexa53-linux-gnu/sysroot --enable-long-long --enable-checking=release --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.3.0 (ctng-1.25.0-119g-FA)

7.2 编译 Openwrt/Friendlywrt

7.2.1 下载源代码

FriendlyWrt有两个版本, 请根据需要进行选择.

7.2.1.1 版本FriendlyWrt 21.02
mkdir friendlywrt21-rk3528
cd friendlywrt21-rk3528
git clone https://github.com/friendlyarm/repo --depth 1 tools
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v21.02 \
        -m rk3528.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
tools/repo sync -c  --no-clone-bundle
7.2.1.2 版本FriendlyWrt 23.05
mkdir friendlywrt23-rk3528
cd friendlywrt23-rk3528
git clone https://github.com/friendlyarm/repo --depth 1 tools
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v23.05 \
        -m rk3528.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
tools/repo sync -c  --no-clone-bundle

7.2.2 首次编译

下面的命令是编译不带docker的版本, 如需要编译带docker的版本, 请将rk3528.mk替换为rk3528-docker.mk:

./build.sh rk3528.mk

会编译所有组件(包含u-boot, kernel 和 friendlywrt)并生成sd卡镜像文件,再执行以下命令,可生成用于安装系统到emmc运行的镜像文件(eflahser固件):

./build.sh emmc-img

对项目进行过修改后, 需要重新打包sd卡镜像, 可执行如下命令:

./build.sh sd-img

7.2.3 二次编译

cd friendlywrt
make menuconfig #改动FriendlyWrt的配置
rm -rf ./tmp
make -j${nproc}
cd ../
./build.sh sd-img
./build.sh emmc-img

7.2.4 单独编译u-boot

./build.sh uboot

7.2.5 单独编译kernel

./build.sh kernel

7.2.6 单独编译friendlywrt

./build.sh friendlywrt

或者进入friendlywrt目录, 按标准openwrt的命令操作, 上面的命令出现错误时, 可尝试使用以下命令单线程编译:

cd friendlywrt
make -j1 V=s

7.3 其他Linux系统编译

7.3.1 各个OS对应的内核与u-boot版本

操作系统 内核版本 uboot版本 交叉编译器 分区类型 构建工具集 内核代码分支 内核配置 uboot代码分支 uboot配置
openmediavault-arm64 linux v6.1.y u-boot
v2017.09
11.3-aarch64 GPT
sd-fuse
nanopi6-v6.1.y nanopi5_linux_defconfig nanopi5-v2017.09 nanopi5_defconfig
ubuntu-noble-core-arm64 GPT
debian-bookworm-core-arm64
friendlywrt21 nanopi5_linux_defconfig
+friendlywrt.config
friendlywrt21-docker
friendlywrt23
friendlywrt23-docker
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
  • sd-fuse构建脚本可以用于快速编译kernel和uboot、重新打包sd卡固件与卡刷固件等

7.3.2 编译内核linux-v6.1.y

本节内容适用于如下OS:

friendlywrt21 friendlywrt21-docker friendlywrt23 friendlywrt23-docker ubuntu-noble-core-arm64 openmediavault-arm64 debian-bookworm-core-arm64

下载源代码并编译:

git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi6-v6.1.y kernel-rockchip
cd kernel-rockchip
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
touch .scmversion
# 配置内核
# option1: 加载Linux系统配置
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi5_linux_defconfig
# option2: 加载FriendlyWrt系统配置
# make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi5_linux_defconfig friendlywrt.config
# 启动配置界面
# make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig
# 编译内核
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 -j$(nproc)
# 编译驱动模块
mkdir -p out-modules && rm -rf out-modules/*
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 INSTALL_MOD_PATH="$PWD/out-modules" modules -j$(nproc)
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 INSTALL_MOD_PATH="$PWD/out-modules" modules_install
KERNEL_VER=$(make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 kernelrelease)
[ ! -f "$PWD/out-modules/lib/modules/${KERNEL_VER}/modules.dep" ] && depmod -b $PWD/out-modules -E Module.symvers -F System.map -w ${KERNEL_VER}
(cd $PWD/out-modules && find . -name \*.ko | xargs aarch64-linux-strip --strip-unneeded)

打包kernel.img与resource.img:

wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3528/kernel-6.1.y/tools/mkkrnlimg && chmod 755 mkkrnlimg
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3528/kernel-6.1.y/tools/resource_tool && chmod 755 resource_tool
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3528/kernel-6.1.y/prebuilt/boot/logo.bmp
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3528/kernel-6.1.y/prebuilt/boot/logo_kernel.bmp
./mkkrnlimg arch/arm64/boot/Image kernel.img
./resource_tool --dtbname arch/arm64/boot/dts/rockchip/rk3528-nanopi*-rev*.dtb logo.bmp logo_kernel.bmp

完成后会得到如下文件:

kernel.img resource.img 驱动模块位于out-modules目录

安装内核:
请参考 #应用新编译的uboot与内核

7.3.3 编译u-boot v2017.09

本节内容适用于如下OS:

friendlywrt21 friendlywrt21-docker friendlywrt23 friendlywrt23-docker ubuntu-noble-core-arm64 openmediavault-arm64 debian-bookworm-core-arm64

下载源代码并编译:

git clone https://github.com/friendlyarm/rkbin --single-branch --depth 1 -b friendlyelec
git clone https://github.com/friendlyarm/uboot-rockchip --single-branch --depth 1 -b nanopi5-v2017.09
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
cd uboot-rockchip/
./make.sh nanopi_r3

编译完成后会生成如下文件:

uboot.img trust.img rk356x_spl_loader_vX.YY.ZZZ.bin (打包时改名为MiniLoaderAll.bin)

安装u-boot:
请参考 #应用新编译的uboot与内核

7.3.4 应用新编译的uboot与内核

7.3.4.1 安装到目标板

本节内容适用于如下OS:

friendlywrt21 friendlywrt21-docker friendlywrt23 friendlywrt23-docker ubuntu-noble-core-arm64 openmediavault-arm64 debian-bookworm-core-arm64

由于RK3528的OS默认均采用GPT分区, 可以用dd命令将image文件烧写至image对应的分区,SD卡与eMMC的设备节点如下:

  • SD/TF Card设备节点为 /dev/mmcblk0
  • eMMC设备节点为 /dev/mmcblk2

下面将演示如何将内核更新到eMMC:
使用parted命令查看分区布局:

parted /dev/mmcblk2 print

得到如下输出:

Model: MMC BJTD4R (sd/mmc)
Disk /dev/mmcblk2: 31.3GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
 
Number  Start   End     Size    File system  Name      Flags
 1      8389kB  12.6MB  4194kB               uboot
 2      12.6MB  16.8MB  4194kB               trust
 3      16.8MB  21.0MB  4194kB               misc
 4      21.0MB  25.2MB  4194kB               dtbo
 5      25.2MB  41.9MB  16.8MB               resource
 6      41.9MB  83.9MB  41.9MB               kernel
 7      83.9MB  134MB   50.3MB               boot
 8      134MB   2500MB  2366MB  ext4         rootfs
 9      2500MB  31.3GB  28.8GB  ext4         userdata

resource分区的序号为5, kernel分区的序号为6,对应的设备节点为/dev/mmcblk2p5和/dev/mmcblk2p6, dd命令如下:

dd if=resource.img of=/dev/mmcblk2p5 bs=1M
dd if=kernel.img of=/dev/mmcblk2p6 bs=1M

如果要更新uboot:

dd if=uboot.img of=/dev/mmcblk2p1 bs=1M

如果要更新内核驱动模块,将新驱动模块目录上传并替换以下目录下的文件即可:/lib/modules。

7.3.4.2 打包新的SD Image

sd-fuse 提供一些工具和脚本, 用于制作SD卡固件, 具体用途如下:

  • 制作分区镜像文件, 例如将rootfs目录打包成rootfs.img
  • 将多个分区镜像文件打包成可直接写SD卡的单一镜像文件
  • 简化内核和uboot的编译, 一键编译内核、第三方驱动, 并更新rootfs.img中的内核模块

请根据所用的内核版本点击对应的链接了解详细的使用方法:

内核版本 构建脚本
linux v6.1.y sd-fuse_rk3528/kernel-6.1.y
7.3.4.3 线刷
7.3.4.3.1 Linux系统

用以下命令让开发板进入loader模式:

sudo reboot loader

用 upgrade_tool_v2.30_for_linux 工具烧写uboot与内核, 命令如下所示:

sudo upgrade_tool di -k kernel.img
sudo upgrade_tool di -re resource.img
sudo upgrade_tool di -u uboot.img
sudo upgrade_tool RD

注:upgrade_tool是Rockchip提供的Linux下的命令行工具(Linux_Upgrade_Tool),需要使用v2以上版本。

7.4 使用脚本进行编译

7.4.1 下载工具与固件

以friendlycore-focal系统为例,从github克隆下载脚本, 并解压friendlycore-focal系统的映象文件,映象文件可以在网盘的"03_分区镜像文件"目录找到:

git clone https://github.com/friendlyarm/sd-fuse_rk3528.git -b kernel-6.1.y
cd sd-fuse_rk3528
tar xvzf /path/to/netdrive/03_分区镜像文件/ubuntu-noble-core-arm64-images.tgz

7.4.2 编译内核

下载内核源代码并编译,编译完成后会自动更新 ubuntu-noble-core-arm64 目录下的相关映象文件,包括文件系统中的内核模块 (rootfs.img会被解包并重新打包):

git clone https://github.com/friendlyarm/kernel-rockchip --depth 1 -b nanopi6-v6.1.y kernel-rk3528
KERNEL_SRC=$PWD/kernel-rk3528 ./build-kernel.sh ubuntu-noble-core-arm64

7.4.3 编译内核头文件

git clone https://github.com/friendlyarm/kernel-rockchip --depth 1 -b nanopi6-v6.1.y kernel-rk3528
MK_HEADERS_DEB=1 BUILD_THIRD_PARTY_DRIVER=0 KERNEL_SRC=$PWD/kernel-rk3528 ./build-kernel.sh ubuntu-noble-core-arm64

7.4.4 编译uboot

下载uboot源代码并编译,编译完成后会自动更新 ubuntu-noble-core-arm64 目录下的相关映象文件:

git clone https://github.com/friendlyarm/uboot-rockchip --depth 1 -b nanopi5-v2017.09
UBOOT_SRC=$PWD/uboot-rockchip ./build-uboot.sh ubuntu-noble-core-arm64

7.4.5 生成新固件

将ubuntu-noble-core-arm64目录下的映象文件重新打包成sd卡固件:

./mk-sd-image.sh ubuntu-noble-core-arm64

命令完成后,固件位于out目录

8 板载资源的使用

8.1 使用VPU

请参考 VPU/zh

8.2 使用NPU

请参考 NPU/zh

9 备份文件系统并创建SD映像(将系统及应用复制到另一块开发板)

9.1 备份根文件系统

开发板上执行以下命令,备份整个文件系统(包括OS与数据):

sudo passwd root
su root
cd /
tar --warning=no-file-changed -cvpzf /rootfs.tar.gz \
    --exclude=/rootfs.tar.gz --exclude=/var/lib/docker/runtimes \
    --exclude=/etc/firstuser --exclude=/etc/friendlyelec-release \
    --exclude=/usr/local/first_boot_flag --one-file-system /

注:备份时,如果系统中有挂载目录,最后会出现一个错误提示信息,可以无视它,我们本来就是要忽略这些目录

9.2 从根文件系统制作一个可启动的SD卡

Only support RK3328/RK3399/RK3568/RK3566/RK3588


10 Linux操作系统的常见操作

10.1 Linux系统下使用adb

10.1.1 buildroot系统下开启adb功能

开机自动开启

mv /etc/init.d/K50usbdevice.sh /etc/init.d/S50usbdevice.sh
reboot

临时开启

usbdevice-wrapper start

10.1.2 ubuntu和debian系统下开启adb功能

开机自动开启

sudo systemctl enable usbdevice
sudo reboot

临时开启

usbdevice-wrapper start

10.1.3 如何连接

使用adb时,与电脑相连接的端口与usb线刷的端口相同。

10.2 安装内核头文件

安装位于/opt/archives目录下的deb文件:

sudo dpkg -i /opt/archives/linux-headers-*.deb

在线下载并更新内核头文件:

wget http://112.124.9.243/archives/RK3528/linux-headers-$(uname -r)-latest.deb
sudo dpkg -i ./linux-headers-latest.deb

可以访问 http://112.124.9.243/archives/RK3528 查看有哪些内核deb包。

10.3 设置内核启动参数 (仅支持eMMC)

将固件XXXX-eflasher-multiple-os-YYYYMMDD-30g.img.gz烧写到TF卡,将TF卡插入电脑,Windows电脑一般会自动识别TF卡的分区,该分区为exfat格式,Linux或Mac用户,请手动挂载TF卡的第一个分区,假设TF卡的设备名为/dev/sdX,挂载/dev/sdX1即可。

编辑TF卡对应OS目录下的info.conf配置文件,增加bootargs-ext参数,例如:

bootargs-ext=rockchipdrm.fb_max_sz=2048

如果要删除某个已经指定的参数,可以设置为空,例如删除userdata参数:

bootargs-ext=userdata=

编辑完成后,再用此TF卡烧写系统到eMMC即可。

要在制作量产卡的过程中设置好内核启动参数,可参考如下脚本 (以RK3588为例): https://github.com/friendlyarm/sd-fuse_rk3588/blob/kernel-6.1.y/test/test-custom-bootargs.sh

11 救砖办法

如何固件没有正确安装,导致开发板变砖,而且可能没有机会通过SD卡重新安装固件,这时,就需要进入Maskrom模式,通过擦除存储设备的办法救砖。

11.1 Windows用户

11.1.1 下载所需文件

  • 获取所需工具:访问这里,在 05_Tools 目录中找到 RKDevTool_v3.19_for_window.zip, DriverAssitant_v5.12.zip 下载到本地
  • 安装Rockchip USB驱动和RKDevTool: 解压 DriverAssitant_v5.12.zip 安装Rockchip USB驱动, 解压 RKDevTool_v3.19_for_window.zip 获得 Rockchip烧写工具 RKDevTool
  • 获取loader: 访问这里,进入CPU型号对应的tools目录,下载 MiniLoaderAll.bin

11.1.2 进入Maskrom模式擦除存储设备

  • 使用USB数据线将NanoPi-Zero2与电脑相连接
  • 在电脑上启动 RKDevTool
  • 将NanoPi-Zero2断开电源,按住 MASK 键,连接电源,当看到界面下方显示 Found One MASKROM Device 时松开按键, 如下图所示:

Rkdevtool found one maskrom device.png

  • RKDevTool 界面上点击 Advanced Function 选项卡
  • Boot 编辑框中选择 MiniLoaderAll.bin,然后点击 Download 按钮
  • 选中 EMMC,点 Switch Storage,再点击 ErashAll 按钮擦除eMMC

Rkdevtool erase emmc.png

  • 至此,NanoPi-Zero2恢复至初始状态,可以正常通过SD卡或eMMC引导系统了

11.2 Linux/Mac用户

11.2.1 下载所需文件

  • 获取所需工具:访问这里,在 05_Tools 目录中找到 upgrade_tool_v2.30_for_linux.tgz (或Mac用户选upgrade_tool_v2.25_for_mac.tgz) 下载到本地
  • 获取loader: 访问这里,进入CPU型号对应的tools目录,下载 MiniLoaderAll.bin

11.2.2 安装upgrade_tool工具

以下命令以Linux为例,Mac用户只有文件和目录名略有不同:

tar xzf upgrade_tool_v2.30_for_linux.tgz
cd upgrade_tool_v2.30_for_linux
sudo cp upgrade_tool /usr/local/sbin/
sudo chmod 755 /usr/local/sbin/upgrade_tool

11.2.3 进入Maskrom模式擦除存储设备

  • 使用USB数据线将NanoPi-Zero2与电脑相连接
  • 将NanoPi-Zero2断开电源,按住 MASK 键,连接电源,4秒后松开按键
  • 用如下命令检查连接:
upgrade_tool LD

显示类似 "DevNo=1 Vid=0x2207,Pid=0x350b,LocationID=13 Mode=Maskrom SerialNo=" 的内容表示已检测到设备。

  • 用如下命令擦除eMMC:
upgrade_tool EF MiniLoaderAll.bin
  • 至此,NanoPi-Zero2恢复至初始状态,可以正常通过SD卡或eMMC引导系统了

12 资源链接

12.1 原理图和数据手册

13 更新日志

13.1 2024-10-16

  • 内核默认开启了KVM
  • 优化了待机功耗
  • 新增系统Proxmox VE
  • 更新FriendlyWrt到openwrt-23.05.05版本

13.2 2024-09-04

首次发布