Difference between revisions of "NanoPi Zero2/zh"
(updated by API) |
(updated by API) |
||
Line 2: | Line 2: | ||
==介绍== | ==介绍== | ||
− | [[File: | + | [[File:NanoPi_Zero2_Overview.jpg|thumb|300px|Overview]] |
− | [[File: | + | [[File:NanoPi_Zero2_Front.jpg|thumb|300px|Front]] |
− | [[File: | + | [[File:NanoPi_Zero2_Back.jpg|thumb|300px|Back]] |
− | [[File: | + | [[File:Zero2_Case-01.jpg|thumb|300px|Case]] |
− | [[File: | + | [[File:Zero2_Case-02.jpg|thumb|300px|Case]] |
− | [[File: | + | [[File:Zero2_Case-03.jpg|thumb|300px|Case]] |
− | [[File: | + | [[File:Zero2_Case-04.jpg|thumb|300px|Case]] |
− | [[File: | + | [[File:Zero2_Case-05.jpg|thumb|300px|Case]] |
* NanoPi-Zero2是友善电子团队面向创客、嵌入式爱好者,电子艺术家、发烧友等群体推出的又一款完全开源的掌上创客神器。 | * NanoPi-Zero2是友善电子团队面向创客、嵌入式爱好者,电子艺术家、发烧友等群体推出的又一款完全开源的掌上创客神器。 | ||
− | ==NanoPi | + | ==NanoPi Zero2资源特性== |
* SoC: Rockchip RK3528 | * SoC: Rockchip RK3528 | ||
− | ** CPU: | + | ** CPU: Quad-core Arm Cortex-A53 processor |
− | ** GPU: Mali- | + | ** GPU: Mali-450 GPU |
− | ** VPU: 4K | + | ** VPU: 4K H265/H264 60fps decoding |
− | * | + | * RAM: 1GB/2GB LPDDR4 |
− | + | ||
* Flash: 32GB eMMC | * Flash: 32GB eMMC | ||
− | * Ethernet: one Native | + | * Ethernet: one Native Gigabit Ethernet |
− | * USB: | + | * 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 | + | * 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 | + | ** 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: | + | * PCB: TODO |
* Temperature measuring range: 0℃ to 80℃ | * Temperature measuring range: 0℃ to 80℃ | ||
==接口布局和尺寸== | ==接口布局和尺寸== | ||
===接口布局=== | ===接口布局=== | ||
− | [[File: | + | [[File:NanoPi_Zero2_Layout.jpg |thumb|300px|NanoPi Zero2 Layout]] |
* '''调试串口''' | * '''调试串口''' | ||
Line 60: | Line 60: | ||
==快速入门== | ==快速入门== | ||
===准备工作=== | ===准备工作=== | ||
− | 要开启你的NanoPi | + | 要开启你的NanoPi Zero2新玩具,请先准备好以下硬件 |
− | * NanoPi | + | * NanoPi Zero2 |
* MicroSD卡/TF卡: Class10或以上的 8GB SDHC卡 | * MicroSD卡/TF卡: Class10或以上的 8GB SDHC卡 | ||
− | * 一个USB Type-C接口的外接电源,建议使用传统5V/ | + | * 一个USB Type-C接口的外接电源,建议使用传统5V/3A及以上的电源适配器 |
− | + | ||
* 如果需要开发与编译,则需要一台可以联网的电脑,推荐安装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- | + | {{BurnLinuxToSD-RK3528Router/zh|NanoPi-Zero2}} |
− | {{BurnLinuxToEMMC- | + | {{BurnLinuxToEMMC-RK3528Router/zh|NanoPi-Zero2}} |
− | + | {{OfficialUbuntuCore/zh|NanoPi-Zero2}} | |
− | {{OfficialUbuntuCore/zh|NanoPi- | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
==如何编译系统== | ==如何编译系统== | ||
− | {{Rockchip-DevEnv/zh|NanoPi- | + | {{Rockchip-DevEnv/zh|NanoPi-Zero2}} |
− | {{ | + | {{RK3528-BuildFromSource/zh|NanoPi-Zero2}} |
− | {{ | + | {{RK3528-HWAccess/zh|NanoPi-Zero2}} |
− | {{RockchipMiscCustome/zh| | + | {{RockchipMiscCustome/zh|RK3528}} |
− | {{RockchipUnbrick/zh|NanoPi- | + | {{RockchipUnbrick/zh|NanoPi-Zero2}} |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
==Link to Rockchip Resources== | ==Link to Rockchip Resources== | ||
− | {{LinkToRockchipResources|NanoPi- | + | {{LinkToRockchipResources|NanoPi-Zero2}} |
==手册原理图等开发资料== | ==手册原理图等开发资料== | ||
− | *Schematic: | + | *Schematic: TODO |
− | *PCB CAD | + | *PCB CAD File:TODO |
==更新日志== | ==更新日志== | ||
− | {{ | + | {{RK3528Router-UpdateLog/zh|NanoPi-Zero2}} |
Revision as of 06:43, 4 September 2024
Contents
1 介绍
- 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 接口布局
- 调试串口
- 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
- 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 |
- 内核源代码仓库地址:https://github.com/friendlyarm/kernel-rockchip
- u-boot源代码仓库地址:https://github.com/friendlyarm/uboot-rockchip
- 交叉编译工具链存放在如下路径: /opt/FriendlyARM/toolchain/,使用前需导出到PATH环境变量,例如需要使用11.3-aarch64版本的编译器,使用如下命令:
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 界面上点击 Advanced Function 选项卡
- 在 Boot 编辑框中选择 MiniLoaderAll.bin,然后点击 Download 按钮
- 选中 EMMC,点 Switch Storage,再点击 ErashAll 按钮擦除eMMC
- 至此,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