Difference between revisions of "NanoPi R4SE/zh"
(updated by API) |
(updated by API) |
||
Line 80: | Line 80: | ||
===Compile u-boot,kernel or friendlywrt=== | ===Compile u-boot,kernel or friendlywrt=== | ||
* Refer to: | * Refer to: | ||
− | ** [https://github.com/friendlyarm/sd- | + | ** [https://github.com/friendlyarm/sd-fuse_rk3399/tree/kernel-5.15.y sd-fuse_rk3399] |
** [[How to Build FriendlyWrt]] | ** [[How to Build FriendlyWrt]] | ||
− | {{OfficialUbuntuCore/zh|NanoPi- | + | {{OfficialUbuntuCore/zh|NanoPi-R4SE}} |
+ | ===读取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> | ||
==Buildroot Linux系统的使用== | ==Buildroot Linux系统的使用== | ||
− | {{RK3399 Buildroot Intro/zh|NanoPi- | + | {{RK3399 Buildroot Intro/zh|NanoPi-R4SE}} |
<br /> | <br /> | ||
关于Buildroot系统更详细的说明,请参考: [[Buildroot/zh|Buildroot]]<br /> | 关于Buildroot系统更详细的说明,请参考: [[Buildroot/zh|Buildroot]]<br /> | ||
Line 93: | Line 180: | ||
=====版本FriendlyWrt 21.02.3===== | =====版本FriendlyWrt 21.02.3===== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | mkdir friendlywrt21- | + | mkdir friendlywrt21-rk3399 |
− | cd friendlywrt21- | + | cd friendlywrt21-rk3399 |
git clone https://github.com/friendlyarm/repo --depth 1 tools | git clone https://github.com/friendlyarm/repo --depth 1 tools | ||
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v21.02 \ | tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v21.02 \ | ||
− | -m | + | -m rk3399.xml --repo-url=https://github.com/friendlyarm/repo --no-clone-bundle |
tools/repo sync -c --no-clone-bundle | tools/repo sync -c --no-clone-bundle | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=====版本FriendlyWrt 22.03.0-rc3===== | =====版本FriendlyWrt 22.03.0-rc3===== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | mkdir friendlywrt22- | + | mkdir friendlywrt22-rk3399 |
− | cd friendlywrt22- | + | cd friendlywrt22-rk3399 |
git clone https://github.com/friendlyarm/repo --depth 1 tools | git clone https://github.com/friendlyarm/repo --depth 1 tools | ||
tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v22.03 \ | tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v22.03 \ | ||
− | -m | + | -m rk3399.xml --repo-url=https://github.com/friendlyarm/repo --no-clone-bundle |
tools/repo sync -c --no-clone-bundle | tools/repo sync -c --no-clone-bundle | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ==== | + | ====首次编译==== |
− | 下面的命令是编译不带docker的版本, 如需要编译带docker的版本, 请将''' | + | 下面的命令是编译不带docker的版本, 如需要编译带docker的版本, 请将'''rk3399.mk'''替换为'''rk3399-docker.mk''': |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | ./build.sh | + | ./build.sh rk3399.mk |
</syntaxhighlight> | </syntaxhighlight> | ||
会编译所有组件(包含u-boot, kernel 和 friendlywrt)并生成sd卡镜像文件,再执行以下命令,可生成用于安装系统到emmc运行的镜像文件(eflahser固件): | 会编译所有组件(包含u-boot, kernel 和 friendlywrt)并生成sd卡镜像文件,再执行以下命令,可生成用于安装系统到emmc运行的镜像文件(eflahser固件): | ||
Line 121: | Line 208: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
./build.sh sd-img | ./build.sh sd-img | ||
+ | </syntaxhighlight> | ||
+ | ====二次编译==== | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | cd friendlywrt | ||
+ | make menuconfig #改动FriendlyWrt的配置 | ||
+ | rm -rf ./tmp | ||
+ | make -j${nproc} | ||
+ | cd ../ | ||
+ | ./build.sh sd-img | ||
+ | ./build.sh emmc-img | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===单独编译u-boot=== | ===单独编译u-boot=== | ||
Line 141: | Line 238: | ||
===更多文档=== | ===更多文档=== | ||
* 请参考以下链接: | * 请参考以下链接: | ||
− | ** [https://github.com/friendlyarm/sd- | + | ** [https://github.com/friendlyarm/sd-fuse_rk3399 sd-fuse_rk3399] |
** [[How to Build FriendlyWrt/zh]] | ** [[How to Build FriendlyWrt/zh]] | ||
{{Template:How to Initialize and Format New SSD And HDD/zh}} | {{Template:How to Initialize and Format New SSD And HDD/zh}} | ||
==性能测试方法== | ==性能测试方法== | ||
− | === | + | ===测试网口速率=== |
====软件下载==== | ====软件下载==== | ||
Windows下可以到官网下载 iperf3测速工具: https://iperf.fr/iperf-download.php <br > | Windows下可以到官网下载 iperf3测速工具: https://iperf.fr/iperf-download.php <br > | ||
Linux系统可以用以下命令安装: sudo apt-get install iperf3<br > | Linux系统可以用以下命令安装: sudo apt-get install iperf3<br > | ||
====开始测速==== | ====开始测速==== | ||
− | + | 用网线连接电脑到Lan网口, <br> | |
电脑上打开浏览器, 进入FriendlyWrt后台页面, 进入 "服务“ -> “终端”, 登录后输入以下命令启用 iperf3 服务: <br> | 电脑上打开浏览器, 进入FriendlyWrt后台页面, 进入 "服务“ -> “终端”, 登录后输入以下命令启用 iperf3 服务: <br> | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Line 165: | Line 262: | ||
==Link to Rockchip Resources== | ==Link to Rockchip Resources== | ||
==手册原理图等开发资料== | ==手册原理图等开发资料== | ||
− | *Schematic: [https:// | + | *Schematic: [https://TODO.PDF TODO.PDF] |
− | *PCB CAD File:[https:// | + | *PCB CAD File:[https://TODO.zip TODO.zip] |
==更新日志== | ==更新日志== | ||
− | + | 首次发布 |
Revision as of 10:47, 27 July 2022
Contents
- 1 介绍
- 2 NanoPi R4SE资源特性
- 3 接口布局和尺寸
- 4 快速入门
- 5 FriendlyWrt的使用
- 5.1 FriendlyWrt简介
- 5.2 首次开机的初始化
- 5.3 帐户与密码
- 5.4 登录FriendlyWrt
- 5.5 建议的安全性设置
- 5.6 更改LAN口的IP地址
- 5.7 安全的关机操作
- 5.8 恢复出厂设置
- 5.9 安装软件包
- 5.10 FriendlyWrt的一些常见问题
- 5.11 禁用IPv6
- 5.12 配置用户按键的功能
- 5.13 配置移远EC20(4G模块)拨号上网
- 5.14 使用USB2LCD查看IP和温度
- 5.15 PWM风扇的调节
- 5.16 读取EEPROM中的Mac Address
- 5.17 如何使用USB WiFi
- 5.18 玩转Docker应用
- 5.19 挂载smbfs共享资源
- 5.20 使用sdk编译软件包
- 5.21 使用 GitHub Actions 编译 FriendlyWrt
- 5.22 Compile u-boot,kernel or friendlywrt
- 6 FriendlyCore的使用
- 7 Buildroot Linux系统的使用
- 8 如何编译系统
- 9 初始化NVME固态硬盘和USB移动硬盘
- 10 性能测试方法
- 11 Link to Rockchip Resources
- 12 手册原理图等开发资料
- 13 更新日志
1 介绍
- The NanoPi R4SE(as "R4SE") is an open source platform with dual-Gbps Ethernet ports designed and developed by FriendlyElec for IoT applications.
- 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.
2 NanoPi R4SE资源特性
- SoC: Rockchip RK3399
- CPU: big.LITTLE,Dual-Core Cortex-A72(up to 2.0GHz) + Quad-Core Cortex-A53(up to 1.5GHz)
- GPU: Mali-T864 GPU,supports OpenGL ES1.1/2.0/3.0/3.1, OpenCL, DX11, and AFBC
- VPU: 4K VP9 and 4K 10bits H265/H264 60fps decoding, Dual VOP, etc
- PMU: RK808-D PMIC, cooperated with independent DC/DC, enabling DVFS, software power-down, RTC wake-up, system sleep mode
- RAM: 4GB LPDDR4
- Flash: 32GB eMMC
- Ethernet: one Native Gigabit Ethernet, and one PCIe Gigabit Ethernet
- USB: two USB 3.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 3 x GPIO Controlled LED (SYS, LAN, WAN)
- others:
- 2 Pin 1.27/1.25mm RTC battery input connector
- one User Button
- one MASK Button for eMMC upgrade
- one 5V Fan connector
- Power supply: DC 5V/3A, via USB-C connector
- PCB: 8 Layer, 66 mm x 66 mm
- 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 R4SE新玩具,请先准备好以下硬件
- NanoPi R4SE
- MicroSD卡/TF卡: Class10或以上的 8GB SDHC卡
- 一个USB Type-C接口的外接电源,建议使用传统5V/3A及以上的电源适配器(注:部分QC/PD快速充电器可能存在兼容性问题),可选用以下或类拟规格的电源适配器:
- 如果需要开发与编译,则需要一台可以联网的电脑,推荐安装Ubuntu 18.04 64位系统,并使用下面的脚本初始化开发环境:
4.2 经测试可选用的TF卡
请参考: TF Cards We Tested
4.3 调试串口参数配置
使用以下串口参数:
波特率 | 1500000 |
数据位 | 8 |
奇偶校验 | None |
停止位 | 1 |
流控制 | None |
4.4 安装系统
4.4.1 下载系统固件
4.4.2 通过TF卡运行系统
访问此处的下载地址下载需要的固件文件(位于"01_系统固件/01_SD卡固件"目录)和烧写工具(位于"05_工具软件"目录):
固件文件 | |
rk3399-sd-friendlywrt-21.02-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 6.1.y |
rk3399-sd-friendlywrt-21.02-docker-YYYYMMDD.img.gz | 预装了Docker的FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 6.1.y |
rk3399-sd-friendlywrt-23.05-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 23.05构建,内核版本 6.1.y |
rk3399-sd-friendlywrt-23.05-docker-YYYYMMDD.img.gz | 预装了Docker的FriendlyWrt系统固件,基于OpenWrt 23.05构建,内核版本 6.1.y |
rk3399-sd-ubuntu-noble-core-arm64-4.19-YYYYMMDD.img.gz | Ubuntu24.04 精简版固件,没有桌面, 仅命令行,内核版本 4.19 |
rk3399-sd-debian-bookworm-core-4.19-arm64-YYYYMMDD.img.gz | Debian12 精简版固件,没有桌面, 仅命令行,内核版本 4.19 |
rk3399-sd-debian-bullseye-minimal-4.19-arm64-YYYYMMDD.img.gz | Debian11 系统固件,LXDE桌面, 不预装推荐软件包, 支持GPU/VPU硬件加速,内核版本 4.19.y |
rk3399-sd-debian-bullseye-desktop-4.19-arm64-YYYYMMDD.img.gz | Debian11 完整版固件,LXDE桌面, 预装推荐软件包, 支持GPU/VPU硬件加速,内核版本 4.19.y |
其他固件 | |
Github Actions云编译版本 | FriendlyWrt |
Flash Utility: | |
win32diskimager.rar | Windows utility. Under Linux users can use "dd" |
详细操作步骤如下:
- 准备一张8G或以上容量的TF卡;
- 下载并解压镜像文件 xxx.img.gz 和工具 win32diskimager;
- 在Windows下以管理员身份运行 win32diskimager,在界面上选择你的SD卡盘符,选择解压后的固件文件,点击 Write 按钮烧写到SD卡; 或者在 Linux下使用 dd 命令将 rkXXXX-sd-OSNAME-YYYYMMDD.img 写入 SD卡;
- 将SD卡从电脑端弹出,插入NanoPi-R4SE的microSD卡槽;
- 连接NanoPi-R4SE的电源,系统会从TF卡启动;
4.4.3 烧写系统到eMMC
4.4.3.1 方法1: 在网页上烧写
使用烧写了FriendlyWrt固件的TF卡启动NanoPi-R4SE, 登录FriendlyWrt页面, 在网页菜单上点击 "系统" -> "eMMC刷机助手" 进入eMMC刷机助手界面, 点击界面上的 "选择文件" 按钮, 选择你要刷写的文件 (官方固件以rk3399-sd开头), 亦可选择第三方固件, 文件支持 .gz 格式的压缩文件, 或者以 .img 作为扩展名的raw格式。
选择文件后, 点击 “上传并烧写” 按钮, 开始上传并烧写, 如下图所示:
烧写完成后,请弹出SD卡,设备会自动重启, 并从eMMC引导新系统,可留意指示灯的状态, 在系统状态灯闪烁,同时网卡状态灯亮起时,表示系统启动完成, 如果eMMC安装的系统是 FriendlyWrt, 则可以通过点击“进入首页”进入FriendlyWrt管理页面。
需要注意的是, 如果烧写的是FriendlyElec的固件, 网页烧写需要选用文件名带 "-sd-" 字样的镜像文件, 类拟如下的文件名:
rk3399-sd-friendlywrt-21.02-YYYYMMDD.img.gz |
rk3399-sd-friendlywrt-21.02-docker-YYYYMMDD.img.gz |
rk3399-sd-friendlywrt-23.05-YYYYMMDD.img.gz |
rk3399-sd-friendlywrt-23.05-docker-YYYYMMDD.img.gz |
第三方固件由于命名不规则,你需要确认的是:此固件支持从eMMC启动,如果文件格式是7z、zip或者rar格式, 需要先解压缩, 如果文件太大无法写入, 可以先压缩成 .gz 格式再尝试。
4.4.3.2 方法2: 用TF启动卡进行自动烧写
4.4.3.2.1 烧写系统固件到eMMC
- 此方法是通过SD卡启动一个小型的Linux系统, 然后自动运行一个名为EFlasher的工具来将固件烧写到eMMC中。
- 通过LED灯来掌握烧写进度。
访问此处的下载地址下载需要的固件文件(位于"01_系统固件/02_SD卡刷机固件(SD-to-eMMC)"目录)和烧写工具(位于"05_工具软件"目录):
固件文件 | |
rk3399-eflasher-friendlywrt-21.02-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 6.1.y |
rk3399-eflasher-friendlywrt-21.02-docker-YYYYMMDD.img.gz | 预装了Docker的FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 6.1.y |
rk3399-eflasher-friendlywrt-23.05-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 23.05构建,内核版本 6.1.y |
rk3399-eflasher-friendlywrt-23.05-docker-YYYYMMDD.img.gz | 预装了Docker的FriendlyWrt系统固件,基于OpenWrt 23.05构建,内核版本 6.1.y |
rk3399-eflasher-debian-bookworm-core-4.19-arm64-YYYYMMDD.img.gz | Debian12 精简版固件,没有桌面, 仅命令行,内核版本 4.19 |
rk3399-eflasher-debian-bullseye-minimal-4.19-arm64-YYYYMMDD.img.gz | Debian11 系统固件,LXDE桌面, 不预装推荐软件包, 支持GPU/VPU硬件加速,内核版本 4.19.y |
rk3399-eflasher-debian-bullseye-desktop-4.19-arm64-YYYYMMDD.img.gz | Debian11 完整版固件,LXDE桌面, 预装推荐软件包, 支持GPU/VPU硬件加速,内核版本 4.19.y |
rk3399-eflasher-ubuntu-noble-core-4.19-arm64-YYYYMMDD.img.gz | Ubuntu24.04 精简版固件,没有桌面, 仅命令行,内核版本 4.19 |
Flash Utility: | |
win32diskimager.rar | Windows utility. Under Linux users can use "dd" |
详细操作步骤如下:
- 准备一张8G或以上容量的SDHC卡;
- 下载并解压 固件文件rk3399-eflasher-OSNAME-YYYYMMDD.img.gz 和 工具win32diskimager;
- 在Windows下以管理员身份运行 win32diskimager,在界面上选择你的SD卡盘符,选择解压后的EFlasher固件,点击 Write 按钮烧写到SD卡; 或者在 Linux下使用 dd 命令将 rk3399-eflasher-OSNAME-YYYYMMDD.img 写入 SD卡;
- 将SD卡从电脑端弹出,插入NanoPi-R4SE的microSD卡槽;
- 连接NanoPi-R4SE的电源,系统会从SD卡启动,并自动启动 EFlasher 烧写工具将系统安装到 eMMC, 可以通过板载 LED 灯来了解安装进度:
进度 | SYS灯 (红灯) | LAN灯(绿灯) | WAN灯(绿灯) |
---|---|---|---|
上电开机 | 长亮 | 灭 | 灭 |
系统启动 | 慢闪 | 灭 | 灭 |
正在烧写 | 快闪 | 灭 | 灭 |
烧写完成 | 慢闪 | 长亮 | 长亮 |
- 烧写完成后,切断电源,然后从NanoPi-R4SE端弹出SD卡,重新上电开机,NanoPi-R4SE会从eMMC启动你刚刚烧写的系统;
4.4.3.2.2 烧写Flash镜像文件到eMMC
- 自动烧写(默认行为)
1) 从网盘上下载文件名带 eflasher 字样的任意固件, 解压后烧进TF卡;
2) 重新拨插一次TF卡, PC上会出现一个名为FriendlyARM的盘符(Linux下是FriendlyARM目录), 将 .img 或者 .gz结尾的固件复制进去;
3) 编辑TF卡上的 eflasher.conf 配置文件, 修改 autoStart= 后面的值指定为你的固件文件名, 例如:
autoStart=openwrt-rockchip-armv8_nanopi-ext4-sysupgrade.img.gz
支持文件名带 "-sd-" 字样的镜像文件, 如下所示:
rk3399-sd-friendlywrt-23.05-YYYYMMDD.img.gz |
rk3399-sd-friendlywrt-23.05-docker-YYYYMMDD.img.gz |
rk3399-sd-friendlywrt-21.02-YYYYMMDD.img.gz |
rk3399-sd-friendlywrt-21.02-docker-YYYYMMDD.img.gz |
4) 安全弹出TF卡, 将TF卡放在NanoPi-R4SE上上电启动, 会自动烧写你的固件, 通过板载 LED 灯来了解安装进度;
4.4.3.3 方法3: 通过USB烧写
4.4.3.3.1 步骤1: 安装USB驱动和工具
从网盘的tools目录下载瑞芯微的USB驱动: DriverAssitant_v5.12.zip, 解压后安装;
在相同目录下, 下载瑞芯微开发工具: RKDevTool_Release_v2.84.zip, 解压后备用;
4.4.3.3.2 步骤2: 将NanoPi-R4SE与电脑连接, 并进入刷机模式
1) 断开NanoPi-R4SE上连接的USB和电源线, 弹出TF卡;
2) 按住Mask按键不放, 插上电源, 保持按住Mask键, 状态灯亮起3秒后即可松开;
3) 用USB A-to-A数据线 (也叫USB公对公数据线), 将NanoPi-R4SE与电脑进行连接, 连接方法参照下图, 需要连接靠近外侧的USB端口:
4.4.3.3.3 步骤3: 烧写固件到eMMC
固件格式一般有两种格式, 一种是单个的image文件, 通常第三方固件会使用这种打包方式, 另一种是多个分区镜像, FriendlyELEC的固件采用这种方式, 下面分别对这两种格式的固件进行说明:
- 选项1: 烧写打包成单个image文件的固件
在电脑上双击 RKDevTool_Release_v2.84 目录下的 RKDevTool.exe 启动瑞芯微开发工具, 与电脑连接正常的情况下, 瑞芯微开发工具界面上会显示 "发现一个Maskrom设备";
在瑞芯微开发工具界面上, 点击 “升级固件”, 再点击 “固件” 按钮, 选择你要烧写的image文件, 点击 “升级” 然后等待烧写完成即可, 完成后设备会自动重启, 并从eMMC启动你刚刚安装的系统;
- 选项2: 烧写由多个分区镜像组成的固件
根据需要到网盘上下载对应的压缩包, 在电脑上解压:
固件文件 | |
rk3399-usb-friendlywrt-21.02-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 6.1.y |
rk3399-usb-friendlywrt-21.02-docker-YYYYMMDD.img.gz | 预装了Docker的FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 6.1.y |
rk3399-usb-friendlywrt-23.05-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 23.05构建,内核版本 6.1.y |
rk3399-usb-friendlywrt-23.05-docker-YYYYMMDD.img.gz | 预装了Docker的FriendlyWrt系统固件,基于OpenWrt 23.05构建,内核版本 6.1.y |
rk3399-usb-debian-bookworm-core-4.19-arm64-YYYYMMDD.img.gz | Debian12 精简版固件,没有桌面, 仅命令行,内核版本 4.19 |
rk3399-usb-debian-bullseye-minimal-4.19-arm64-YYYYMMDD.img.gz | Debian11 系统固件,LXDE桌面, 不预装推荐软件包, 支持GPU/VPU硬件加速,内核版本 4.19.y |
rk3399-usb-debian-bullseye-desktop-4.19-arm64-YYYYMMDD.img.gz | Debian11 完整版固件,LXDE桌面, 预装推荐软件包, 支持GPU/VPU硬件加速,内核版本 4.19.y |
rk3399-usb-ubuntu-noble-core-4.19-arm64-YYYYMMDD.img.gz | Ubuntu24.04 精简版固件,没有桌面, 仅命令行,内核版本 4.19 |
解压后, 可以看到固件目录下已内置了瑞芯微开发工具和预设好的配置文件, 双击 RKDevTool.exe 启动瑞芯微开发工具, 界面上会显示 "发现一个Maskrom设备", 点击界面上的“执行”按钮, 稍等片刻即可完成烧写, 完成后设备会自动重启, 并从eMMC启动你安装的系统;
4.5 eMMC与TF卡的启动优先级说明 (救砖办法)
默认情况下, 会优先从 TF卡启动系统, 但并不是所有条件下都是这样, 本节内容将详细说明所有情况;
引用Rockchip官方文档[1]的描述,系统引导程序(Loader)分为以下2种:
1) U-Boot TPL/SPL (即upsream U-Boot, 也叫主线U-Boot)
2) Rockchip MiniLoader
需要留意的是:
1) FriendlyELEC发布的所有Rom均采用的都是第2种,即Rockchip MiniLoader
2) 第三方固件通常采用的是第1种, 即 U-Boot TPL/SPL
以下情况将总是从 eMMC 启动 (意味着无法通过TF卡烧写系统了):
1) 如果eMMC里的系统, 或者TF卡里的系统是采用第一种Loader类型U-Boot TPL/SPL的, 上电将总是从 eMMC启动;
2) eMMC内的系统并没有适配NanoPi-R4SE, 也就是说Loader压根就是坏的;
这时, 可以用如下方法让NanoPi-R4SE从TF卡启动系统, 进行系统重装或Flash擦除:
1) 插入一张烧写有FriendlyWrt系统的TF卡 (制作方法请参考上面的章节);
2) 按下Maskrom按键, 并上电开机 (或短接Maskrom触点);
3) 重要: 上电后默数4秒左右立即松开Maskrom按键;
4) NanoPi-R4SE将会从TF卡启动FriendlyWrt系统;
5) 用网线连接电脑到NanoPi-R4SE的LAN网口, 在电脑上输入网址 http://192.168.2.1 进入FriendlyWrt管理页面, 使用系统菜单中的eMMC刷机工具重新烧写系统到 eMMC;
6) 如果你仅仅想清除eMMC上的数据, 可以上传一个内容全是零的img文件刷进eMMC, 该文件在电脑上可以用如下命令生成, 因eMMC刷机工具在烧写系统时会先对eMMC进行全面擦除, 所以img文件的大小是不重要的:
dd if=/dev/zero of=~/empty.img bs=8M count=1
或者, 进入命令终端, 输入以下命令尝试清除eMMC上的 Loader:
dd if=/dev/zero of=/dev/mmcblk2 bs=8M count=25
常见问题:
如果用TF卡启动系统后,发现系统检测不到eMMC,可能的原因是上电后按下Markrom键太长时间, 正确方法是按住4秒立即松开;
请确认你使用了最新固件(日期2022-07-25之后的固件), 然后重新操作一次;
总结如下:
eMMC当前系统 | TF卡当前系统 | 启动优先级 |
---|---|---|
无系统 | 任意固件 | TF卡 |
FriendlyELEC的固件 | FriendlyELEC的固件 | TF卡 |
FriendlyELEC的固件 | 采用主线U-boot的固件 | eMMC |
采用主线U-boot的固件 | FriendlyELEC的固件 | eMMC |
采用主线U-boot的固件 | 采用主线U-boot的固件 | eMMC |
5 FriendlyWrt的使用
5.1 FriendlyWrt简介
FriendlyWrt是友善电子基于OpenWrt定制的系统,完全开源,用于企业物联网二次开发,个人定制NAS等。
5.2 首次开机的初始化
首次上电开机,系统需要做以下一些初始化工作:
1)扩展根文件系统
2)初始化设置(会执行/root/setup.sh)
所以第一次开机需要等待片刻(约2~3分钟),再对FriendlyWrt进行设置,可以在openwrt网页上进入ttyd终端,当提示符显示为 root@FriendlyWrt 表示系统已经初始化完成。
root@FriendlyWrt
5.3 帐户与密码
默认的密码是password(某些版本是空密码),请设置或更改一个较安全的密码用于web登录与ssh登录,建议在将NanoPi-R4SE连接到互联网之前完成此设置。
5.4 登录FriendlyWrt
将电脑连接到 NanoPi-R4SE 的LAN口,如果电脑没有网口,可将无线AP的LAN口与NanoPi-R4SE的LAN口相连接,电脑再通过WiFi连接到无线AP,在电脑浏览器上输入以下网址即可进入FriendlyWrt管理页面:
- http://friendlywrt/
- http://192.168.2.1/
- http://[fd00:ab:cd::1]
以上是NanoPi-R4SE的LAN口地址,WAN口会从你的主路由器动态获取IP地址。
5.5 建议的安全性设置
以下设置事项非常建议在将 NanoPi-R4SE 接入互联网之前完成,因为在空密码或弱密码的状态下将NanoPi-R4SE接入互联网,极易受到网络攻击。
- 设置一个安全的密码
进入 系统->管理权 界面设置密码。
- 禁止从wan访问ssh,更换端口
进入 系统->管理权->SSH访问,将接口限制为 lan,将端口设置为其他非常用端口,例如 23333。
- 检查防火墙设置
根据实际情况调整设置
5.6 更改LAN口的IP地址
1) 菜单栏导航到:"网络" -> "接口", 点击“LAN”右边的“编辑”按钮;
2) 在“常规设置”页面上找到“IPv4 地址”, 输入新的IP地址 (例如192.168.11.1), 然后点击“保存”, 再点击“保存并应用”;
3) 在弹出的“连接更改“询问界面上, 选择"Apply and revert on connectivity loss";
4) 稍等片刻, 在电脑的浏览器上输入新的地址登录 FriendlyWrt;
5.7 安全的关机操作
进入"服务"->"终端",输入poweroff命令敲回车,待led灯熄灭,再拔开电源。
5.8 恢复出厂设置
进入"系统"->"备份/升级",点击“执行重置“按钮,在弹出的询问界面上点击“确定”,设备会重启并擦除data分区, 所有的设置和数据都会被清除, 并恢复至出厂时的状态。
恢复出厂设置也可以通过命令行来操作, 进入“服务”-》“终端”界面, 输入如下命令:
firstboot && reboot
5.9 安装软件包
5.9.1 设置第三方软件源
进入菜单”系统“-》”软件包“, 在界面上点击”okpg配置“按钮, 在新弹出的界面上, 更改/etc/opkg/distfeeds.conf的文件内容即可,
比如要切换至国内腾讯源, 可以替换成如下内容, 然后点击 “保存” 按钮:
src/gz openwrt_base https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_cortex-a53/base src/gz openwrt_luci https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_cortex-a53/luci src/gz openwrt_packages https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_cortex-a53/packages src/gz openwrt_routing https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_cortex-a53/routing src/gz openwrt_telephony https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_cortex-a53/telephony src/gz friendlywrt_packages file://opt/packages
- 注意, friendlywrt_packages需要保留, 否则会缺少一些系统依赖;
- 如果你使用的是 friendlywrt 21.02 的固件, 则将上面的 23.05.2 替换成 21.02.5;
- CPU架构可选择 aarch64_cortex-a53和aarch64_generic这两种;
- 通过命令行切换国内源:
sed -i -e 's/downloads.openwrt.org/mirrors.cloud.tencent.com/g' /etc/opkg/distfeeds.conf opkg update
5.9.2 在线安装软件包
回到”软件包“界面, 点击 “更新列表” 更新软件包信息, 更新完成后, 就可以在“筛选器”一栏中输入软件包的关键字, 搜索软件包安装了。
5.9.3 安装离线ipk软件包
在”软件包“界面上点击“上传软件包“, 定位你本地的ipk文件, 上传并安装即可。
5.10 FriendlyWrt的一些常见问题
- 无法拨号上网
- 进入“网络“->“防火墙“,将 “WAN区域“ 的“入站数据“,“出站数据“与“转发“均设置为 “接受”;
- 如仍无法上网,可尝试关闭IPV6;
- 拨号成功,但没有外网流量
- 进入"服务"->"终端",输入fw4 reload尝试重新加载一次防火墙设置;
- 无法开机,LED灯不亮
- 尝试更换电源适配器和电缆,推荐使用 5V/2A 以上规格的电源供应;
- 注意,部分Type-C接口的快速充电器会有延迟,可能需要几秒钟才开始提供电量;
- 做二级路由时,电脑无法连接互联网
- 如果你的主网络是IPv4,而NanoPi-R4SE工作在IPv6,电脑有可能无法连接互联网,建议关闭IPv6 (本WiKi后面有介绍方法),或将主路由切换到IPv6;
- 如果你有问题,或有更好的建议,欢迎发送邮件到 techsupport@friendlyarm.com;
5.11 禁用IPv6
要关掉 IPv6,可在ssh终端输入如下命令:
. /root/setup.sh disable_ipv6 reboot
待NanoPi-R4SE重启完毕,电脑也需要重新插拨一下网线(或重启网络端口)以便重新获得IP地址。
5.12 配置用户按键的功能
默认情况下, 用户按键配置成用于重启设备(软重启), 如下所示:
echo 'BTN_1 1 /sbin/reboot' >> /etc/triggerhappy/triggers.d/example.conf
你可以通过更改上面的配置文件改变它的行为.
5.13 配置移远EC20(4G模块)拨号上网
- 进入“网络“->“接口“;
- 点击 “WAN6“ 后面的 “删除“, 点击 "保存及应用";
- 点击 “WAN“ 后面的 “编辑“,在 “设备“ 下拉选单中选择 "以太网适配器:wwan0",在“协议”下拉选单中选择“QMI蜂窝”,然后点击“切换协议“;
- 在“调制解调器设备“下拉选单中选择”/dev/cdc-wdm0“,如果是中国联通,在“APN“中填入3gnet,如果是中国移动则填入cmnet,填写完成后,如下图所示:
- 点击“保存”关闭界面,最后点击下方的“保存并应用",FriendlyWrt后台会进行拨号上网,拨号成功的状态如下所示:
- 连接到Lan的设备将可以连接互联网,如有WiFi模块,可进入“无线”界面开启无线AP功能,通过无线接入的设备亦可连接到互联网。
5.14 使用USB2LCD查看IP和温度
在终端输入如下命令设置lcd2usb服务开机自动启动:
. /root/setup.sh init_lcd2usb poweroff
将USB2LCD模块Plug到 NanoPi-R4SE 的USB接口再开机,IP地址和CPU温度将显示在LCD上:
5.15 PWM风扇的调节
(注:本章节的内容基于2021/08/31之后发布的固件,内核版本 kernel 5.10.xyz)
- 当前PWM风扇的默认行为是: 上电开机稍等片刻(约20秒),风扇会先自动旋转约5秒时间,之后的行为,是由内核驱动,根据CPU温度来决定风扇的开关以及转速。
- 可以通过修改以下脚本:/usr/bin/fa-fancontrol.sh 来更改风扇的行为,例如要修改风扇开始工作时的CPU温度,可以修改以下两行:
echo 50000 > trip_point_3_temp # 表示CPU温度到达50度时,风扇开始工作在最低转速 echo 55000 > trip_point_4_temp # 表示CPU温度到达55度时,风扇升至第二档及以上转速运行,并根据CPU降温情况自动调节至最高档(第4档),或降低转速
- 如果需要调整各个档位的转速,可以修改内核dts文件,并重新编译内核来达到目的,具体的 dts 及修改位置可参考如下commit: https://github.com/friendlyarm/kernel-rockchip/commit/f74ac319f02e2d22cdd33227e7f167e4232809f9
如下如示,cooling-levels 定义了4个档位,0为关闭,最高档的值为255:
fan: pwm-fan { compatible = "pwm-fan"; - /* FIXME: adjust leveles for the connected fan */ - cooling-levels = <0 12 18 255>; + cooling-levels = <0 18 102 170 255>;
- 如你使用的内核版本是 4.19.xyz,此时的风扇是由应用层操作PWM来实现温控的,上述的内容不适用,需要去修改这个脚本:
/usr/bin/fa-fancontrol-direct.sh
5.16 读取EEPROM中的Mac Address
5.16.1 命令行读取
先安装i2c工具, 用如下命令:
opkg install i2c-tools
然后通过如下命令可以读取EEPROM中的Mac Address, 仅适用于有EEPROM芯片的型号:
sudo i2ctransfer -y 2 w1@0x51 0xfa r6
会输出类拟如下格式的Mac Address:
0x68 0x27 0x19 0xa5 0x2d 0xdf
如果命令出错, 则表示没有内建EEPROM芯片.
5.17 如何使用USB WiFi
5.17.1 如何在终端使用命令查询USB无线网卡型号
(1) 点击“服务>ttyd”进入FriendlyWrt的命令行界面
(2) 在开发板没有插入任何USB设备时输入以下命令以查看挂在USB主线上的现有设备
lsusb
(3) 插入USB WiFi,再次输入以下命令
lsusb
可以看到多出一个设备,ID为0BDA:C811
(4) 以“0BDA:C811”或“VID_0BDA&PID_C811”作为关键词在搜索引擎上搜索,搜索结果显示VID_0BDA&PID_C811的对应WIFI芯片为Realtek 8811CU
5.17.2 如何使用USB WiFi作为AP
(1) 把USB WiFi插入NanoPi-R4SE的USB端口,推荐使用以下列表中支持AP模式的WiFi芯片模块:
注:符合以上WiFi芯片型号并符合以上VID&PID信息的USB无线网卡都可以使用,支持的型号不局限于某个品牌某个型号
(2) 插入USB WiFi后,点击上方菜单栏的“系统>重启”,点击“执行重启”按钮重启NanoPi-R4SE
(3) 点击“网络>无线”进入配置无线WiFi界面
(4) 点击“编辑”按钮可编辑WiFi设置
(5) 在“接口配置”中可设置WiFi 模式和SSID等,然后点击到“无线安全”项可修改加密方式和WiFi密码,默认密码为password,设置完成后点击“保存”
(4) 配置完成后使用手机端或电脑端搜索对应SSID的WiFi即可
5.17.3 常见的USB WiFi问题及应对方法
1) 建议在关机状态下插入usb wifi, 再上电开机,FriendlyWrt会自动生成配置文件 /etc/config/wireless,如果没有生成,通过 ifconfig -a 看看有没有 wlan0,如果没有 wlan0,通常是没有驱动。
2) 如果 ifconfig -a 能看到 wlan0,但是热点没有正常工作,可以尝试更改 频道 和 国家代号,不合适的国家代号也会导致 WiFi 不工作。
3) 某些USB WiFi(例如MTK MT7662)默认工作在CD-ROM模式,需要经过usb_modeswitch来进行切换,可以尝试自行添加 usb_modeswitch 配置到以下目录:/etc/usb_modeswitch.d 。
5.17.4 更改系统默认的WiFi热点配置
FriendlyWrt默认会为USB WiFi设置国家、热点名称等参数,目的是尽量的做到即插即用,但这不能保证所有的模块都能兼容此设置,你可以通过修改以下文件,来更改这些行为:
/lib/wifi/mac80211.sh
5.18 玩转Docker应用
5.18.1 Docker使用:安装JellyFin影音服务器
请参考: How to setup JellyFin media system on NanoPi-R2S/zh
5.18.2 Docker使用:安装个人网盘nextcloud
mkdir /nextcloud -p docker run -d -p 8888:80 --name nextcloud -v /nextcloud/:/var/www/html/ --restart=always --privileged=true arm64v8/nextcloud
安装完成后,使用8888端口进行访问。
5.18.3 使用外接硬盘来扩展Docker可用空间
- 先停止docker服务:
/etc/init.d/dockerd stop
- 把原来的/opt目录改个名, 建一个空的/opt目录:
mv /opt /opt-old && mkdir /opt
- 参考章节“8 初始化NVME固态硬盘和USB移动硬盘”, 将你的硬盘格式化为ext4, 然后挂载至 /opt 目录:
- 输入命令 "mount | grep /opt" 确实一下硬盘被正常挂载到 /opt 下:
root@FriendlyWrt:~# mount | grep /opt /dev/nvme0n1p1 on /opt type ext4 (rw,relatime) root@FriendlyWrt:~#
- 把原来 /opt 目录下的文件复制到新的 /opt 目录:
cp -af /opt-old/* /opt/ && rm -rf /opt-old
- 操作完后, 重启
reboot
- 重启后, 进入"Docker"->"概览"页面, 查看"Docker根目录"这一行的信息, 可以确认Docke空间已扩容:
5.18.4 Docker的常见问题与解决办法
5.18.4.1 无法访问Docker提供的网络服务
解决办法:
- 进入 "防火墙" 的设置,把 "转发" 设置成 "接受";
- 关闭 ”软件流量分载“;
5.19 挂载smbfs共享资源
mount -t cifs //192.168.1.10/shared /movie -o username=xxx,password=yyy,file_mode=0644
5.20 使用sdk编译软件包
5.20.1 安装编译环境
在64位的Ubuntu (版本18.04+)下载并运行如下脚本: How to setup the Compiling Environment on Ubuntu bionic
5.20.2 在网盘上下载并解压sdk
sdk位于网盘的toolchain目录,解压后,需要先下载feeds软件包:
tar xvf openwrt-sdk-*-rockchip-armv8_gcc-11.2.0_musl.Linux-x86_64.tar.xz # 路径太长会导致有些包编译出错,所以这里改一下目录名 mv openwrt-sdk-*-rockchip-armv8_gcc-11.2.0_musl.Linux-x86_64 sdk cd sdk ./scripts/feeds update -a ./scripts/feeds install -a
5.20.3 将软件包编译并打包成ipk文件
此处以mwarning的示例作为演示,下载例子的源代码(共3个分别为example1, example2, example3),并拷到package目录:
git clone https://github.com/mwarning/openwrt-examples.git cp -rf openwrt-examples/example* package/ rm -rf openwrt-examples/
再通过以下命令进入配置菜单:
make menuconfig
在菜单中选中以下我们要编译的软件包(默认实际上已经选中):
"Utilities" => "example1" "Utilities" => "example3" "Network" => "VPN" => "example2"
退出配置菜单的界面,在提示是否保存设置时需要选择Yes,然后执下以下命令,分别编译这三个软件包:
make package/example1/compile V=99 make package/example2/compile V=99 make package/example3/compile V=99
编译成功后,可以在bin目录下找到ipk文件,如下所示:
$ find ./bin -name example*.ipk ./bin/packages/aarch64_generic/base/example3_1.0.0-220420.38257_aarch64_generic.ipk ./bin/packages/aarch64_generic/base/example1_1.0.0-220420.38257_aarch64_generic.ipk ./bin/packages/aarch64_generic/base/example2_1.0.0-220420.38257_aarch64_generic.ipk
5.20.4 将编译生成的ipk安装到NanoPi上
可以用scp命令将ipk文件上传到NanoPi上:
cd ./bin/packages/aarch64_generic/base/ scp example*.ipk root@192.168.2.1:/root/
然后用opkg命令进行安装他们:
cd /root/ opkg install example3_1.0.0-220420.38257_aarch64_generic.ipk opkg install example1_1.0.0-220420.38257_aarch64_generic.ipk opkg install example2_1.0.0-220420.38257_aarch64_generic.ipk
5.21 使用 GitHub Actions 编译 FriendlyWrt
项目地址: https://github.com/friendlyarm/Actions-FriendlyWrt
5.22 Compile u-boot,kernel or friendlywrt
- Refer to:
6 FriendlyCore的使用
6.1 FriendlyCore默认帐户
- 普通用户:
用户名: pi 密码: pi
- Root用户:
用户名: Root用户: 密码: fa
6.2 更新软件包
$ sudo apt-get update
6.3 配置网络
6.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
6.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
6.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
6.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。
6.4.1 重点支持的WIFI型号
6.4.1.1 M.2 WiFi Module
- RTL8822CE
6.4.1.2 Usb Dongle
- RTL8821CU (Vid: 0BDA, Pid: C811) (测试样品:TP-Link TL-WDN5200H)
- RTL8812AU (Vid: 0BDA, Pid: 8812)
- MediaTek MT7662 (Vid: 0E8D, Pid: 7612) (测试样品:COMFAST CF-WU782AC V2)
6.5 安装内核头文件
sudo dpkg -i /opt/linux-headers-*.deb
6.6 编译内核头文件安装包
6.7 配置状态灯
先确定一下系统是否已经存在leds初始化的服务:
sudo systemctl status leds
如果已经存在leds服务, 则通过编辑如下文件改变状态灯的默认行为:
/etc/init.d/leds.sh
早期的固件由于没有leds服务, 需要参考以下指南手动配置状态灯, 首先, 设置开机自动加载以下内核模块:
modprobe ledtrig-netdev echo ledtrig-netdev > /etc/modules-load.d/ledtrig-netdev.conf
下面的脚本代码将状态灯与网卡相关联, 需要加入到开机自动运行的脚本中:
echo netdev > /sys/class/leds/wan_led/trigger echo eth0 > /sys/class/leds/wan_led/device_name echo 1 > /sys/class/leds/wan_led/link echo netdev > /sys/class/leds/lan_led/trigger echo eth1 > /sys/class/leds/lan_led/device_name echo 1 > /sys/class/leds/lan_led/link
6.8 读取EEPROM中的Mac Address
6.8.1 命令行读取
先安装i2c工具, 用如下命令:
sudo apt-get update sudo apt-get install i2c-tools
然后通过如下命令可以读取EEPROM中的Mac Address, 仅适用于有EEPROM芯片的型号:
sudo i2ctransfer -y 2 w1@0x51 0xfa r6
会输出类拟如下格式的Mac Address:
0x68 0x27 0x19 0xa5 0x2d 0xdf
如果命令出错, 则表示没有内建EEPROM芯片.
6.8.2 程序中读取
安装libi2c:
sudo apt-get install libi2c0:arm64 cd /lib/aarch64-linux-gnu/ sudo ln -s libi2c.so.0 libi2c.so
新建源代码getmac.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; }
编译并运行:
root@FriendlyELEC:~# gcc getmac.c -li2c -o getmac root@FriendlyELEC:~# ./getmac macaddress: 68:27:19:a5:2d:df
7 Buildroot Linux系统的使用
Buildroot是Linux平台上一个构建嵌入式Linux系统的框架,由Makefile脚本和Kconfig配置文件构成,旨在简化系统制作步骤,可实现一站式生成可烧写的系统固件,最终的固件包含boot-loader、kernel和rootfs,以及rootfs中的各种库和应用程序 (例如qt, gstreamer, busybox等)。
由 FriendlyELEC 提供的 Buildroot 项目是基于Rockchip原厂的 linux-sdk 制作, 项目使用 git 管理,与原厂的linux sdk更新保持同步;
- Rockchip原厂Buildroot项目: https://github.com/rockchip-linux/buildroot
- Buildroot官网: https://buildroot.org
关于Buildroot系统更详细的说明,请参考: Buildroot
8 如何编译系统
8.1 编译 Openwrt/Friendlywrt
8.1.1 下载源代码
FriendlyWrt有两个版本, 请根据需要进行选择.
8.1.1.1 版本FriendlyWrt 21.02.3
mkdir friendlywrt21-rk3399 cd friendlywrt21-rk3399 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 rk3399.xml --repo-url=https://github.com/friendlyarm/repo --no-clone-bundle tools/repo sync -c --no-clone-bundle
8.1.1.2 版本FriendlyWrt 22.03.0-rc3
mkdir friendlywrt22-rk3399 cd friendlywrt22-rk3399 git clone https://github.com/friendlyarm/repo --depth 1 tools tools/repo init -u https://github.com/friendlyarm/friendlywrt_manifests -b master-v22.03 \ -m rk3399.xml --repo-url=https://github.com/friendlyarm/repo --no-clone-bundle tools/repo sync -c --no-clone-bundle
8.1.2 首次编译
下面的命令是编译不带docker的版本, 如需要编译带docker的版本, 请将rk3399.mk替换为rk3399-docker.mk:
./build.sh rk3399.mk
会编译所有组件(包含u-boot, kernel 和 friendlywrt)并生成sd卡镜像文件,再执行以下命令,可生成用于安装系统到emmc运行的镜像文件(eflahser固件):
./build.sh emmc-img
对项目进行过修改后, 需要重新打包sd卡镜像, 可执行如下命令:
./build.sh sd-img
8.1.3 二次编译
cd friendlywrt make menuconfig #改动FriendlyWrt的配置 rm -rf ./tmp make -j${nproc} cd ../ ./build.sh sd-img ./build.sh emmc-img
8.2 单独编译u-boot
./build.sh uboot
8.3 单独编译kernel
./build.sh kernel
8.4 单独编译friendlywrt
./build.sh friendlywrt
或者进入friendlywrt目录, 按标准openwrt的命令操作, 上面的命令出现错误时, 可尝试使用以下命令单线程编译:
cd friendlywrt make -j1 V=s
8.5 更多文档
9 初始化NVME固态硬盘和USB移动硬盘
9.1 检查是否检测到了硬盘
安装好硬盘后, 上电开机, 在终端上输入以下命令:
cat /proc/partitions
看到有 nvme0n1 设备的节点,说明NVME固态硬盘已经成功被识别到了:
major minor #blocks name 1 0 4096 ram0 259 0 125034840 nvme0n1
看到有 sda 设备的节点,说明USB移动硬盘已经成功被识别到了:
179 105 30646767 mmcblk0p9 8 0 3907018584 sda 8 1 3907017543 sda1
9.2 给硬盘重新分区并格式化为ext4格式
为了简化操作, 我们会将硬盘整个空间分成一个分区, 如果你用的是NVME固态硬盘, 输入以下命令进行操作:
(echo g; echo n; echo p; echo 1; echo ""; echo ""; echo w; echo q) | fdisk /dev/nvme0n1 mkfs.ext4 /dev/nvme0n1p1
如果要对USB移动硬盘进行操作, 输入以下命令:
(echo g; echo n; echo p; echo 1; echo ""; echo ""; echo w; echo q) | fdisk /dev/sda mkfs.ext4 /dev/sda1
9.3 硬盘的自动挂载
9.3.1 在FriendlyWrt系统下挂载
在FriendlyWrt菜单中, 点击"系统"->"挂载点"界面, 在页面底部的"挂载点"的区域中, 点击"新增"按钮, 在UUID一栏中,选择你的硬盘分区, NVME固态硬盘选择 /dev/nvme0n1p1, 如果是USB移动硬盘, 则选择 /dev/sda1, 然后钩选"已启动“, 填写挂载硬盘的目标位置, 本例中选择将 NVME固态硬盘 挂载到 /mnt 目录, 如下图所示:
点击"Save"按钮保存设置, 挂载完成后界面会列出所挂载的硬盘, 如下图所示:
9.3.2 在FriendlyCore系统下挂载
首先,我们需要了解分区的Block ID,用blkid查看, NVME固态硬盘输入如下命令查看:
blkid /dev/nvme0n1p1
USB移动固态硬盘输入如下命令查看:
blkid /dev/sda1
输入信息如下所示, 我们需要的是UUID:
/dev/sda1: UUID="de29e869-f442-414a-8dc4-9c47c05b229f" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="b026f952-01"
然后需要把 UUID 添加到 /etc/fstab 文件中去,为了挂载本例中使用的硬盘,/etc/fstab内容如下所示:
UUID=de29e869-f442-414a-8dc4-9c47c05b229f /media/mydisk ext4 defaults 0 0
硬盘将挂载到 /media/mydisk 目录,这个目录默认是不存在的,我们用以下命令手动创建它,并设置为普通用户可以读写:
mkdir -p /media/mydisk chmod 777 /media/mydisk
接下来就可以输入mount命令,测试一下是否能正常挂载了:
mount /media/mydisk
如果成功挂载, 接下来我们关机测试一下,看下次开机是否会自动挂载:
reboot
9.4 为硬盘设置网络共享
9.4.1 提升硬件挂载目录的权限
为了方便普通用户的读取, 进入终端, 输入以下命令先提升硬件挂载目录的权限:
chmod 777 /mnt
9.4.2 FriendlyWrt下设置网络共享
进入 “服务” -> "网络共享" 菜单, 在页面底部的 “共享目录” 区域, 点击 “新增” 按钮, 分别填写 "名称" 与 "路径" 为 mnt 和 /mnt, 其他默认, 点击 "保存并应用" 即可.
9.4.3 在电脑上访问共享
在Windows电脑上输入以下地址访问共享目录:
\\192.168.2.1\mnt
在Ubuntu/Mac电脑上使用以下地址访问共享目录:
smb://192.168.2.1/mnt
在询问身份验证时, 输入如下信息:
连接方式: 已注册用户
用户名: root
域: WORKGROUP
密码: password
9.5 本机上进行硬盘速度测试
9.5.1 NVME固态硬盘速度测试
9.5.1.1 写入速度
测试命令:
dd if=/dev/zero of=/mnt/deleteme.dat bs=32M count=64 oflag=direct,nonblock
结果如下:
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 6.74925 s, 318 MB/s
9.5.1.2 读取速度
测试命令:
dd if=/mnt/deleteme.dat of=/dev/null bs=32M count=64 iflag=direct,nonblock
结果如下:
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 5.18329 s, 414 MB/s
9.5.2 USB移动机械硬盘速度测试
9.5.2.1 写入速度
测试命令:
dd if=/dev/zero of=/mnt/deleteme.dat bs=32M count=64 oflag=direct,nonblock
结果如下:
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 20.3973 s, 105 MB/s
9.5.2.2 读取速度
测试命令:
dd if=/mnt/deleteme.dat of=/dev/null bs=32M count=64 iflag=direct,nonblock
结果如下:
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 18.9168 s, 114 MB/s
10 性能测试方法
10.1 测试网口速率
10.1.1 软件下载
Windows下可以到官网下载 iperf3测速工具: https://iperf.fr/iperf-download.php
Linux系统可以用以下命令安装: sudo apt-get install iperf3
10.1.2 开始测速
用网线连接电脑到Lan网口,
电脑上打开浏览器, 进入FriendlyWrt后台页面, 进入 "服务“ -> “终端”, 登录后输入以下命令启用 iperf3 服务:
iperf3 -s -i 2
再打开电脑的终端, 输入以下命令开始测试RX速率:
iperf3 -c 192.168.2.1 -i 2 -t 30 -P4
输入以下命令开始测试TX速率:
iperf3 -c 192.168.2.1 -i 2 -t 30 -P4 -R
11 Link to Rockchip Resources
12 手册原理图等开发资料
13 更新日志
首次发布