NanoPi M6/zh
Contents
- 1 介绍
- 2 硬件特性
- 3 接口布局和尺寸
- 4 快速入门
- 5 Ubuntu 22.04 桌面系统的使用
- 5.1 Ubuntu 22.04桌面系统简介
- 5.2 Account & Password
- 5.3 帐户与密码
- 5.4 查看IP地址
- 5.5 通过ssh登录Ubuntu
- 5.6 更新软件包
- 5.7 安装软件中心
- 5.8 安装内核头文件
- 5.9 更改时区
- 5.10 更换开机LOGO和桌面墙纸
- 5.11 开机自动启动程序(例如Firefox)
- 5.12 取消USB存储设备自动挂载
- 5.13 设置中文语言与输入法
- 5.14 硬解播放视频
- 5.15 安装Plex多媒体服务器
- 5.16 安装Docker
- 5.17 取消桌面的自动登录
- 5.18 设置WiFi无线链接
- 5.19 测试OpenGL ES性能
- 5.20 Chromium网页浏览器
- 6 Android系统的使用
- 7 Debian11 桌面系统的使用
- 7.1 Debian11桌面系统简介
- 7.2 帐户与密码
- 7.3 查看IP地址
- 7.4 通过ssh登录Debian
- 7.5 更新软件包
- 7.6 安装x11vnc远程桌面
- 7.7 安装内核头文件
- 7.8 更改时区
- 7.9 更换开机LOGO和桌面墙纸
- 7.10 开机自动启动程序(例如Kodi)
- 7.11 取消USB存储设备自动挂载
- 7.12 设置中文语言与输入法
- 7.13 安装Plex多媒体服务器
- 7.14 在Debian系统上安装Docker
- 7.15 如何测试NPU
- 7.16 设置WiFi无线链接
- 7.17 取消自动登录
- 7.18 测试OpenGL ES性能
- 7.19 设置HDMI/DP屏幕分辨率
- 7.20 设置HiDPI屏幕缩放
- 7.21 调节HDMI边界
- 7.22 Chromium网页浏览器
- 7.23 测试mpp视频硬件编码
- 8 OpenMediaVault NAS系统的使用
- 9 FriendlyCore的使用
- 10 安装第三方Armbian系统
- 11 如何编译系统
- 12 板载资源的使用
- 13 备份文件系统并创建SD映像(将系统及应用复制到另一块开发板)
- 14 初始化NVME固态硬盘和USB移动硬盘
- 15 Linux操作系统的常见操作
- 16 救砖办法
- 17 Link to Rockchip Resources
- 18 手册原理图等开发资料
- 19 更新日志
1 介绍
NanoPi M6(简称”M6”)是友善电子团队设计出品的一款开源高性能一体化边缘计算平台。它采用瑞芯微RK3588S作为主控处理器, 配备 64-bits LPDDR5内存,以及可选的eMMC闪存模块,支持运行FriendlyWrt, Android, Debian和Ubuntu等多种系统, 并支持GPU和VPU加速。
M6接口丰富,布局紧凑,主板尺寸只有 90x62 mm,它带有30Pin GPIO,其中包含普通I/O口、I2C、I2S、PWM和SPI等接口, 还带有1个HDMI输出接口,可解码播放最高8K@60fps H.265/VP9, 以及8K@30fps H264等格式视频。
M6还带有1个M.2 NVME固态硬盘接口,以及和1个USB3.0和2个USB2.0接口,并支持当前流行的PD快充电源供电(USB C接口),外接移动硬盘时无需担心供电不足, 另外可选配安装一体化CNC氧化铝外壳。
简言之,M6非常适合企业客户定制开发自己专属的系统,并适合嵌入式爱好者发掘、探索打造自己独具一格的玩法。
2 硬件特性
- 主控: 瑞芯微 RK3588S
- CPU: Quad-core ARM Cortex-A76(up to 2.4GHz) and quad-core Cortex-A55 CPU (up to 1.8GHz)
- GPU: Mali-G610 MP4, compatible with OpenGLES 1.1, 2.0, and 3.2, OpenCL up to 2.2 and Vulkan1.2
- VPU: 8K@60fps H.265 and VP9 decoder, 8K@30fps H.264 decoder, 4K@60fps AV1 decoder, 8K@30fps H.264 and H.265 encoder
- NPU: 6TOPs, supports INT4/INT8/INT16/FP16
- 内存: 64-bit LPDDR5 at 2400MHz
- 闪存: 可选eMMC模块, at HS400 mode
- 以太网: 一个原生千兆以太网RJ45接口
- USB: 1x USB 3.0 Type-A and 2x USB 2.0 Type-A
- M.2 Connectors
- one M.2 M-Key connector with PCIe 2.1 x1 for SSDs
- one M.2 E-key connector with PCIe 2.1 x1 and USB2.0 Host for Wi-Fi&BT
- microSD: support up to SDR104 mode
- MIPI输入:
- 1x 4-lane MIPI-CSI V1.2
- 1x 4-lane MIPI-CSI D/C PHY
- 视频输出:
- 1x Standard HDMI output ports
- compatible with HDMI2.1, HDMI2.0, and HDMI1.4 operation
- support displays up to 7680x4320@60Hz
- Support RGB/YUV(up to 10bit) format
- 2x 4-lane MIPI-DSI, compatible with MIPI DPHY 2.0 or CPHY 1.1
- 1x Standard HDMI output ports
- 音频接口:
- 1x 3.5mm 立体声耳机接口
- 1x 2.0mm PH-2A 模拟麦克风接口
- GPIO:
- 30-pin 2.54mm header connector
- up to 1x SPI, 6x UARTs, 3x I2Cs, 1x SPDIFs, 4x PWMs, 20x GPIOs
- Debug: UART via 3-Pin 2.54mm header
- LEDs: 2 x GPIO Controlled LED (SYS, LED1)
- others:
- 2 Pin 1.27/1.25mm RTC battery input connector for low power RTC IC HYM8563TS
- Buttons: MASK, Reset, Recovery, Power
- one 5V Fan connector
- Power supply: USB-C, 支持6V~20V PD或DC供电,
- PCB: 8 Layer, 62x90x1.6mm
- Ambient Operating Temperature: 0℃ to 70℃
3 接口布局和尺寸
3.1 接口布局
- 30-pin GPIO
Pin# Assignment Pin# Assignment 1 VCC_3V3_S3* 2 VCC_5V0* 3 I2C8_SDA_M2 4 VCC_5V0* 5 I2C8_SCL_M2 6 GND 7 GPIO4_B0/UART8_TX_M0 8 GPIO3_C4/UART5_TX_M1 9 GND 10 GPIO3_C5/UART5_RX_M1 11 GPIO4_B1/UART8_RX_M0 12 GPIO4_B3/UART8_CTSN_M0_PWM15_M1 13 GPIO4_A3/UART0_RX_M0 14 GND 15 GPIO4_A4/UART0_TX_M0 16 GPIO0_D4/I2C1_SCL_M2/PWM3_IR_M0 17 VCC_3V3_S3* 18 GPIO0_D5/I2C1_SDA_M2 19 GPIO1_B2/SPI0_MOSI_M2/UART4_RX_M2 20 GND 21 GPIO1_B1/SPI0_MISO_M2 22 GPIO4_B2/UART8_RTSN_M0_PWM14_M1 23 GPIO1_B3/SPI0_CLK_M2/UART4_TX_M2 24 GPIO1_B4/SPI0_CS0_M2/UART7_RX_M2 25 GND 26 GPIO1_B5/SPI0_CS1_M2/UART7_TX_M2 27 GPIO0_C4/PWM2_M0 28 GPIO1_A0/UART6_RX_M1 29 GPIO1_A1/UART6_TX_M1 30 GND
- 所有信号都是3.3V电平.
- VCC_3V3_S3为3.3V电源输出,最大500mA.
- VCC_5V0为5V电源输出,最大1A。
- MIPI-DSI
- 0.5mm FPC Connector
Pin# MIPI-DSI0 MIPI-DSI1 Description 1,2,3 VCC_5V0 VCC_5V0 5V Power ouput 4,7,9,11,15,18,21,24,27,30 GND GND Power and Signal Ground 5 I2C4_SDA_M3 I2C5_SDA_M2 3.3V, I2C Data, pulled up to 3.3V with 2.2K on M6 6 I2C4_SCL_M3 I2C5_SCL_M2 3.3V, I2C Clock, pulled up to 3.3V with 2.2K on M6 8 GPIO3_C0 GPIO4_A0 3.3V, GPIO 10 GPIO3_D3/PWM10_M2 GPIO3_D5/PWM11_M3 3.3V, GPIO/PWM 12 GPIO3_D2 GPIO4_A1 3.3V, GPIO 13 /NC /NC No Connection 14 GPIO3_C1 GPIO4_A2 3.3V, GPIO 16 MIPI_PHY0_TX_D3N MIPI_PHY1_TX_D3N MIPI TX Lane3 ouput N 17 MIPI_PHY0_TX_D3P MIPI_PHY1_TX_D3P MIPI TX Lane3 ouput P 19 MIPI_PHY0_TX_D2N MIPI_PHY1_TX_D2N MIPI TX Lane2 ouput N 20 MIPI_PHY0_TX_D2P MIPI_PHY1_TX_D2P MIPI TX Lane2 ouput P 22 MIPI_PHY0_TX_D1N MIPI_PHY1_TX_D1N MIPI TX Lane1 ouput N 23 MIPI_PHY0_TX_D1P MIPI_PHY1_TX_D1P MIPI TX Lane1 ouput P 25 MIPI_PHY0_TX_D0N MIPI_PHY1_TX_D0N MIPI TX Lane0 ouput N 26 MIPI_PHY0_TX_D0P MIPI_PHY1_TX_D0P MIPI TX Lane0 ouput P 28 MIPI_PHY0_TX_CLKN MIPI_PHY1_TX_CLKN MIPI TX Clock ouput N 29 MIPI_PHY0_TX_CLKP MIPI_PHY1_TX_CLKP MIPI TX Clock ouput P
- MIPI-CSI
- 0.5mm FPC Connector
Pin# MIPI-CSI0 MIPI-DCSI0 Description 1,2 VCC_5V0 VCC_5V0 5V Power ouput 3,13,15,18,21,24,27,30 GND GND Power and Signal Ground 4 MIPI_CSI0_RX_CLK1P /NC 5 MIPI_CSI0_RX_CLK1N /NC 6 VCC_1V8_S3 VCC_1V8_S3 1.8V Power ouput, 100mA Max 7 /NC /NC No Connection 8 VSYNC_MASTER VSYNC_SLAVE Have been Connected together on M6 for sensor synchronization 9 I2C3_SCL_M0 I2C7_SCL_M0 1.8V, I2C Clock, pulled up to 1.8V with 2.2K on M6 10 I2C3_SDA_M0 I2C7_SDA_M0 1.8V, I2C Data, pulled up to 1.8V with 2.2K on M6 11 GPIO1_C6 GPIO1_D2 1.8V, GPIO 12 GPIO1_D5 GPIO1_D3 1.8V, GPIO 14 MIPI_CAMCLK1_M0 MIPI_CAMCLK2_M0 1.8V, CLock ouput for Sensor 16 MIPI_CSI0_RX_D3P MIPI_PHY0_RX_D3P MIPI RX Lane3 iuput P 17 MIPI_CSI0_RX_D3N MIPI_PHY0_RX_D3N MIPI RX Lane3 iuput N 19 MIPI_CSI0_RX_D2P MIPI_PHY0_RX_D2P MIPI RX Lane2 iuput P 20 MIPI_CSI0_RX_D2P MIPI_PHY0_RX_D2N MIPI RX Lane2 iuput N 22 MIPI_CSI0_RX_D1P MIPI_PHY0_RX_D1P MIPI RX Lane1 iuput P 23 MIPI_CSI0_RX_D1N MIPI_PHY0_RX_D1N MIPI RX Lane1 iuput N 25 MIPI_CSI0_RX_CLK0P MIPI_PHY0_RX_CLKP MIPI RX Clock iuput P 26 MIPI_CSI0_RX_CLK0N MIPI_PHY0_RX_CLKN MIPI RX Clock iuput N 28 MIPI_CSI0_RX_D0P MIPI_PHY0_RX_D0P MIPI RX Lane0 iuput P 29 MIPI_CSI0_RX_D0N MIPI_PHY0_RX_D0N MIPI RX Lane0 iuput N
- Debug UART Pin Spec
- 3.3V level signals, 1500000bps
Pin# Assignment Description 1 GND 0V 2 UART2_TX_M0_DEBUG output 3 UART2_RX_M0_DEBUG intput
- USB-A Port
- USB2.0 A口具有1A过流保护。
- USB3.0 A口具有1.4A过流保护。
- RTC
- RTC backup current is 0.25μA TYP (VDD =3.0V, TA =25℃).
- Connector P/N: Molex 53398-0271
4 快速入门
4.1 准备工作
要开启你的NanoPi M6新玩具,请先准备好以下硬件
- NanoPi M6主板
- MicroSD卡/TF卡: Class10或以上的 8GB SDHC卡
- 一个USB-C接口外接电源 (要求10W及以上规格),支持PD协议的电源适配器
- 如果需要开发与编译,则需要一台可以联网的电脑,推荐安装Ubuntu 20.04 64位系统,并使用下面的脚本初始化开发环境, 也可以使用Docker容器:
4.2 经测试可选用的TF卡
请参考: TF Cards We Tested
4.3 经我们测试过的PD电源适配器
请参考: PD Power Adapters We Tested
4.4 调试串口参数配置
使用以下串口参数:
波特率 | 1500000 |
数据位 | 8 |
奇偶校验 | None |
停止位 | 1 |
流控制 | None |
4.5 安装系统
4.5.1 下载固件
4.5.1.1 官方固件
访问此处的下载地址下载固件文件 (位于网盘的"01_系统固件"目录):
下表列出了所有官方固件,文件名中的XYZ代表文件的不同用途,其含义如下:
- sd: 安装系统到TF卡时使用
- eflasher: 需要通过TF卡烧写系统到eMMC时使用
- usb: USB线刷时使用
图标 | 文件名 | 版本 | 描述 | 内核版本 |
---|---|---|---|---|
rk3588-XYZ-debian-bookworm-core-6.1-arm64-YYYYMMDD.img.gz | bookworm | Debian12 精简版固件,没有桌面, 仅命令行 | 6.1.y | |
rk3588-XYZ-debian-bullseye-minimal-6.1-arm64-YYYYMMDD.img.gz | bullseye | Debian11 系统固件,Xfce桌面, 不预装推荐软件包, 支持GPU/VPU硬件加速 | 6.1.y | |
rk3588-XYZ-debian-bullseye-desktop-6.1-arm64-YYYYMMDD.img.gz | bullseye | Debian11 完整版固件,Xfce桌面, 预装推荐软件包, 支持GPU/VPU硬件加速 | 6.1.y | |
rk3588-XYZ-ubuntu-focal-desktop-6.1-arm64-YYYYMMDD.img.gz | focal | Ubuntu 20.04固件, LXQT桌面,支持GPU/VPU硬件加速 | 6.1.y | |
rk3588-XYZ-ubuntu-noble-desktop-6.1-arm64-YYYYMMDD.img.gz | noble | Ubuntu 24.04固件, 使用GNOME与Wayland,预装网页浏览器等推荐软件 | 6.1.y | |
rk3588-XYZ-ubuntu-noble-minimal-6.1-arm64-YYYYMMDD.img.gz | noble | 精简版Ubuntu 24.04固件, 使用GNOME与Wayland, 不预装推荐软件 | 6.1.y | |
rk3588-XYZ-ubuntu-jammy-x11-desktop-arm64-YYYYMMDD.img.gz | jammy | Ubuntu 22.04固件, 基于X11与Xubuntu,使用panfrost GPU驱动,集成rkmpp/mpv实现视频硬件加速 | 6.1.y | |
rk3588-XYZ-friendlycore-focal-6.1-arm64-YYYYMMDD.img.gz | focal | FriendlyCore系统固件,预装了Qt5, 仅命令行,基于Ubuntu core 20.04构建 | 6.1.y | |
rk3588-XYZ-androidtv-YYYYMMDD.img.zip | 12 | Android 12 TV | 5.10.y | |
rk3588-XYZ-android12-YYYYMMDD.img.zip | 12 | Android 12 Tablet | 5.10.y | |
rk3588-XYZ-openmediavault-6.1-YYYYMMDD.img.gz | Shaitan | OpenMediaVault NAS系统,基于Debian12构建 | 6.1.y | |
rk3588-XYZ-proxmox-6.1-YYYYMMDD.img.gz | 8.2.7 | Proxmox VE 系统 (预览版),基于Debian12构建 | 6.1.y | |
rk3588-XYZ-friendlywrt-21.02-YYYYMMDD.img.gz | 21.02 | FriendlyWrt, 基于OpenWrt 21.02 | 6.1.y | |
rk3588-XYZ-friendlywrt-21.02-docker-YYYYMMDD.img.gz | 21.02 | 预装了Docker的FriendlyWrt, 基于OpenWrt 21.02 | 6.1.y | |
rk3588-XYZ-friendlywrt-23.05-YYYYMMDD.img.gz | 23.05 | FriendlyWrt, 基于OpenWrt 23.05 | 6.1.y | |
rk3588-XYZ-friendlywrt-23.05-docker-YYYYMMDD.img.gz | 23.05 | 预装了Docker的FriendlyWrt, 基于OpenWrt 23.05 | 6.1.y | |
Other Image | ||||
Github Actions - FriendlyWrt云编译版本 | 21.02,23.05 | FriendlyWrt | 6.1.y | |
rk3588-eflasher-multiple-os-YYYYMMDD-25g.img.gz | - | 内含了多个操作系统的eMMC烧写文件,方便测试各个OS,此固件不会开机自动烧写,需要手动选择要烧写的OS |
4.5.1.2 工具软件(可选)
访问 此处的下载链接 下载所需要的工具软件 (位于网盘的"05_工具软件"目录).
文件名 | 描述 |
---|---|
win32diskimager.rar | 用于将映象文件写入SD卡 |
SD Card Formatter | 用于清空SD卡中的引导数据 |
RKDevTool_Release_v2.84.zip | 瑞芯微的刷机工具,USB线刷系统时需要使用此工具 |
4.5.2 通过TF卡运行系统
操作步骤如下:
- 准备一张8G或以上容量的TF卡;
- 访问此处的下载地址下载需要的固件(位于"01_系统固件/01_SD卡固件"目录);
- 下载烧写工具 win32diskimager (位于"05_工具软件"目录),或者选用你喜爱的工具;
- 解压 .gz 格式的压缩文件得到 .img 格式的镜像文件;
- 在Windows下以管理员身份运行 win32diskimager,在界面上选择你的SD卡盘符,选择解压后的固件文件,点击 Write 按钮烧写到SD卡;
- 将SD卡从电脑端弹出,插入NanoPi-M6的microSD卡槽;
- 连接NanoPi-M6的电源,系统会从TF卡启动, 某些型号可能需要按下Power键才会启动;
4.5.3 安装系统到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-M6上连接好存储设备,插入TF卡上电开机,接下来要在界面上操作,如果没有显示设备,可以使用VNC代替,请参考使用VNC操作eFlasher;
- 在eFlasher界面上,首先选择要安装的OS,然后选择引导安装的目的地 (通常选eMMC),以及选择系统安装的目的地(可以选eMMC,M.2硬盘,USB存储设备等),如下图所示:
- 没有eMMC时可使用TF卡作为引导,方法是将另一个TF卡通过USB读卡器插入USB端口,然后选择USB设备作为引导安装目的地,从而实现从TF卡引导,但系统存放在M.2或USB硬盘的目的;
- 烧写完成后,从NanoPi-M6弹出SD卡,引导在eMMC的情况下,NanoPi-M6会自动重启至你刚刚烧写的系统,如果引导安装在TF卡,则需要拨掉电源,插入TF引导卡再上电开机;
- 更详细的安装指南请参考此处;
4.5.4 烧写系统到eMMC
4.5.4.1 方法1: 用TF启动卡进行自动烧写
此方法是通过SD卡启动一个小型的Linux系统, 借助名为EFlasher的工具来烧写固件到eMMC。
如果有连接HDMI显示器, 可通过图形界面观察烧写进度, 也可以通过板载LED灯来掌握烧写进度:
默认情况下烧写是上电自动开始的,所以要注意备份eMMC里的数据,如果不想自动,可以使用文件名含"multiple-os"字样的固件,在界面上手动选择要烧写的系统。
4.5.4.1.1 烧写官方固件到eMMC
详细操作步骤如下:
- 准备一张8G或以上容量的SDHC卡;
- 访问此处的下载地址下载需要的固件(位于"01_系统固件/02_SD卡刷机固件(SD-to-eMMC)"目录)和烧写工具win32diskimager(位于"05_工具软件"目录);
- 解压 .gz 格式的压缩文件得到 .img 格式的镜像文件;
- 在Windows下以管理员身份运行 win32diskimager,在界面上选择你的SD卡盘符,选择解压后的固件文件,点击 Write 按钮烧写到SD卡;
- 将SD卡从电脑端弹出,插入NanoPi-M6的microSD卡槽;
- 连接NanoPi-M6的电源,系统会从SD卡启动,并自动启动 EFlasher 烧写工具将系统安装到 eMMC;
- 烧写完成后,从NanoPi-M6弹出SD卡,NanoPi-M6会自动重启并从eMMC启动你刚刚烧写的系统;
4.5.4.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-M6上上电启动, 会自动烧写你的固件, 通过板载 LED 灯来了解安装进度;
4.5.4.2 方法2: 在网页上烧写
使用烧写了FriendlyWrt固件的TF卡启动NanoPi-M6, 登录FriendlyWrt页面, 在网页菜单上点击 "系统" -> "eMMC刷机助手" 进入eMMC刷机助手界面, 点击界面上的 "选择文件" 按钮, 选择你要刷写的文件 (官方固件选用文件名有"-sd-"的文件), 亦可选择第三方固件, 文件支持 .gz 格式的压缩文件, 或者以 .img 作为扩展名的raw格式。
选择文件后, 点击 “上传并烧写” 按钮, 开始上传并烧写, 如下图所示:
烧写完成后,请弹出SD卡,设备会自动重启, 并从eMMC引导新系统,可留意指示灯的状态, 在系统状态灯闪烁,同时网卡状态灯亮起时,表示系统启动完成, 如果eMMC安装的系统是 FriendlyWrt, 则可以通过点击“进入首页”进入FriendlyWrt管理页面。
官方固件需要选用文件名带 "-sd-" 字样的镜像文件, 例如: rk3NNN-sd-friendlywrt-21.02-YYYYMMDD.img.gz, 压缩文件只支持gz格式, 如果文件太大, 可以先压缩成gz格式再上传。
4.5.4.3 方法3: 通过USB烧写
4.5.4.3.1 USB烧写步骤1: 安装USB驱动和工具
从网盘的tools目录下载瑞芯微的USB驱动: DriverAssitant_v5.12.zip, 解压后安装;
在相同目录下, 下载瑞芯微开发工具: RKDevTool_Release_v2.84.zip, 解压后备用;
4.5.4.3.2 USB烧写步骤2: 将NanoPi-M6与电脑连接, 并进入刷机模式
按住Mask按键不放, 用USB数据线, 将NanoPi-M6与电脑进行连接, 保持按住Mask键, 状态灯亮起3秒后即可松开;
4.5.4.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启动你安装的系统;
5 Ubuntu 22.04 桌面系统的使用
5.1 Ubuntu 22.04桌面系统简介
Ubuntu 22.04 桌面 具有如下特点:
- 桌面环境采用 GNOME 42;
- 默认使用Wayland 会话, 性能更好;
- 提供基于 Mali GPU 的 OpenGL ES 支持;
- 支持Rockhip MPP视频硬编和硬解码;
- 预装基于mpv与kodi, 支持视频硬解码;
- 支持安装Docker和Plex, 玩法丰富;
5.2 Account & Password
5.3 帐户与密码
普通用户:
用户名: pi
密码: pi
Root用户:
用户名: root
密码: fa
5.4 查看IP地址
由于主机名默认为FriendlyElec.lan, 所以可以使用ping命令来获得IP地址:
ping FriendlyElec.lan
5.5 通过ssh登录Ubuntu
ssh pi@FriendlyElec.lan
默认密码为pi
5.6 更新软件包
5.6.1 更换软件源为国内镜像源
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.org $ sudo sed -i -e 's/ports.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
5.6.2 更新软件包列表
$ sudo apt-get update
5.7 安装软件中心
$ sudo apt-get install snapd $ sudo snap install snap-store
5.8 安装内核头文件
sudo dpkg -i /opt/linux-headers-*.deb
测试编译内核模块:
sudo apt update sudo apt install git gcc make bc git clone https://github.com/RinCat/RTL88x2BU-Linux-Driver.git cd RTL88x2BU-Linux-Driver make -j$(nproc) sudo make install sudo modprobe 88x2bu
5.9 更改时区
5.9.1 检查当前时区
timedatectl
5.9.2 列出所有时区
timedatectl list-timezones
5.9.3 设置时区 (比如上海)
sudo timedatectl set-timezone Asia/Shanghai
5.10 更换开机LOGO和桌面墙纸
5.10.1 更换开机LOGO
替换内核下面的两个文件,重新编译内核:
kernel/logo.bmp
kernel/logo_kernel.bmp
或者使用脚本来操作,如下所示:
- 下载脚本
git clone https://github.com/friendlyarm/sd-fuse_rk3399.git -b kernel-4.19 cd sd-fuse_rk3399
- 编译内核并重新打包固件
convert files/logo.jpg -type truecolor /tmp/logo.bmp convert files/logo.jpg -type truecolor /tmp/logo_kernel.bmp LOGO=/tmp/logo.bmp KERNEL_LOGO=/tmp/logo_kernel.bmp ./build-kernel.sh ubuntu-jammy-desktop-arm64 ./mk-emmc-image.sh ubuntu-jammy-desktop-arm64
5.10.2 恢复出厂设置
在终端上执行如下命令:
sudo firstboot && sudo reboot
5.11 开机自动启动程序(例如Firefox)
把要开机启动的程序的desktop文件放入~/.config/autostart/目录即可,例如:
mkdir ~/.config/autostart/ cp /usr/share/applications/firefox.desktop ~/.config/autostart/
5.12 取消USB存储设备自动挂载
sudo systemctl mask udisks2 sudo reboot
5.13 设置中文语言与输入法
5.13.1 设置中文语言
输入以下命令,用空格选中 'zh_CN.UTF-8'
sudo dpkg-reconfigure locales
添加环境变量到 .bashrc:
echo "export LC_ALL=zh_CN.UTF-8" >> ~/.bashrc echo "export LANG=zh_CN.UTF-8" >> ~/.bashrc echo "export LANGUAGE=zh_CN.UTF-8" >> ~/.bashrc
重启确认一下设置是否生效:
sudo reboot
5.14 硬解播放视频
5.14.1 界面播放
- 在文件浏览器定位到视频文件,右击选择使用"Play with mpv media player"播放视频
- 通过Kodi播放, 默认会调用mpv进行硬解播放
- 使用Chromium网页浏览器, 可以硬解播放网页上视频 (限CPU能支持的视频格式)
5.14.2 命令行播放
- 播放本地视频
export DISPLAY=:0.0 mpv --fs /home/pi/Videos/demo.mp4
- 播放网络视频
export DISPLAY=:0.0 mpv --fs https://www.youtube.com/watch?v=lK-nYDmC1Dk
5.15 安装Plex多媒体服务器
运行以下命令安装:
echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add - sudo apt update sudo apt install plexmediaserver
成功安装后,启用 Plex(系统启动时自动启动):
sudo systemctl enable plexmediaserver sudo systemctl start plexmediaserver sudo systemctl status plexmediaserver
安装完成后, 在电脑浏览器上输入以下地址登录Plex服务器后台: http://IP地址:32400/web/
5.16 安装Docker
5.16.1 安装docker
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
验证是否安装成功:
sudo docker info
5.16.2 不使用sudo运行docker
sudo groupadd docker sudo gpasswd -a ${USER} docker sudo systemctl restart docker sudo chmod a+rw /var/run/docker.sock
验证是否成功:
docker images
5.16.3 测试运行docker映像: 安装nextcloud网盘
mkdir ~/nextcloud -p docker run -d -p 8888:80 --name nextcloud -v ~/nextcloud/:/var/www/html/ --restart=always --privileged=true arm64v8/nextcloud
安装完成后, 在电脑浏览器上访问: http://设备IP地址:8888, 即可查看nextcloud网盘页面。
5.17 取消桌面的自动登录
编辑文件/etc/gdm3/custom.conf, 设置字段AutomaticLoginEnable为false:
[daemon] AutomaticLoginEnable = false
5.18 设置WiFi无线链接
5.18.1 图形界面操作
点击右上角的网络图标,选择你要连接的WiFi热点,按界面提示操作即可。
5.18.2 命令行操作
请参考 Use NetworkManager to configure network settings/zh
5.19 测试OpenGL ES性能
首先, 将CPU设置为性能模式:
sudo sh -c 'echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor' sudo sh -c 'echo performance > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor' sudo sh -c 'echo performance > /sys/devices/system/cpu/cpufreq/policy6/scaling_governor'
然后启动glmark2-es2-wayland:
glmark2-es2-wayland
5.20 Chromium网页浏览器
5.20.1 GPU支持情况
系统预装的Chromium网页浏览器已经默认启用硬件加速,支持WebGL,可以通过输入网址 chrome://gpu 了解硬件加速情况,如下图所示:
5.20.2 VPU支持情况
在浏览器上播放一个视频,然后在命令行使用fuser查看mpp设备节点的使用情况来确认已经调用了vpu:
pi@FriendlyElec:~$ fuser /dev/mpp_service /dev/mpp_service: 3258
如果fuser命令没有内容输出, 则表示当前是软解.
5.20.3 查看支持的硬解格式
在浏览器地址栏输入 about://gpu,翻页到页面最底部,查看 "Video Acceleration Information" 表格;
播放一个视频后,再在浏览器地址栏输入 about://media-internals, 可以查看最近播放的视频是否启用了硬解;
6 Android系统的使用
Android系统特性:
- 分为TV与Tablet两个版本,对应不同的应用场景;
- 支持红外摇控器 (仅限板载红外接收器的型号);
- 支持蓝牙摇控器 (需外接USB或M.2蓝牙模块);
- 支持有线网络;
- 支持WiFi (需外接USB或M.2 WIFI模块);
- 支持视频硬解码等;
6.1 Android系统支持的WIFI型号
6.1.1 M.2 WiFi Module
- RTL8822CE
6.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.2 Android系统支持的蓝牙型号
6.2.1 蓝牙模块
- RTL8822CE
- RTL8761B
- CSR8510 A10 Bluetooth Dongle 0a12:0001
(Note: unsupported device ID 0x2B89:0x8761)
6.2.2 蓝牙遥控器
- Amazon Fire TV Remote
6.3 ADB的使用
6.3.1 Android Tablet界面下开启
- Android Tablet界面下, 依次进入 Settings -> About tablet -> 连续点击7下屏幕最下面的Build number
- 再次进入Android系统的Settings -> System -> Advance -> Developer options, 勾选 USB debugging, 重新开机
- 如需通过网络使用adb,需要先连接WiFi,然后勾选Wireless debuging, 在弹出的 "Allow wireless debuggin on the network" 询问窗口中选中 "Always allow on this network",点 "Allow"
6.3.2 Android TV界面下开启
- Android TV界面下, 点击右上角的Settings图标(齿轮形状的图标), 依次进入 Device Preferences -> About -> 连续点击7下屏幕最下面的Android TV OS build
- 再次点击右上角的Settings图标(齿轮形状的图标) -> Device Preferences -> Developer options, 如需通过网络使用adb,可同时勾选 USB debugging, 重新开机
- 如需通过网络使用adb,Android TV下支持WiFi和有线网络, 在 Developer options 界面中勾选Internet Adb启用网络adb
6.3.3 通过USB使用adb
请注意: 开启ADB后, 该USB3端口将工作在Device模式, 如果需要连接U盘等设备,你需要关闭ADB并重启开发板
一般情况下adb是默认关闭的,请执行以下步骤开启:
- 用USB A-to-A数据线 (也叫USB公对公数据线), 将开发板与电脑进行连接, 连接方法参照下图, 需要连接靠近外侧的USB端口:
- 基于你的操作系统安装 adb 驱动和命令
- 正常情况下, Android状态栏会提示 USB debugging connected,表示ADB已开启, 在电脑上输入如下命令检测连接:
$ adb devices List of devices attached 27f7a63caa3faf16 device
- 进入adb shell:
$ adb shell
nanopi3:/ $
6.3.4 通过网络使用adb
- Android Tablet进入Android系统的Settings -> System -> Advance -> Developer options, 点击Wireless debugging,查看IP地址与端口
- Android TV默认的网络adb端口为5555
这里假设Wireless debugging界面上的IP地址与端口显示为192.168.1.167:45055,adb命令如下:
- 连接设备:
$ adb connect 192.168.1.167:45055 connected to 192.168.1.167:45055
- 进入adb shell:
$ adb shell
nanopi3:/ $
- 如有多个设备,需要用-s参数指定设备的IP与端口,如下所示:
$ adb -s 192.168.1.167:45055 shell nanopi3:/ $
6.4 更换Android TV默认的Launcher桌面
- 参考上一个章节开启adb
- 这里以通过apk安装第三方启动器Emotn UI为例, 访问网页 https://app.emotn.com/ui/ 下载apk,然后用adb安装:
$ adb install com.oversea.aslauncher_1.0.9.0_5094.apk
Performing Streamed Install
Success
- 安装完成后,在界面上启动它,然后输入以下adb命令获得它的包名:
$ adb shell dumpsys window | grep mCurrentFocus mCurrentFocus=Window{7a950fb u0 com.oversea.aslauncher/com.oversea.aslauncher.ui.main.MainActivity}
- 可以看到,Emotn UI的包名为: com.oversea.aslauncher,设置它为默认Launcher:
$ adb shell pm set-home-activity com.oversea.aslauncher Success
- 然后比较关键的一步,需要禁用原生的Launcher,使用以下命令禁用:
$ adb shell pm disable-user --user 0 com.google.android.tvlauncher Package com.google.android.tvlauncher new state: disabled-user
- 最后,重启设备查看效果,正常情况下,开机直接进入Emotn UI了:
$ adb shell reboot
- 以后再安装其他Launcher, 可以通过界面进行切换,设置界面位于 Settings -> Device Preferences -> Advanced setting -> Default Launcher, 如下图所示:
6.5 Android下的有线网络
- 任何一个网口都能通过DHCP连接网络
- 如果想要配置静态IP,则只有 eth0 接口支持
- 某些应用可能有兼容性问题,会报没有网络连接的错误,但实际上网络是通的
6.6 Andorid下使用EC20 4G模块
EC20 默认已禁用,您可以使用以下命令查看它的状态,已禁用状态下会显示数字1:
su
getprop persist.vendor.radio.no_modem_board
要启用 EC20,请使用以下命令(重启后生效):
su setprop persist.vendor.radio.no_modem_board 0
7 Debian11 桌面系统的使用
7.1 Debian11桌面系统简介
Debian11 Desktop 是一个轻量级的Debian桌面环境,具有如下特点:
- 桌面环境采用 Xfce, Xfce 是一个快捷的、轻量级的,功能齐全的桌面环境;
- 提供基于 Mali GPU 的 OpenGL 支持;
- 支持Rockhip MPP视频硬编和硬解码;
- 预装基于mpv的SMPlayer播放器, 支持视频硬解码;
- 预装Chromium浏览器, 支持vpu/gpu硬件加速 (视频硬解限h264/mp4格式);
- 支持安装Plex Server, Docker与wps等应用, 玩法丰富;
7.2 帐户与密码
普通用户:
用户名: pi
密码: pi
Root用户:
默认没有设置root密码,可通过sudo passwd root命令配置root密码
7.3 查看IP地址
由于Debian主机名默认为硬件型号, 所以可以使用ping命令来获得IP地址: ping NanoPi-M6
7.4 通过ssh登录Debian
使用以下命令:ssh pi@NanoPi-M6
默认密码为pi
7.5 更新软件包
7.5.1 更换软件源为国内镜像源
sudo sed -i -e 's/deb.debian.org/mirrors.cloud.tencent.com/g' /etc/apt/sources.list sudo sed -i -e 's/security.debian.org/mirrors.cloud.tencent.com/g' /etc/apt/sources.list sudo apt update
7.6 安装x11vnc远程桌面
x11vnc是一个VNC服务器, 安装后我们可以不依赖外部的显示设备, 通过网络远程登录Debian桌面。
7.6.1 安装x11vnc
sudo apt-get install x11vnc
7.6.2 设置VNC登录密码
sudo x11vnc -storepasswd /etc/x11vnc.pwd
7.6.3 设置x11vnc在开机时自动启动
新建如下文件:
sudo vi /lib/systemd/system/x11vnc.service
内容如下:
[Unit] Description=Start x11vnc at startup. Requires=display-manager.service After=syslog.target network-online.target Wants=syslog.target network-online.target [Service] Type=simple ExecStart=/usr/bin/x11vnc -display :0 -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pwd -rfbport 5900 -shared -capslock -nomodtweak ExecStop=/usr/bin/x11vnc -R stop Restart=on-failure [Install] WantedBy=multi-user.target
设置systemd服务:
sudo systemctl daemon-reload sudo systemctl enable x11vnc.service sudo systemctl start x11vnc
7.6.4 测试远程桌面
在电脑上启动VNC客户端软件, 在地址栏输入: IP地址:5900 连接即可, 效果如下图所示, 图中设备IP地址为192.168.1.123, 使用端口5900进行连接:
7.7 安装内核头文件
sudo dpkg -i /opt/linux-headers-*.deb
测试编译内核模块:
sudo apt update sudo apt install git gcc make bc git clone https://github.com/RinCat/RTL88x2BU-Linux-Driver.git cd RTL88x2BU-Linux-Driver make -j$(nproc) sudo make install sudo modprobe 88x2bu
7.8 更改时区
7.8.1 检查当前时区
timedatectl
7.8.2 列出所有时区
timedatectl list-timezones
7.8.3 设置时区 (比如上海)
sudo timedatectl set-timezone Asia/Shanghai
7.9 更换开机LOGO和桌面墙纸
7.9.1 更换开机LOGO
替换内核下面的两个文件,重新编译内核:
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-bullseye-desktop-arm64 sudo ./mk-sd-image.sh debian-bullseye-desktop-arm64 sudo ./mk-emmc-image.sh debian-bullseye-desktop-arm64
注: 如果你的系统不是debian-bullseye-desktop-arm64,请根据实际情况指定
7.9.2 更换桌面墙纸
修改如下配置文件:
/home/pi/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
7.9.3 恢复出厂设置
在终端上执行如下命令:
sudo firstboot && sudo reboot
7.10 开机自动启动程序(例如Kodi)
把要开机启动的程序的desktop文件放入~/.config/autostart/目录即可,例如:
mkdir ~/.config/autostart/ cp /usr/share/applications/kodi.desktop ~/.config/autostart/
7.11 取消USB存储设备自动挂载
sudo systemctl mask udisks2 sudo reboot
7.12 设置中文语言与输入法
7.12.1 设置中文语言
输入以下命令,用空格选中 'zh_CN.UTF-8'
sudo dpkg-reconfigure locales
添加环境变量到 .bashrc:
echo "export LC_ALL=zh_CN.UTF-8" >> ~/.bashrc echo "export LANG=zh_CN.UTF-8" >> ~/.bashrc echo "export LANGUAGE=zh_CN.UTF-8" >> ~/.bashrc
重启确认一下设置是否生效:
sudo reboot
7.12.2 安装中文输入法
输入如下命令安装fcitx和拼音输入法:
sudo apt update sudo apt-get install fcitx fcitx-pinyin sudo apt-get install im-config sudo apt-get install fcitx-table* sudo apt-get install fcitx-ui-classic fcitx-ui-light sudo apt-get install fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-frontend-qt4 sudo apt-get remove --purge scim* ibus* sudo reboot
重启后, 按Ctrl+Space即可切换中英文输入法, 右上角也出现了输入法图标, 右击右上角的输入法图标, 在弹出菜单中可以切换输入法, 如下图所示:
7.13 安装Plex多媒体服务器
访问 Plex官网的如下地址: https://www.plex.tv/media-server-downloads/
在下载页面上, 选择 ”Plex Media Server” 分类, 平台选择 ”Linux“, 版本选择 "Ubuntu(16.04+)/Debian(8+) - ARMv8",
下载得到deb包后, 使用 dpkg 命令安装软件包即可:
sudo dpkg -i plexmediaserver_1.31.0.6654-02189b09f_arm64.deb
安装完成后, 在电脑浏览器上输入以下地址登录Plex服务器后台: http://IP地址:32400/web/
7.14 在Debian系统上安装Docker
请参考此链接: How to Install Docker on Debian/zh
7.15 如何测试NPU
请参考此链接: NPU/zh
7.16 设置WiFi无线链接
7.16.1 图形界面操作
点击右上角的网络图标,选择你要连接的WiFi热点,按界面提示操作即可。
7.16.2 命令行操作
请参考 Use NetworkManager to configure network settings/zh
7.17 取消自动登录
编辑文件:
sudo vim /etc/lightdm/lightdm.conf
注释掉如下两行内容 (在前面插入#):
autologin-user=pi
autologin-user-timeout=0
7.18 测试OpenGL ES性能
在系统菜单 System Tools 中点击 Terminator 打开命令行终端,输入以下命令即可测试:
glmark2-es2
7.19 设置HDMI/DP屏幕分辨率
进入系统菜单 Settings -> Display界面进行设置即可。
7.20 设置HiDPI屏幕缩放
Xfce支持HiDPI缩放,可以使用设置管理器启用: 进入Settings Manager > Appearance > Settings > Window Scaling,选择2作为缩放系数。
或者编辑文件 ~/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
7.21 调节HDMI边界
打开命令行终端,输入命令进行操作,有几个注意事项:
1) 需要登录桌面才能操作,如果Desktop停留在Login是无法设置的;
2) 如果你是在 ssh 登录的终端,请使用与桌面登录相同的用户名,默认是 pi,不能使用root用户,同时,你需要赋值 DISPLAY 变量:
export DISPLAY=:0.0
7.21.1 查询显示器支持哪些分辨率
xrandr -q
输出示例:
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8192 x 8192 eDP-1 disconnected primary (normal left inverted right x axis y axis) HDMI-1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm 1920x1080 60.00*+ 50.00 1280x720 60.00 50.00 720x576 50.00 720x480 59.94
7.21.2 设置分辨率
例如设置为 1920X1080@60Hz:
xrandr --output HDMI-1 --mode 1920x1080 --refresh 60
7.21.3 设节HDMI输出边界
For example, the transformation scaling horizontal coordinates by 0.8, vertical coordinates by 1.04 and moving the screen by 35 pixels right and 19 pixels down:
xrandr --output HDMI-1 --transform 0.80,0,-35,0,1.04,-19,0,0,1
7.21.4 开机自动调整
编辑~/.config/autostart/lxrandr-autostart.desktop,将完整的xrandr命令写入到Exec=开头的键中,如下所示:
[Desktop Entry] Type=Application Name=LXRandR autostart Comment=Start xrandr with settings done in LXRandR Exec=sh -c 'xrandr --output HDMI-1 --mode 1920x1080 --refresh 50 --transform 1.04,0,-35,0,1.05,-30,0,0,1'
7.22 Chromium网页浏览器
7.22.1 GPU支持情况
系统预装的Chromium网页浏览器已经默认启用硬件加速,支持WebGL,可以通过输入网址 chrome://gpu 了解硬件加速情况,如下图所示:
7.22.2 VPU支持情况
在浏览器上播放一个视频,然后在命令行使用fuser查看mpp设备节点的使用情况来确认已经调用了vpu:
pi@FriendlyElec:~$ fuser /dev/mpp_service /dev/mpp_service: 3258
如果fuser命令没有内容输出, 则表示当前是软解.
7.22.3 查看支持的硬解格式
在浏览器地址栏输入 about://gpu,翻页到页面最底部,查看 "Video Acceleration Information" 表格;
播放一个视频后,再在浏览器地址栏输入 about://media-internals, 可以查看最近播放的视频是否启用了硬解;
7.23 测试mpp视频硬件编码
mpi_enc_test -w 1920 -h 1080 -t 7 -f 0 -o test.h264 -n 300 export XDG_RUNTIME_DIR=/run/user/0 ffplay test.h264
8 OpenMediaVault NAS系统的使用
8.1 OpenMediaVault NAS系统简介
OpenMediaVault 简称OMV,是基于 Debian Linux 的下一代网络附加存储 (NAS) 解决方案。它包含 SSH、(S)FTP、SMB/CIFS、DAAP 媒体服务器、RSync、BitTorrent 客户端等服务。由于框架的模块化设计,它可以通过插件进行增强。
OpenMediaVault版本信息如下:
- OS: Debian 12
- OpenMediaVault: 7.0.5-1 (Sandworm)
- Others: 已安装OMV-Extras软件包
- 详细请参考如下链接:
9 FriendlyCore的使用
9.1 FriendlyCore默认帐户
- 普通用户:
用户名: pi 密码: pi
- Root用户:
用户名: Root用户: 密码: fa
9.2 更新软件包
$ sudo apt-get update
9.3 配置网络
9.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
9.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
9.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
9.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。
9.5 安装内核头文件
sudo dpkg -i /opt/linux-headers-*.deb
9.6 删除Qt5及相关文件
在root用户下执行如下命令:
su root cd / rm -rf usr/local/Trolltech/Qt-5.10.0-rk64one usr/local/Trolltech/Qt-5.10.0-rk64one-sdk usr/bin/setqt5env* usr/bin/qt5demo etc/qt5 rm -rf opt/{qt5-browser,Qt5_CinematicExperience,qt5-multi-screen-demo,qt5-nmapper,qt5-player,qt5-smarthome,QtE-Demo,qt5-qml-image-viewer,dual-camera}
10 安装第三方Armbian系统
请参考: Armbian Installation Guide
11 如何编译系统
11.1 搭建编译环境
11.1.1 方法1: 使用Docker进行交叉编译
请参考 docker-cross-compiler-novnc,也可使用网盘 “04_SDK与编译器/docker” 目录下的本地镜像,参考README.md用docker load命令导入即可。
11.1.2 方法2: 本地搭建交叉编译环境
11.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 |
11.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)
11.2 编译 Openwrt/Friendlywrt
11.2.1 下载源代码
FriendlyWrt有两个版本, 请根据需要进行选择.
11.2.1.1 版本FriendlyWrt 21.02
mkdir friendlywrt21-rk3588 cd friendlywrt21-rk3588 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 rk3588.xml --repo-url=https://github.com/friendlyarm/repo --no-clone-bundle tools/repo sync -c --no-clone-bundle
11.2.1.2 版本FriendlyWrt 23.05
mkdir friendlywrt23-rk3588 cd friendlywrt23-rk3588 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 rk3588.xml --repo-url=https://github.com/friendlyarm/repo --no-clone-bundle tools/repo sync -c --no-clone-bundle
11.2.2 首次编译
下面的命令是编译不带docker的版本, 如需要编译带docker的版本, 请将rk3588.mk替换为rk3588-docker.mk:
./build.sh rk3588.mk
会编译所有组件(包含u-boot, kernel 和 friendlywrt)并生成sd卡镜像文件,再执行以下命令,可生成用于安装系统到emmc运行的镜像文件(eflahser固件):
./build.sh emmc-img
对项目进行过修改后, 需要重新打包sd卡镜像, 可执行如下命令:
./build.sh sd-img
11.2.3 二次编译
cd friendlywrt make menuconfig #改动FriendlyWrt的配置 rm -rf ./tmp make -j${nproc} cd ../ ./build.sh sd-img ./build.sh emmc-img
11.2.4 单独编译u-boot
./build.sh uboot
11.2.5 单独编译kernel
./build.sh kernel
11.2.6 单独编译friendlywrt
./build.sh friendlywrt
或者进入friendlywrt目录, 按标准openwrt的命令操作, 上面的命令出现错误时, 可尝试使用以下命令单线程编译:
cd friendlywrt make -j1 V=s
11.3 编译Buildroot
请参考: Buildroot
11.4 其他Linux系统编译
11.4.1 各个OS对应的内核与u-boot版本
操作系统 | 内核版本 | uboot版本 | 交叉编译器 | 分区类型 | 构建工具集 | 内核代码分支 | 内核配置 | uboot代码分支 | uboot配置 |
---|---|---|---|---|---|---|---|---|---|
buildroot | linux v5.10.y | u-boot v2017.09 |
11.3-aarch64 | GPT | sd-fuse | nanopi5-v5.10.y_opt | nanopi6_linux_defconfig | nanopi6-v2017.09 | nanopi6_defconfig |
openmediavault-arm64 | linux v6.1.y | GPT | sd-fuse | nanopi6-v6.1.y | |||||
ubuntu-jammy-desktop-arm64 | GPT | ||||||||
ubuntu-jammy-minimal-arm64 | |||||||||
ubuntu-jammy-x11-desktop-arm64 | |||||||||
ubuntu-focal-desktop-arm64 | |||||||||
friendlycore-focal-arm64 | |||||||||
debian-bookworm-core-arm64 | |||||||||
debian-bullseye-desktop-arm64 | |||||||||
debian-bullseye-minimal-arm64 | |||||||||
friendlywrt21 | nanopi6_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卡固件与卡刷固件等
11.4.2 编译内核linux-v6.1.y
下载源代码并编译:
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 nanopi6_linux_defconfig # option2: 加载FriendlyWrt系统配置 # make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi6_linux_defconfig friendlywrt.config # 启动配置界面 # make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig # 编译内核 make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi6-images -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 | |
驱动模块位于out-modules目录 |
安装内核:
请参考 #应用新编译的uboot与内核
11.4.3 编译u-boot v2017.09
下载源代码并编译:
git clone https://github.com/friendlyarm/rkbin --single-branch --depth 1 -b nanopi6 git clone https://github.com/friendlyarm/uboot-rockchip --single-branch --depth 1 -b nanopi6-v2017.09 export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH cd uboot-rockchip/ ./make.sh nanopi6
编译完成后会生成如下文件:
uboot.img | rk3588_spl_loader_xx.yy.zzz.bin (打包时改名为MiniLoaderAll.bin) |
安装u-boot:
请参考 #应用新编译的uboot与内核
11.4.4 应用新编译的uboot与内核
11.4.4.1 安装到目标板
由于rk3588的OS默认均采用GPT分区, 可以用dd命令将image文件烧写至image对应的分区,SD卡与eMMC的设备节点如下:
- SD/TF Card设备节点为 /dev/mmcblk0
- eMMC设备节点为 /dev/mmcblk2
下面将演示如何将内核更新到eMMC:
使用parted命令查看分区布局:
parted /dev/mmcblk2 print
得到如下输出:
Model: MMC A3A551 (sd/mmc) Disk /dev/mmcblk2: 31.0GB 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 misc 3 16.8MB 21.0MB 4194kB dtbo 4 21.0MB 37.7MB 16.8MB resource 5 37.7MB 79.7MB 41.9MB kernel 6 79.7MB 113MB 33.6MB boot 7 113MB 147MB 33.6MB recovery 8 147MB 31.0GB 30.9GB ext4 rootfs
resource分区的序号为4, kernel分区的序号为5,对应的设备节点为/dev/mmcblk2p4和/dev/mmcblk2p5, dd命令如下:
dd if=resource.img of=/dev/mmcblk2p4 bs=1M dd if=kernel.img of=/dev/mmcblk2p5 bs=1M
如果要更新uboot:
dd if=uboot.img of=/dev/mmcblk2p1 bs=1M
如果要更新内核驱动模块,将新驱动模块目录上传并替换以下目录下的文件即可:/lib/modules。
11.4.4.2 打包新的SD Image
sd-fuse 提供一些工具和脚本, 用于制作SD卡固件, 具体用途如下:
- 制作分区镜像文件, 例如将rootfs目录打包成rootfs.img
- 将多个分区镜像文件打包成可直接写SD卡的单一镜像文件
- 简化内核和uboot的编译, 一键编译内核、第三方驱动, 并更新rootfs.img中的内核模块
请根据所用的内核版本点击对应的链接了解详细的使用方法:
内核版本 | 构建脚本 |
---|---|
linux v6.1.y | sd-fuse_rk3588 |
11.4.4.3 线刷
11.4.4.3.1 Linux系统
用以下命令让开发板进入loader模式:
sudo reboot loader
用 upgrade_tool_v2.17_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以上版本。
11.5 使用脚本进行编译
11.5.1 下载工具与固件
以friendlycore-focal系统为例,从github克隆下载脚本, 并解压friendlycore-focal系统的映象文件,映象文件可以在网盘的"03_分区镜像文件"目录找到:
git clone https://github.com/friendlyarm/sd-fuse_rk3588.git --single-branch -b kernel-6.1.y cd sd-fuse_rk3588 tar xvzf /path/to/netdrive/03_分区镜像文件/friendlycore-focal-arm64-images.tgz
11.5.2 编译内核
下载内核源代码并编译,编译完成后会自动更新 friendlycore-focal-arm64 目录下的相关映象文件,包括文件系统中的内核模块 (rootfs.img会被解包并重新打包):
git clone https://github.com/friendlyarm/kernel-rockchip --depth 1 -b nanopi6-v6.1.y kernel-rk3588 KERNEL_SRC=$PWD/kernel-rk3588 ./build-kernel.sh friendlycore-focal-arm64
11.5.3 编译内核头文件
git clone https://github.com/friendlyarm/kernel-rockchip --depth 1 -b nanopi6-v6.1.y kernel-rk3588 MK_HEADERS_DEB=1 BUILD_THIRD_PARTY_DRIVER=0 KERNEL_SRC=$PWD/kernel-rk3588 ./build-kernel.sh friendlycore-focal-arm64
11.5.4 编译uboot
下载uboot源代码并编译,编译完成后会自动更新 friendlycore-focal-arm64 目录下的相关映象文件:
git clone https://github.com/friendlyarm/uboot-rockchip --depth 1 -b nanopi6-v2017.09 UBOOT_SRC=$PWD/uboot-rockchip ./build-uboot.sh friendlycore-focal-arm64
11.5.5 生成新固件
将friendlycore-focal-arm64目录下的映象文件重新打包成sd卡固件:
./mk-sd-image.sh friendlycore-focal-arm64
命令完成后,固件位于out目录,可以用 dd 命令制作sd启动卡,举例说明:
dd if=out/rk3588-sd-friendlycore-focal-5.10-arm64-YYYYMMDD.img of=/dev/sdX bs=1M
11.6 Android系统编译
11.6.1 电脑的软硬件要求
- 至少配置16G以上内存+300G磁盘空间,建议使用32G内存+大容量高速SSD的机器,不建议使用虚拟机;
- 如遇到编译错误,可能是编译环境问题,推荐使用如下Docker容器进行编译:docker-cross-compiler-novnc;
11.6.2 从网盘下载Android源代码
网盘地址:点击进入
网盘路径:07_源代码/rk35xx-android12-xxxxxxx-YYYYMMDD.tgz (YYYYMMDD表示打包的日期, xxxxxxx表示最后的commit-id)
使用如下命令解压并拉取更新:
tar xzf /path/to/netdisk/07_源代码/rk35xx-android12-xxxxxxx-YYYYMMDD.tgz cd rk35xx-android12 git pull
11.6.3 编译Android Tablet版本(首次编译)
echo "ROCKCHIP_DEVICE_DIR := device/rockchip/rk3588/nanopi6" > .rockchip_device.mk # export INSTALL_GAPPS_FOR_TESTING=yes # 是否包含google apps . setenv.sh ./build.sh -FMu
11.6.4 编译Android TV版本(首次编译)
echo "ROCKCHIP_DEVICE_DIR := device/rockchip/rk3588/nanopi6_box" > .rockchip_device.mk # export INSTALL_GAPPS_FOR_TESTING=yes # 是否包含google apps . setenv.sh ./build.sh -FMu
11.6.5 二次编译
# export INSTALL_GAPPS_FOR_TESTING=yes # 是否包含google apps . setenv.sh make ./build.sh -Mu
11.6.6 安装Android
Android编译完成后,image文件会存放在Android源代码目录的 rockdev/Image-aosp_nanopi3 子目录下。
11.6.6.1 USB线刷
用rockchip的工具刷入如下文件:rockdev/Image-aosp_nanopi3/update.img
11.6.6.2 SD卡烧写
参考以下步骤:
1) 将安装了 eflasher 系统的SD卡插入电脑;
2) 将 rockdev/Image-aosp_nanopi3 子目录下的文件更新到SD卡 FRIENDLYARM 分区里的android12或androidtv目录:
sudo cp -af parameter.txt config.cfg MiniLoaderAll.bin uboot.img \ dtbo.img vbmeta.img boot.img recovery.img \ misc.img pcba_small_misc.img pcba_whole_misc.img \ baseparameter.img super.img /media/$USER/FriendlyARM/android12
3) 将SD卡插入NanoPi-M6,重新烧写Andorid系统即可;
11.6.7 打包成新的SD Image
git clone https://github.com/friendlyarm/sd-fuse_rk3588.git SDFUSE=$PWD/sd-fuse_rk3588 mkdir $SDFUSE/android12 cd /path/to/rk35xx-android12/rockdev/Image-aosp_nanopi3 cp -af parameter.txt config.cfg MiniLoaderAll.bin uboot.img \ dtbo.img vbmeta.img boot.img recovery.img \ misc.img pcba_small_misc.img pcba_whole_misc.img \ baseparameter.img super.img $SDFUSE/android12 cd $SDFUSE/ ./mk-sd-image.sh android12 tar xvzf /path/to/netdrive/03_Partition\ image\ files/emmc-flasher-images.tgz ./mk-emmc-image.sh android12
更多信息,请参考 #打包新的SD Image
12 板载资源的使用
12.1 使用VPU
请参考 VPU/zh
12.2 使用NPU
请参考 NPU/zh
13 备份文件系统并创建SD映像(将系统及应用复制到另一块开发板)
13.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 /
注:备份时,如果系统中有挂载目录,最后会出现一个错误提示信息,可以无视它,我们本来就是要忽略这些目录
13.2 从根文件系统制作一个可启动的SD卡
在Linux PC上执行以下shell命令,为了简洁起见,这里以debian-bullseye-desktop-arm64系统为例,但方法适用于所有Linux系统。
su root git clone https://github.com/friendlyarm/sd-fuse_rk3588 --single-branch -b kernel-6.1.y cd sd-fuse_rk3588 tar xvzf /path/to/netdrive/03_Partition\ image\ files/debian-bullseye-desktop-arm64-images.tgz tar xvzf /path/to/netdrive/03_Partition\ image\ files/emmc-eflasher-images.tgz scp pi@BOARDIP:/rootfs.tar.gz /rootfs.tar.gz mkdir rootfs tar xvzfp rootfs.tar.gz -C rootfs --numeric-owner --same-owner ./build-rootfs-img.sh rootfs debian-bullseye-desktop-arm64 ./mk-sd-image.sh debian-bullseye-desktop-arm64 ./mk-emmc-image.sh debian-bullseye-desktop-arm64 autostart=yes
14 初始化NVME固态硬盘和USB移动硬盘
14.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
14.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
14.3 硬盘的自动挂载
14.3.1 在FriendlyWrt系统下挂载
在FriendlyWrt菜单中, 点击"系统"->"挂载点"界面, 在页面底部的"挂载点"的区域中, 点击"新增"按钮, 在UUID一栏中,选择你的硬盘分区, NVME固态硬盘选择 /dev/nvme0n1p1, 如果是USB移动硬盘, 则选择 /dev/sda1, 然后钩选"已启动“, 填写挂载硬盘的目标位置, 本例中选择将 NVME固态硬盘 挂载到 /mnt 目录, 如下图所示:
点击"Save"按钮保存设置, 挂载完成后界面会列出所挂载的硬盘, 如下图所示:
14.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
14.4 为硬盘设置网络共享
14.4.1 提升硬件挂载目录的权限
为了方便普通用户的读取, 进入终端, 输入以下命令先提升硬件挂载目录的权限:
chmod 777 /mnt
14.4.2 FriendlyWrt下设置网络共享
进入 “服务” -> "网络共享" 菜单, 在页面底部的 “共享目录” 区域, 点击 “新增” 按钮, 分别填写 "名称" 与 "路径" 为 mnt 和 /mnt, 其他默认, 点击 "保存并应用" 即可.
14.4.3 在电脑上访问共享
在Windows电脑上输入以下地址访问共享目录:
\\192.168.2.1\mnt
在Ubuntu/Mac电脑上使用以下地址访问共享目录:
smb://192.168.2.1/mnt
在询问身份验证时, 输入如下信息:
连接方式: 已注册用户
用户名: root
域: WORKGROUP
密码: password
14.5 本机上进行硬盘速度测试
14.5.1 NVME固态硬盘速度测试
14.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
14.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
14.5.2 USB移动机械硬盘速度测试
14.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
14.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
15 Linux操作系统的常见操作
15.1 Linux系统下使用adb
15.1.1 buildroot系统下开启adb功能
开机自动开启
mv /etc/init.d/K50usbdevice.sh /etc/init.d/S50usbdevice.sh reboot
临时开启
usbdevice-wrapper start
15.1.2 ubuntu和debian系统下开启adb功能
开机自动开启
sudo systemctl enable usbdevice sudo reboot
临时开启
usbdevice-wrapper start
15.1.3 如何连接
使用adb时,与电脑相连接的端口与usb线刷的端口相同。
15.2 安装内核头文件
安装位于/opt/archives目录下的deb文件:
sudo dpkg -i /opt/archives/linux-headers-*.deb
在线下载并更新内核头文件:
wget http://112.124.9.243/archives/rk3588/linux-headers-$(uname -r)-latest.deb
sudo dpkg -i ./linux-headers-latest.deb
可以访问 http://112.124.9.243/archives/rk3588 查看有哪些内核deb包。
15.3 更新内核到最新版本
会更新内核到kernel和resource分区,同时更新内核模块:
wget http://112.124.9.243/archives/rk3588/linux-image-$(uname -r)-latest.deb
sudo dpkg -i ./linux-image-latest.deb
sudo reboot
15.4 设置内核启动参数 (仅支持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
16 救砖办法
如何固件没有正确安装,导致开发板变砖,而且可能没有机会通过SD卡重新安装固件,这时,就需要进入Maskrom模式,通过擦除存储设备的办法救砖。
16.1 Windows用户
16.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
16.1.2 进入Maskrom模式擦除存储设备
- 使用USB数据线将NanoPi-M6与电脑相连接
- 在电脑上启动 RKDevTool
- 将NanoPi-M6断开电源,按住 MASK 键,连接电源,当看到界面下方显示 Found One MASKROM Device 时松开按键, 如下图所示:
- 在 RKDevTool 界面上点击 Advanced Function 选项卡
- 在 Boot 编辑框中选择 MiniLoaderAll.bin,然后点击 Download 按钮
- 选中 EMMC,点 Switch Storage,再点击 ErashAll 按钮擦除eMMC
- 至此,NanoPi-M6恢复至初始状态,可以正常通过SD卡或eMMC引导系统了
16.2 Linux/Mac用户
16.2.1 下载所需文件
- 获取所需工具:访问这里,在 05_Tools 目录中找到 upgrade_tool_v2.30_for_linux.tgz (或Mac用户选upgrade_tool_v2.25_for_mac.tgz) 下载到本地
- 获取loader: 访问这里,进入CPU型号对应的tools目录,下载 MiniLoaderAll.bin
16.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
16.2.3 进入Maskrom模式擦除存储设备
- 使用USB数据线将NanoPi-M6与电脑相连接
- 将NanoPi-M6断开电源,按住 MASK 键,连接电源,4秒后松开按键
- 用如下命令检查连接:
upgrade_tool LD
显示类似 "DevNo=1 Vid=0x2207,Pid=0x350b,LocationID=13 Mode=Maskrom SerialNo=" 的内容表示已检测到设备。
- 用如下命令擦除eMMC:
upgrade_tool EF MiniLoaderAll.bin
- 至此,NanoPi-M6恢复至初始状态,可以正常通过SD卡或eMMC引导系统了
17 Link to Rockchip Resources
18 手册原理图等开发资料
- Schematic: NanoPi_M6_2405_SCH.PDF
- PCB CAD File:NanoPi_M6_2405_2D_CAD_DXF.zip
19 更新日志
首次发布