Difference between revisions of "NanoPi Zero2/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
Line 2: Line 2:
  
 
==介绍==
 
==介绍==
[[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]]
 
* NanoPi-Zero2是友善电子团队面向创客、嵌入式爱好者,电子艺术家、发烧友等群体推出的又一款完全开源的掌上创客神器。
 
* NanoPi-Zero2是友善电子团队面向创客、嵌入式爱好者,电子艺术家、发烧友等群体推出的又一款完全开源的掌上创客神器。
==NanoPi R4SE资源特性==
+
==NanoPi Zero2资源特性==
 
* SoC: Rockchip RK3528
 
* SoC: Rockchip RK3528
** CPU: big.LITTLE,Dual-Core Cortex-A72(up to 2.0GHz) + Quad-Core Cortex-A53(up to 1.5GHz)
+
** CPU: Quad-core Arm Cortex-A53 processor
** GPU: Mali-T864 GPU,supports OpenGL ES1.1/2.0/3.0/3.1, OpenCL, DX11, and AFBC
+
** GPU: Mali-450 GPU
** VPU: 4K VP9 and 4K 10bits H265/H264 60fps decoding, Dual VOP, etc
+
** VPU: 4K H265/H264 60fps decoding
* PMU: RK808-D PMIC, cooperated with independent DC/DC, enabling DVFS, software power-down, RTC wake-up, system sleep mode
+
* RAM: 1GB/2GB LPDDR4
* RAM: 4GB LPDDR4
+
 
* Flash: 32GB eMMC
 
* Flash: 32GB eMMC
* Ethernet: one Native Gigabit Ethernet, and one PCIe Gigabit Ethernet
+
* Ethernet: one Native Gigabit Ethernet
* USB: two USB 3.0 Type-A ports
+
* USB: one USB 2.0 Type-A ports
 
* microSD Slot x 1
 
* microSD Slot x 1
 
* Debug: one Debug UART, 3 Pin 2.54mm header, 3V level, 1500000bps
 
* Debug: one Debug UART, 3 Pin 2.54mm header, 3V level, 1500000bps
* LEDs: 1 x power LED and 3 x GPIO Controlled LED (SYS, LAN, WAN)
+
* LEDs: 1 x power LED and 1 x GPIO Controlled LED (SYS)
 
* others:  
 
* others:  
 
** 2 Pin 1.27/1.25mm RTC battery input connector
 
** 2 Pin 1.27/1.25mm RTC battery input connector
** one User Button
+
** one RESET Button
 +
** one RECOVERY Button
 
** one MASK Button for eMMC upgrade
 
** one MASK Button for eMMC upgrade
 
** one 5V Fan connector
 
** one 5V Fan connector
 
* Power supply: DC 5V/3A, via USB-C connector
 
* Power supply: DC 5V/3A, via USB-C connector
* PCB: 8 Layer, 66 mm x 66 mm
+
* PCB: TODO
 
* Temperature measuring range: 0℃ to 80℃
 
* Temperature measuring range: 0℃ to 80℃
  
 
==接口布局和尺寸==
 
==接口布局和尺寸==
 
===接口布局===
 
===接口布局===
[[File:NanoPi_R4SE_Layout.jpg |thumb|300px|NanoPi R4SE Layout]]
+
[[File:NanoPi_Zero2_Layout.jpg |thumb|300px|NanoPi Zero2 Layout]]
  
 
* '''调试串口'''
 
* '''调试串口'''
Line 60: Line 60:
 
==快速入门==
 
==快速入门==
 
===准备工作===
 
===准备工作===
要开启你的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 72: Line 71:
 
{{1500000SerialPortDebugSetting/zh}}
 
{{1500000SerialPortDebugSetting/zh}}
 
===安装系统===
 
===安装系统===
{{BurnLinuxToSD-RK3399Router/zh|NanoPi-R4SE}}
+
{{BurnLinuxToSD-RK3528Router/zh|NanoPi-Zero2}}
{{BurnLinuxToEMMC-RK3399Router/zh|NanoPi-R4SE}}
+
{{BurnLinuxToEMMC-RK3528Router/zh|NanoPi-Zero2}}
{{FriendlyWrt21/zh|NanoPi-R4SE}}
+
{{OfficialUbuntuCore/zh|NanoPi-Zero2}}
{{OfficialUbuntuCore/zh|NanoPi-R4SE}}
+
{{FriendlyCoreRemoveQt/zh}}
+
===读取EEPROM中的Mac Address===
+
====命令行读取====
+
先安装i2c工具, 用如下命令:
+
<syntaxhighlight lang="bash">
+
sudo apt-get update
+
sudo apt-get install i2c-tools
+
</syntaxhighlight>
+
然后通过如下命令可以读取EEPROM中的Mac Address, 仅适用于有EEPROM芯片的型号:
+
<syntaxhighlight lang="bash">
+
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)
+
 
+
int getMacAddressFromEEPROM(int adapter_nr, char* dest, int maxlen) {
+
    int file;
+
    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}}
+
{{Rockchip-DevEnv/zh|NanoPi-Zero2}}
{{RK3399-BuildFromSource/zh|NanoPi-R4SE}}
+
{{RK3528-BuildFromSource/zh|NanoPi-Zero2}}
{{RK3399-HWAccess/zh|NanoPi-R4SE}}
+
{{RK3528-HWAccess/zh|NanoPi-Zero2}}
{{RockchipMiscCustome/zh|RK3399}}
+
{{RockchipMiscCustome/zh|RK3528}}
{{RockchipUnbrick/zh|NanoPi-R4SE}}
+
{{RockchipUnbrick/zh|NanoPi-Zero2}}
==性能测试方法==
+
===测试网口速率===
+
====软件下载====
+
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==
 
==Link to Rockchip Resources==
{{LinkToRockchipResources|NanoPi-R4SE}}
+
{{LinkToRockchipResources|NanoPi-Zero2}}
 
==手册原理图等开发资料==
 
==手册原理图等开发资料==
*Schematic:  [https://wiki.friendlyelec.com/wiki/images/c/cf/NanoPi_R4SE_2205_SCH.PDF NanoPi_R4SE_2205_SCH.PDF]
+
*Schematic:  TODO
*PCB CAD File:[https://wiki.friendlyelec.com/wiki/images/8/83/NanoPi_R4SE_2205_DXF.zip NanoPi_R4SE_2205_DXF.zip]
+
*PCB CAD File:TODO
  
 
==更新日志==
 
==更新日志==
{{RK3399Router-UpdateLog/zh|NanoPi-R4SE}}
+
{{RK3528Router-UpdateLog/zh|NanoPi-Zero2}}

Revision as of 06:43, 4 September 2024

English

Contents

1 介绍

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

2 NanoPi Zero2资源特性

  • SoC: Rockchip RK3528
    • CPU: Quad-core Arm Cortex-A53 processor
    • GPU: Mali-450 GPU
    • VPU: 4K H265/H264 60fps decoding
  • RAM: 1GB/2GB LPDDR4
  • Flash: 32GB eMMC
  • Ethernet: one Native Gigabit Ethernet
  • USB: one USB 2.0 Type-A ports
  • microSD Slot x 1
  • Debug: one Debug UART, 3 Pin 2.54mm header, 3V level, 1500000bps
  • LEDs: 1 x power LED and 1 x GPIO Controlled LED (SYS)
  • others:
    • 2 Pin 1.27/1.25mm RTC battery input connector
    • one RESET Button
    • one RECOVERY Button
    • one MASK Button for eMMC upgrade
    • one 5V Fan connector
  • Power supply: DC 5V/3A, via USB-C connector
  • PCB: TODO
  • Temperature measuring range: 0℃ to 80℃

3 接口布局和尺寸

3.1 接口布局

NanoPi Zero2 Layout
  • 调试串口
3V level signals, 1500000bps
Pin# Assignment Description
1 GND 0V
2 UART2DBG_TX output
3 UART2DBG_RX intput
  • USB Port
Each USB 3.0 port has 2A overcurrent protection.
  • RTC
RTC backup current is 27uA.
Connector P/N: Molex 53398-0271
Notes
  1. Power Input : 5V/3A, via USB Type-C(USB PD Specification is not supported)

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 安装系统

Template:BurnLinuxToSD-RK3528Router/zh Template:BurnLinuxToEMMC-RK3528Router/zh

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 如何编译系统

6.1 搭建编译环境

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

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

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

6.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
6.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)

6.2 编译 Openwrt/Friendlywrt

6.2.1 下载源代码

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

6.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
6.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

6.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

6.2.3 二次编译

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

6.2.4 单独编译u-boot

./build.sh uboot

6.2.5 单独编译kernel

./build.sh kernel

6.2.6 单独编译friendlywrt

./build.sh friendlywrt

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

cd friendlywrt
make -j1 V=s

6.3 其他Linux系统编译

6.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卡固件与卡刷固件等

6.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与内核

6.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与内核

6.3.4 应用新编译的uboot与内核

6.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。

6.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
6.3.4.3 线刷
6.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以上版本。

6.4 使用脚本进行编译

6.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

6.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

6.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

6.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

6.4.5 生成新固件

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

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

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

7 板载资源的使用

7.1 使用VPU

请参考 VPU/zh

7.2 使用NPU

请参考 NPU/zh

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

8.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 /

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

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

Only support RK3328/RK3399/RK3568/RK3566/RK3588


9 救砖办法

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

9.1 Windows用户

9.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

9.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引导系统了

9.2 Linux/Mac用户

9.2.1 下载所需文件

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

9.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

9.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引导系统了

10 Link to Rockchip Resources

11 手册原理图等开发资料

  • Schematic: TODO
  • PCB CAD File:TODO

12 更新日志

Template:RK3528Router-UpdateLog/zh