NanoPi M4V2/zh

From FriendlyELEC WiKi
Jump to: navigation, search

English

Contents

1 介绍

Overview
Front
Back
  • NanoPi M4V2是基于RK3399 SoC设计的一款接口尺寸与树莓派3兼容的嵌入式ARM计算机。它的尺寸只有85x56mm,接口丰富, 布局紧凑, 非常适合二次开发, 并方便嵌入到最终产品中去。
  • NanoPi M4V2板载2.4G & 5G双频WiFi蓝牙模组, 除了带有4个USB3.0 A型主口, 1个千兆以太网口, 1个HDMI 2.0 A型口, 1个3.5mm耳机输出, 和1个Type-C接口, 还带有丰富的扩展接口,包括40Pin树莓派兼容口, 双摄像头接口MIPI-CSI, PCIe x2, USB2.0, eMMC模块接口, RTC等接口。
  • NanoPi M4V2有4GB LPDDR4, 可使用TF卡启动运行系统,并可外扩eMMC模块启动运行系统。
  • NanoPi M4V2支持运行Ubuntu Desktop 18.04 (64-bit), Lubuntu 16.04(32-bit), Ubuntu Core 18.04(64-bit), Android 8等多种系统, 它们均带有GPU和VPU加速处理,依托于强大的计算性能和丰富接口,它非常适用于基于机器视觉和人工智能的门禁系统,深度计算,自主机器人,工业控制,工业相机,广告机,游戏机,区块链等方面的应用。

2 硬件特性

  • 主控芯片: Rockchip RK3399
    • CPU: big.LITTLE大小核架构,双Cortex-A72大核(up to 2.0GHz)+四Cortex-A53小核结构(up to 1.5GHz)
    • GPU: Mali-T864 GPU,支持OpenGL ES1.1/2.0/3.0/3.1, OpenCL, DX11, 支持AFBC(帧缓冲压缩)
    • VPU: 支持4K VP9 and 4K 10bits H265/H264 视频解码,高达60fps, 双VOP显示等视频编解码功能
  • 电源管理单元: RK808-D PMIC, 搭配独立DC/DC, 支持动态调压, 软件关机, 按键开机, RTC唤醒, 睡眠唤醒等功能
  • 内存: 双通道4GB LPDDR4
  • Flash: 支持扩展eMMC模块
  • 有线网络: 原生千兆以太网
  • Wi-Fi/蓝牙: 802.11a/b/g/n/ac, Bluetooth 4.1 双频Wi-Fi蓝牙模块, 2x2 MIMO, 双天线
  • 视频输入: 1个或2个4线MIPI-CSI, 双ISP像素处理能力高达13MPix/s,支持双路摄像头数据同时输入
  • 视频输出
    • HDMI: HDMI 2.0a, 支持4K@60Hz显示,支持HDCP 1.4/2.2
    • LCD Interface: 一个4线MIPI-DSI
  • Audio Out: 3.5mm 双通道耳机接口, 或者通过HDMI输出
  • Audio In: 3.5mm耳机座子麦克风输入
  • USB 3.0: 4个USB 3.0 Host A型接口
  • USB Type-C: 支持USB2.0 OTG 和 5V电源输入
  • microSD Slot x 1
  • 40Pin GPIO 扩展接口:
    • 2 X 3V/1.8V I2C, up to 1 x 3V UART, 1 X 3V SPI, 1 x SPDIF_TX, up to 8 x 3V GPIOs
    • 1 x 1.8V 8通道 I2S
  • 24Pin 扩展接口:
    • 2个独立的原生USB 2.0 Host
    • PCIe x2
    • PWM x1, PowerKey
  • 按键:一个电源按键(PowerKey),一个系统恢复按键(RecoveryKey)
  • 调试串口: 4 Pin 2.54mm 调试串口, 3V电平, 波特率为1500000
  • LED: 1 x power LED and 1 x GPIO Controled LED
  • RTC电池座子: 2 Pin 1.27/1.25mm RTC备份电池接口
  • 供电电源: DC 5V/3A
  • PCB: 8 Layer, 85 mm x 56 mm
  • 环境工作温度: -20℃ to 70℃

3 接口布局和尺寸

3.1 接口布局

NanoPi M4V2 Layout
  • 40-Pin GPIO1 引脚定义
Pin# Assignment Pin# Assignment
1 VCC3V3_SYS 2 VDD_5V
3 I2C2_SDA(3V) 4 VDD_5V
5 I2C2_SCL(3V) 6 GND
7 GPIO1_A0(3V) 8 GPIO4_C1/I2C3_SCL(3V)
9 GND 10 GPIO4_C0/I2C3_SDA(3V)
11 GPIO1_A1(3V) 12 GPIO1_C2(3V)
13 GPIO1_A3(3V) 14 GND
15 GPIO1_A4(3V) 16 GPIO1_C6(3V)
17 VCC3V3_SYS 18 GPIO1_C7(3V)
19 SPI1_TXD/UART4_TX(3V) 20 GND
21 SPI1_RXD/UART4_RX(3V) 22 GPIO1_D0(3V)
23 SPI1_CLK(3V) 24 SPI1_CSn0(3V)
25 GND 26 GPIO4_C5/SPDIF_TX(3V)
27 I2C2_SDA(1.8V) 28 I2C2_SCL(1.8V)
29 I2S0_LRCK_RX(1.8V) 30 GND
31 I2S0_LRCK_TX(1.8V) 32 I2S_CLK(1.8V)
33 I2S0_SCLK(1.8V) 34 GND
35 I2S0_SDI0(1.8V) 36 I2S0_SDO0(1.8V)
37 I2S0_SDI1SDO3(1.8V) 38 I2S0_SDI2SDO2(1.8V)
39 GND 40 I2S0_SDI3SDO1(1.8V)
  • 24-Pin GPIO2 引脚定义
Pin# Assignment Pin# Assignment
1 VCC5V0_SYS 2 VCC5V0_SYS
3 PCIE_RX1_P 4 PCIE_TX1P
5 PCIE_RX1_N 6 PCIE_TX1N
7 GND 8 GND
9 PCIE_RX0_P 10 PCIE_TX0P
11 PCIE_RX0_N 12 PCIE_TX0N
13 GND 14 GND
15 PCIE_REF_CLKP 16 HOST0_DM
17 PCIE_REF_CLKN 18 HOST0_DP
19 GND 20 GND
21 PWR_KEY 22 HOST1_DM
23 GPIO4_C6/PWM1(3V) 24 HOST1_DP
  • MIPI-CSI接口引脚定义
0.5mm FPC 连接器
MIPI-CSI2也可作为MIPI-DSI接口连接LCD显示屏
Pin# MIPI-CSI1 MIPI-CSI2 Description
1 VCC5V0_SYS VCC5V0_SYS 5V Power ouput
2 VCC5V0_SYS VCC5V0_SYS 5V Power ouput
3 GND GND Return current path
4 VCC_CSI_AF2.8V VCC_CSI_AF2.8V 2.8V Power for VCM
5 VCC_CSI_1.2V VCC_CSI_1.2V 1.2V Power for image sensor core circuit
6 VCC1V8_CAM VCC1V8_CAM 1.8V power for I/O circuit
7 VCC_CSI_2.8V VCC_CSI_2.8V 2.8V power for image sensor analog circuit
8 VCC_CSI_1.0V VCC_CSI_1.0V 1.0V Power for image sensor core circuit
9 I2C1_SCL I2C2_SCL 1.8V I2C clock signal
10 I2C1_SDA I2C2_SDA 1.8V I2C data signal
11 MIPI_CSI0_RST MIPI_CSI1_RST reset camera module
12 MIPI_CSI0_PWN MIPI_CSI1_PWN Power down camera module
13 GND GND Return current path
14 GPIO2_B3_CIF_CLKOUTA GPIO2_B3_CIF_CLKOUTA MCLK to camera module
15 GND GND Return current path
16 MIPI_RX0_D3P MIPI_TX1/RX1_D3P MIPI CSI positive differential data line transceiver output
17 MIPI_RX0_D3N MIPI_TX1/RX1_D3N MIPI CSI negative differential data line transceiver output
18 GND GND Return current path
19 MIPI_RX0_D2P MIPI_TX1/RX1_D2P MIPI CSI positive differential data line transceiver output
20 MIPI_RX0_D2N MIPI_TX1/RX1_D2N MIPI CSI negative differential data line transceiver output
21 GND GND Return current path
22 MIPI_RX0_D1P MIPI_TX1/RX1_D1P MIPI CSI positive differential data line transceiver output
23 MIPI_RX0_D1N MIPI_TX1/RX1_D1N MIPI CSI negative differential data line transceiver output
24 GND GND Return current path
25 MIPI_RX0_CLKP MIPI_TX1/RX1_CLKP MIPI CSI positive differential clock line transceiver output
26 MIPI_RX0_CLKN MIPI_TX1/RX1_CLKN MIPI CSI negative differential clock line transceiver output
27 GND GND Return current path
28 MIPI_RX0_D0P MIPI_TX1/RX1_D0P MIPI CSI positive differential data line transceiver output
29 MIPI_RX0_D0N MIPI_TX1/RX1_D0N MIPI CSI negative differential data line transceiver output
30 GND GND Return current path
  • eMMC Socket接口引脚定义
Pin# Assignment Pin# Assignment
1 EMMC_D0 2 EMMC_D1
3 EMMC_D2 4 EMMC_D3
5 EMMC_D4 6 EMMC_D5
7 EMMC_D6 8 EMMC_D7
9 EMMC_STRB 10 GND
11 EMMC_CMD 12 EMMC_CLKO
13 N/C 14 GND
15 N/C 16 VCC1V8_S3
17 eMMC_RST 18 VCC3V3_S3
19 GND 20 GND
  • 调试串口引脚定义
3V电平, 波特率1500000bps
Pin# Assignment Description
1 GND 0V
2 VCC5V0_SYS 5V power output
3 UART2DBG_TX output
4 UART2DBG_RX intput
  • USB接口
USB 3.0 接口具有2A过流保护功能.
  • RTC
我们实测的RTC备份电流为27uA.
连接器型号: Molex 53398-0271
其他说明
  1. 只能从Type-C或40-pin GPIO接口的第2和第4脚给板子供电, 电压范围4.7~5.5V
  2. 板子原理图: NanoPi-M4V2_1908_Schematic.pdf

3.2 尺寸

PCB dxf文件, 仅供做产品时结构设计使用: NanoPi_M4V2_1908(DXF).zip

4 快速入门

4.1 准备工作

要开启你的NanoPi-M4V2,请先准备好以下硬件:

  • NanoPi-M4V2主板
  • Type-C数据线
  • TF卡: Class10或以上的8GB microSD卡
  • USB转串口适配器(可选,用于调试或PC上进行操作)
  • 一个5V/3A或以更大功率的电源适配器
  • 一台支持HDMI输入的显示器或者电视(或选购LCD配件)
  • 一套USB键盘鼠标,同时连接更多USB的设备时还需要USB HUB
  • 一台电脑,需要联网,建议使用Ubuntu 18.04 64位系统

4.2 安装系统

4.2.1 下载固件

4.2.1.1 官方固件

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

  • sd: 安装系统到TF卡时使用
  • eflasher: 需要通过TF卡烧写系统到eMMC时使用
  • usb: USB线刷时使用
图标 文件名 版本 描述 内核版本
Android-icon.svg rk3399-XYZ-android10-YYYYMMDD.img.zip 10 Android 10 4.4.y
Android-icon.svg rk3399-XYZ-android8-YYYYMMDD.img.zip 8.1 Android 8.1 4.4.y
Android-icon.svg rk3399-XYZ-android7-YYYYMMDD.img.zip 7.1.2 Android 7.1.2 4.4.y
Debian-icon.svg rk3399-XYZ-debian-bullseye-minimal-4.19-arm64-YYYYMMDD.img.gz bullseye Debian11 系统固件,LXDE桌面, 不预装推荐软件包, 支持GPU/VPU硬件加速 4.19.y
Debian-icon.svg rk3399-XYZ-debian-bullseye-desktop-4.19-arm64-YYYYMMDD.img.gz bullseye Debian11 完整版固件,LXDE桌面, 预装推荐软件包, 支持GPU/VPU硬件加速 4.19.y
Debian-icon.svg rk3399-XYZ-debian-bookworm-core-4.19-arm64-YYYYMMDD.img.gz bookworm Debian12 精简版固件,没有桌面, 仅命令行 4.19.y
Ubuntu-icon.svg rk3399-XYZ-ubuntu-focal-desktop-4.19-arm64-YYYYMMDD.img.gz focal Ubuntu 20.04固件, LXQT桌面,支持GPU/VPU硬件加速 4.19.y
Ubuntu-icon.svg rk3399-XYZ-friendlydesktop-bionic-4.4-arm64-YYYYMMDD.img.zip bionic 64位FriendlyDesktop桌面固件(内置Qt 5.10.0, X-Window),基于Ubuntu Desktop 18.04构建 4.4.y
Ubuntu-icon.svg rk3399-XYZ-friendlycore-focal-4.19-arm64-YYYYMMDD.img.gz focal 64位FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core 20.04构建 4.19.y
Ubuntu-icon.svg rk3399-XYZ-friendlycore-bionic-4.4-arm64-YYYYMMDD.img.gz bionic 64位FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core 18.04构建 4.4.y
Ubuntu-icon.svg rk3399-XYZ-lubuntu-desktop-xenial-4.4-armhf-YYYYMMDD.img.zip xenial Lubuntu桌面版固件(内置Qt 5.10.0, X-Window) 4.4.y
Ubuntu-icon.svg rk3399-XYZ-ubuntu-noble-core-4.19-arm64-YYYYMMDD.img.gz noble 精简版64位Ubuntu系统固件,基于Ubuntu core 24.04构建 4.19.y
Openmediavault250.png rk3399-XYZ-openmediavault-6.1-YYYYMMDD.img.gz Shaitan OpenMediaVault NAS系统,基于Debian12构建 6.1.y
Linux-tux.svg rk3399-XYZ-buildroot-4.19-arm64-YYYYMMDD.img.gz -- Buildroot 固件,基于Rockchip Linux SDK,带Qt5-wayland图形界面 4.19.y
Openwrt-icon.svg rk3399-XYZ-friendlywrt-21.02-YYYYMMDD.img.gz 21.02 FriendlyWrt, 基于OpenWrt 21.02 6.1.y
Openwrt-icon.svg rk3399-XYZ-friendlywrt-21.02-docker-YYYYMMDD.img.gz 21.02 预装了Docker的FriendlyWrt, 基于OpenWrt 21.02 6.1.y
Openwrt-icon.svg rk3399-XYZ-friendlywrt-23.05-YYYYMMDD.img.gz 23.05 FriendlyWrt, 基于OpenWrt 23.05 6.1.y
Openwrt-icon.svg rk3399-XYZ-friendlywrt-23.05-docker-YYYYMMDD.img.gz 23.05 预装了Docker的FriendlyWrt, 基于OpenWrt 23.05 6.1.y
Other Image
Openwrt-icon.svg Github Actions - FriendlyWrt云编译版本 21.02,23.05 FriendlyWrt 6.1.y
Linux-tux.svg rk3399-XYZ-multiple-os-YYYYMMDD-25g.img.gz - 内含了多个操作系统的eMMC烧写文件,方便测试各个OS,此固件不会开机自动烧写,需要手动选择要烧写的OS
4.2.1.2 工具软件(可选)

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

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

4.2.2 通过TF卡运行系统

操作步骤如下:

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

4.2.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-M4V2上连接好存储设备,插入TF卡上电开机,接下来要在界面上操作,如果没有显示设备,可以使用VNC代替,请参考使用VNC操作eFlasher;
  • 在eFlasher界面上,首先选择要安装的OS,然后选择引导安装的目的地 (通常选eMMC),以及选择系统安装的目的地(可以选eMMC,M.2硬盘,USB存储设备等),如下图所示:

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

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

4.3 串口调试

如果你想查看NanoPi-M4V2启动时更多详细的信息,或者更直接的对其进行控制,建议连接并使用调试串口。

  • 使用准备好的USB转串口适配器和连接线(需另购),连接开发板:
Pin# 开发板调试串口 USB转串口适配器
1 GND GND
2 VCC5V0_SYS NC (不需要连接)
注: Matrix USB2UART适配器,请将5V ON/OFF切换到OFF
3 UART2DBG_TX RX
4 UART2DBG_RX TX
  • 将USB转串口适配器连接到PC Linux,通常会识别为ttyUSB0,或使用以下命令来确定设备名字:
 dmesg | grep ttyUSB
 ls -l /dev/ttyUSB*
  • 在PC Linux安装minicom,运行minicom,配置串口设备和参数(1500000 Bps, 8N1, 流控无)
 sudo apt-get install minicom
 minicom -s

注意: RK3399调试串口的波特率缺省是1500000,有些适配器可能达不到此速率,还有可能因USB延长线或连接到USB hub出现异常(如乱码),需检查并更换。

5 Debian11 桌面系统的使用

5.1 Debian11桌面系统简介

Debian11 Desktop 是一个轻量级的Debian桌面环境,具有如下特点:

  • 桌面环境采用 LXDE, 多种主题可选, 简洁美观, 占用资源少;
  • 提供基于 Mali GPU 的 OpenGL 支持;
  • 支持Rockhip MPP视频硬编和硬解码;
  • 预装基于mpv的Kodi, SMPlayer播放器, 均支持4K视频硬解码;
  • 预装Chromium浏览器, 支持vpu/gpu硬件加速 (视频硬解限h264/mp4格式);
  • 支持安装Plex Server, Docker与wps等应用, 玩法丰富;

Debian10-lxde.png

5.2 帐户与密码

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

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

5.3 查看IP地址

由于Debian主机名默认为硬件型号, 所以可以使用ping命令来获得IP地址: ping NanoPi-M4V2

5.4 通过ssh登录Debian

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

5.5 更新软件包

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

5.6 安装x11vnc远程桌面

x11vnc是一个VNC服务器, 安装后我们可以不依赖外部的显示设备, 通过网络远程登录Debian桌面。

5.6.1 安装x11vnc

sudo apt-get install x11vnc

5.6.2 设置VNC登录密码

sudo x11vnc -storepasswd /etc/x11vnc.pwd

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

5.6.4 测试远程桌面

在电脑上启动VNC客户端软件, 在地址栏输入: IP地址:5900 连接即可, 效果如下图所示, 图中设备IP地址为192.168.1.123, 使用端口5900进行连接:
Debian10-x11vnc.png

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

5.8 更改时区

5.8.1 检查当前时区

timedatectl

5.8.2 列出所有时区

timedatectl list-timezones

5.8.3 设置时区 (比如上海)

sudo timedatectl set-timezone Asia/Shanghai

5.9 更换开机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,请根据实际情况指定

5.9.2 更换桌面墙纸

修改如下配置文件:

/home/pi/.config/pcmanfm/LXDE/desktop-items-0.conf

5.9.3 恢复出厂设置

在终端上执行如下命令:

sudo firstboot && sudo reboot

5.10 开机自动启动程序(例如Kodi)

把要开机启动的程序的desktop文件放入~/.config/autostart/目录即可,例如:

mkdir ~/.config/autostart/
cp /usr/share/applications/kodi.desktop ~/.config/autostart/

5.11 取消USB存储设备自动挂载

sudo systemctl mask udisks2
sudo reboot

5.12 设置中文语言与输入法

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

5.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即可切换中英文输入法, 右上角也出现了输入法图标, 右击右上角的输入法图标, 在弹出菜单中可以切换输入法, 如下图所示:
Debian10-chinese-im.png

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

5.14 在Debian系统上安装Docker

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

5.15 如何测试NPU

请参考此链接: NPU/zh

5.16 如何测试VPU

请参考此链接: VPU/zh

5.17 设置WiFi无线链接

5.17.1 图形界面操作

点击右上角的网络图标,选择你要连接的WiFi热点,按界面提示操作即可。

5.17.2 命令行操作

请参考 Use NetworkManager to configure network settings/zh

5.18 取消自动登录

编辑文件:

sudo vim /etc/lightdm/lightdm.conf

注释掉如下两行内容 (在前面插入#):

autologin-user=pi
autologin-user-timeout=0

5.19 测试OpenGL ES性能

在系统菜单 System Tools 中点击 Terminator 打开命令行终端,输入以下命令即可测试:

glmark2-es2

5.20 设置HDMI/DP屏幕分辨率

进入系统菜单 Perferences -> Monitor Settings界面进行设置即可。
推荐分辨率:1920x1080@60Hz

5.21 调节HDMI边界

打开命令行终端,输入命令进行操作,有几个注意事项:
1) 需要登录桌面才能操作,如果Desktop停留在Login是无法设置的;
2) 如果你是在 ssh 登录的终端,请使用与桌面登录相同的用户名,默认是 pi,不能使用root用户,同时,你需要赋值 DISPLAY 变量:

export DISPLAY=:0.0

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

5.21.2 设置分辨率

例如设置为 1920X1080@60Hz:

xrandr --output HDMI-1 --mode 1920x1080 --refresh 60

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

5.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'
OnlyShowIn=LXDE

5.22 Chromium网页浏览器

5.22.1 GPU支持情况

系统预装的Chromium网页浏览器已经默认启用硬件加速,支持WebGL,可以通过输入网址 chrome://gpu 了解硬件加速情况,如下图所示:
Rk35xx-debian-chromium-gpu.png

5.22.2 VPU支持情况

在浏览器上播放一个视频,然后在命令行使用fuser查看mpp设备节点的使用情况来确认已经调用了vpu:

pi@FriendlyElec:~$ fuser /dev/mpp_service
/dev/mpp_service:     3258

如果fuser命令没有内容输出, 则表示当前是软解.

5.22.3 查看支持的硬解格式

在浏览器地址栏输入 about://gpu,翻页到页面最底部,查看 "Video Acceleration Information" 表格;
播放一个视频后,再在浏览器地址栏输入 about://media-internals, 可以查看最近播放的视频是否启用了硬解;

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

6 Debian10 桌面系统的使用

7 FriendlyDesktop系统的使用

Friendlydesktop-home.png

Arduino
Firefox
Scratch

FriendlyDesktop 是一个轻量级的Ubuntu桌面环境,其底层基于LXDE桌面构建,具有如下特点:
    最新版本 - 基于Ubuntu 18.04 64位系统构建。
    易于开发 - 兼容FriendlyCore的特性,集成经过优化的Qt5.10, QtCreator和Arduino IDE。
    轻巧 - 只需要很少的CPU资源即可执行顺畅,而且当内存容量充足时表现特别出色。
    省能源 - 它比其他常见的系统需要较少的资源运行相同的工作。
    简朴美 - 借由GTK+ 2,它拥有美观、支持国际化的用户界面。
    使用简单 - 提供用户如微软Windows般的应用程序列表。
    可自定义性 - 用户可以轻易自定义LXDE的外观。
    兼容标准 - 兼容于freedesktop.org标准。
用于友善电子RK3399平台的FriendlyDesktop已经最佳化了对Mali GPU和VPU的支持,系统中已集成X.org驱动,支持Hardware Cursor、OpenGL图形加速等,支持4K硬解视频播放。

7.1 帐户与密码

普通用户:

   用户名: pi
   密码: pi

Root用户:

   用户名: root
   密码: fa

7.2 设置WiFi无线链接

点击FriendlyDesktop右上角的网络图标,选择你要连接的WiFi热点,按界面提示操作即可。

7.3 设置HDMI/DP屏幕分辨率

进入系统菜单 Perferences -> Monitor Settings界面进行设置即可。
推荐分辨率:1920x1080@60Hz

7.4 调节HDMI边界

打开命令行终端,输入命令进行操作,有几个注意事项:
1) 需要登录桌面才能操作,如果Desktop停留在Login是无法设置的;
2) 如果你是在 ssh 登录的终端,请使用与桌面登录相同的用户名,默认是 pi,不能使用root用户,同时,你需要赋值 DISPLAY 变量:

export DISPLAY=:0.0

7.4.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.4.2 设置分辨率

例如设置为 1920X1080@60Hz:

xrandr --output HDMI-1 --mode 1920x1080 --refresh 60

7.4.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.4.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'
OnlyShowIn=LXDE

7.5 设置eDP显示屏旋转

如果要旋转eDP屏的显示,可使用命令xrotate.sh 来旋转90/180/270度。 以root用户运行以下命令,即可顺时钟旋转90度,命令执行过程中,会重启lightdm服务让设置立即生效:

sudo xrotate.sh -m CW -r

其他旋转角度,可以通过运行 xrotate -h 命令获得详细的参数说明。
另外,该命令暂不支持HDMI显示的旋转,用户参考X11的文档,自行编辑 /etc/X11/xorg.conf 配置文件。

注意:硬解视频时,视频窗口并不会跟随屏幕旋转。

7.6 测试OpenGL ES性能

在系统菜单 System Tools 中点击 Terminator 打开命令行终端,输入以下命令即可测试:

taskset -c 4-5 glmark2-es2

Friendlydesktop-glmark-es.png
Friendlydesktop-glmark-es2-score.jpg

7.7 如何播放4K视频

7.7.1 使用Qt硬解播放器播放

FriendlyDesktop预装了Qt播放器Qt5-VideoPlayer,该播放器已经适配Rockchip的gstreamer插件,支持4K视频的硬解播放, 播放器启动方法: 在FriendlyDesktop上打开菜单 Sound & Video,点击 Qt5-VideoPlayer。

在播放器界面上,点击左下角的 Open 按钮加载一个视频文件到右边的播放列表,双击播放列表上的文件开始播放。播放器的界面如下所示,可以设置全屏播放,也可以调节音量:
Friendlydesktop-player.jpg
Qt播放器源代码: https://github.com/friendlyarm/rk-player-qt

7.7.2 命令行播放

打开命令行终端,输入以下命令即可测试:

gst-player.sh

默认音频会输出到耳机孔, 可以使用 which gst-player.sh 找到这个脚本的位置,自已定制其播放的行为。

7.8 如何使用USB摄像头

将USB摄像头(比如罗技C270/C920)插入开发板,双FriendlyDesktop桌面上的USB Camera会弹出luvcview预览界面 (需要使用2019/05/11版本以上的FriendlyDesktop),在界面上点击中间的录像按钮可以录像.
luvcview 是一个开源软件,你可以自行编译:

git clone https://github.com/ksv1986/luvcview
cd luvcview
make

查看luvcview的用法:

./luvcview -h

参数说明:

luvcview version 0.2.1
usage: uvcview [-h -d -g -f -s -i -c -o -C -S -L -l -r]
-h    print this message
-d    /dev/videoX       use videoX device
-g    use read method for grab instead mmap
-w    disable SDL hardware accel.
-f    video format  default jpg  others options are yuv jpg
-i    fps           use specified frame interval
-s    widthxheight      use specified input size
-c    enable raw frame capturing for the first frame
-C    enable raw frame stream capturing from the start
-S    enable raw stream capturing from the start
-o    avifile  create avifile, default video.avi
-L    query valid video formats
-l    query valid controls and settings
-r    read and set control settings from luvcview.cfg

以640x360@30fps的格式预览USB摄像头图像可以使用以下命令:

./luvcview -d /dev/video8 -i 30 -s 640x360

从luvcview的输出信息可以看到,硬件加速已经开启:

pi@NanoPC-T4:/etc/xrdp$ luvcview -d /dev/video8 -i 30 -s 640x360
luvcview version 0.2.1
 interval: 30 fps
Hardware acceleration available
video /dev/video8

7.9 如何通过蓝牙传输文件

在FriendlyDesktop上打开菜单 Preferences,启动 Bluetooth Manager,在界面上点 Search 即可搜索周边的蓝牙设备, 点击你的设备进行配对,配对后即可发送文件,如下图所示:
Friendlydesktop-ble-sendfile.jpg

7.10 安装使用OpenCV

OpenCV has been pre-installed in FriendlyCore/FriendlyDesktop (Version after 201905) and does not require manual installation.
Please refre this link: https://github.com/friendlyarm/install-opencv-on-friendlycore/blob/rk3399/README.md

7.11 开发Qt程序

FriendlyDesktop下提供了重新编译的 Qt 5.10.0,支持RK3399的OpenGL ES和Gstreamer 1.0的硬件加速,同时集成了 QtCreator IDE,已配置好可以直接在开发板上编译并运行程序,如下所示:
Friendlydesktop-qtcreator.png
运行Qt程序时,需要指定platform参数为xcb,如下所示:

./HelloQt --platform xcb

7.12 访问GPIO/I2C/串口等硬件资源

请参考下面的文档:

7.13 切换音频默认输出设备

7.13.1 查看当前默认的输出设备

在普通用户的终端上,输入以下命令:

pactl info -vvv

显示的信息包含以下内容,表示当前音频输出到耳机:

Default Sink: alsa_output.platform-rt5651-sound.stereo-fallback

显示的信息包含以下内容,表示当前音频输出到HDMI:

Default Sink: alsa_output.platform-hdmi-sound.stereo-fallback

7.13.2 设置默认的音频输出设备为耳机口

在普通用户的终端上,输入以下命令:

pactl set-default-sink  alsa_output.platform-rt5651-sound.stereo-fallback

设置耳机口输出的默认音量为20%:

pactl -- set-sink-volume alsa_output.platform-rt5651-sound.stereo-fallback 20%

7.13.3 设置默认的音频输出设备为HDMI

在普通用户的终端上,输入以下命令:

pactl set-default-sink  alsa_output.platform-hdmi-sound.stereo-fallback

7.13.4 查看设置是否已生效

cat /var/lib/pulse/*-default-sink

7.13.5 播放时临时切换

这种方法仅对当前的播放进程有效:
打开菜单 "Sound & Video" -> "PulseAudio Volume Control", 在界面上点击 "Built-in Audio Stereo" 按钮切换不同的输出设备,比如在HDMI与耳机接口之间切换。

7.14 播放网络流媒体(或网络摄像头)

打开命令行终端,输入以下命令:

gst-launch-1.0 rtspsrc location="rtsp://admin:12345@192.168.1.120:554/live/main" ! rtph264depay ! decodebin ! rkximagesink

请将 rtsp:// 后面的地址改成真实的地址。

7.15 Chromium网页浏览器

系统预装的Chromium网页浏览器已经默认启用硬件加速,支持WebGL,可以通过输入网址 chrome://gpu 了解硬件加速情况,如下图所示:
Chromium-gpu.png

7.16 屏幕保护与自动休眠相关设置

屏幕保护与自动休眠的配置文件是 /etc/xdg/autostart/xset_command.desktop,默认出厂的设置是屏幕保护和DPMS都是关闭的,你可以通过修改这个文件来更改配置,具体可以了解一下Linux下 xset 命令的用法。

7.17 安装Scratch

用以下命令安装:

sudo apt-get install scratch:arm64

7.18 安装Arduino IDE

用以下命令安装:

sudo apt-get install arduino:arm64

7.19 开机自动启动程序

把要开机启动的程序的desktop文件放入~/.config/autostart/目录即可,例如:

cp /usr/share/applications/org.qt-project.qtcreator.desktop ~/.config/autostart/

7.20 用root用户登录桌面

编辑 /root/.profile文件:

sudo vim /root/.profile

替换成如下内容:

if [ -n "$BASH_VERSION" ]; then
    if [ -f "$HOME/.bashrc" ]; then
	. "$HOME/.bashrc"
    fi
fi
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

执行以下命令修改lightdm的配置文件,将自动登录的用户名改成 root:

sudo sed -i 's/autologin-user=pi/autologin-user=root/g' /usr/share/lightdm/lightdm.conf.d/20-defaultsession.conf

执行reboot命令重启:

sudo reboot

如果希望登录后,桌面图标与配置等都与pi用户一样,可以从/home/pi目录复制相关的目录过来:

sudo rm -rf /root/Desktop /root/Pictures /root/.config
sudo cp -af /home/pi/Desktop /home/pi/Pictures /home/pi/.config /root/
sudo chown root:root /root/Desktop /root/Pictures /root/.config

7.21 FriendlyDesktop下使用NVME SSD

请参考: How to Initialize and Format New SSD And HDD

8 FriendlyCore的使用

8.1 介绍

FriendlyCore,是一个没有预装X Desktop,基于Ubuntu core构建的系统 (版本: 18.04)。

FriendlyCore的定位是为企业客户提供可直接用于产品的基础OS,Core的含义是指"核心"与"可量产",FriendlyCore与Ubuntu base最小系统的定位不同,FriendlyCore并不只是提供命令行界面,它提供了两种形式的图形界面:
1)针对RK3399优化的Qt 5.10.0,支持GPU和VPU加速,提供QtQuick/QtWebEngine/QtMultimedia/WebGL等Qt模块以及KMS、EGLFS和XCB三种显示插件;
2) 集成Xorg最小系统,可以以最轻量的方式运行X11应用,X11服务器同样支持硬件加速;

FriendlyCore在 RK3399 平台下的其他特性还包括:

  • 支持7寸电容屏HD702,与HDMI同时连接时,可实现双屏异显,或者同步显示
  • 支持 Gstreamer 1.0 多媒体框架
  • 支持命令行和Qt硬解播放器
  • 支持Qt5 WebGL,可以在其他设备上用浏览器上显示Qt界面
  • 支持Qt5 VNC,可以将Qt应用作为VNC Server的形式运行,轻松实现远程控制
  • 支持蓝牙,已预装bluez等相关软件包

8.2 运行FriendlyCore

  • 对于有HDMI接口的板子,如果要在电视上进行操作,您需要连接USB鼠标和键盘。
  • 如果您需要进行内核开发,最好选购一个串口配件,连接了串口,则可以通过串口终端对开发板进行操作。

NanoPi-M4V2需要使用USB转串口模块,连接方法如下图所示:
M4usb2serialport.jpg

  • FriendlyCore默认帐户:

普通用户:

   用户名: pi
   密码: pi

Root用户:

   用户名: root
   密码: fa

默认会以 pi 用户自动登录,你可以使用 sudo npi-config 命令取消自动登录。

  • 更新软件包:
$ sudo apt-get update

8.3 开发Qt程序

FriendlyELEC为RK3399平台移植的 Qt 5.10.0 支持以下显示设备插件:KMS、EGLFS和XCB,这三种插件均支持OpenGL ES和GPU硬件加速,只是调用方式不同,具体如下:

  • KMS – 使用Linux内核的DRM显示接口来渲染界面
  • EGLFS – 使用OpenGL ES接口来渲染界面
  • XCB – 在X11服务器上运行,并集成到X11窗口环境


三种插件所支持的Qt特性会有所不同,请根据你的需求来选择:

插件名称 OpenGL ES QtWebEngine QtMultimedia 视频硬解播放 双屏异显
KMS Yes No Yes No Yes
EGLFS Yes No Yes No No
XCB Yes Yes Yes Yes Yes

建议使用 KMS或XCB 插件。

为了方便用户测试,FriendlyCore平台提供了4个脚本文件用于设置Qt环境变量,分别为:

脚本文件名 作用
/usr/bin/setqt5env-kms 设置kms插件所需要的环境变量
/usr/bin/setqt5env-eglfs 设置eglfs插件所需要的环境变量
/usr/bin/setqt5env-xcb 设置xcb插件所需要的环境变量
/usr/bin/setqt5env-nogui 仅供无界面的Qt程序使用

例如要设置用KMS插件来显示程序界面,可以使用以下命令:

. setqt5env-kms
./apps

(注: .与字母s之间有个空格)

8.3.1 Qt开发环境搭建

FriendlyELEC为RK3399平台提供了两种交叉编译Qt程序的方法:

8.3.2 Qt示例演示

FriendlyCore系统内置了几个很有特色的Qt演示程序,方便测试Qt5的特性,下面分别介绍它们:

8.3.3 Qt Quick示例:CinematicExperience


Qt Quick 是 Qt 提供的一种高级用户界面技术,使用它可轻松地为移动和嵌入式设备创建流畅的用户界面。Qt Quick 应用默认使用 OpenGL ES ,渲染效率很高,你可以用它创建非常炫非常酷非常迷人的界面。
CinematicExperience是一个用Qt Quick实现的影片选择界面。
该例子使用了Qt QML中的界面动态转换、粒子模拟和着色器特效,所以这个示例能体现RK3399的硬件性能与软件优化,在RK3399平台上非常流畅。
在命令行执行以下命令启动该示例:

cd /opt/Qt5_CinematicExperience
./run.sh

界面如下所示:
Qt5-cinematicExperience.gif

8.3.4 Qt WebEngine示例:网页浏览器

Qt WebEngine使用了Chromium作为渲染引挚,对HTML5支持完美。
示例展示的网页浏览器是 Qt5 自带的Demo,运行命令如下:

cd /opt/qt5-brower
./run.sh

界面如下所示:
Qt5-brower.jpg

注:Qt WebEngine在FriendlyCore平台上需要使用Xcb插件来运行。

8.3.5 Qt 双屏异显示例

这是一个比较简单的DEMO,演示了在同时连接HDMI和eDP LCD屏的情况下,用Qt实现两个屏幕显示不同的内容, 用以下命令启动:

cd /opt/qt5-multi-screen-demo
./run.sh

双屏异显的效果如下所示:
Qt5-multi-screen.jpg

8.3.6 Qt Multimedia: 硬解播放器qt5-player

qt5-player播放器已经适配Rockchip的gstreamer插件,支持4K视频的硬解播放。
在命令行执行以下命令启动该示例:

cd /opt/qt5-player
./run.sh

播放器的界面如下所示,可以设置全屏播放,也可以调节音量:
Qt5-player.gif

8.3.7 Qt WebGL示例: nmapper

Qt WebGL允许你在其他设备的网页游览器查看并远程操作运行在开发板上的Qt程序,这个特性使得实现远程控制变得简单。
在运行示例之前,你的开发板需要先连接网络,然后在开发版本执行以下命令:

cd /opt/qt5-nmapper
./run-with-webgl.sh

然后在电脑或者手机上打开网页游览器,在浏览器的地址栏输入开发板的IP地址,应该就能看到Qt界面了,效果如下所示:
Qtwebgl.gif

8.3.8 Qt VNC示例: 智能家居控制界面

Qt VNC允许你将一个应用程序以VNC Server的形式运行,在其他设备上可以使用VNC Client来连接和控制,用QtWidgets或者QML编写的应用都是支持的。
执行以下命令启动:

cd /opt/qt5-smarthome
./run-with-vnc.sh

然后在电脑或者手机上安装并打开VNC viewer软件,输入开发板的IP地址加端口号5900,例如开发板的地址是192.168.1.100,就输入192.168.1.100:5900,连接后应该就能看到界面了,如下图所示:
Qt5smarthomevnc.png

8.3.9 Qt 双USB摄像头示例

本示例演示同时预览两个USB摄像头的图像,请在运行示例之前,先连接好两个USB摄像头和屏幕,一般来说标准的UVC摄像头都可以,不过还是建议使用以下我们测试过的型号:

序号 型号
1 KS2A242
2 罗技C922 Pro

执行以下命令启动:

cd /opt/dual-camera
./run.sh

运行界面以及所使用的摄像头如下图所示:
Qt5dualcamera.jpg

8.4 开机自动运行Qt示例程序

使用npi-config工具进行开启:

sudo npi-config

进入Boot Options -> Autologin -> Qt/Embedded,选择Enable然后重启即可。

8.5 扩展TF卡文件系统

第一次启动FriendlyCore系统时,系统会自动扩展文件系统分区,请耐心等待,TF卡/eMMC的容量越大,需要等待的时间越长,进入系统后执行下列命令查看文件系统分区大小:

df -h

8.6 使用蓝牙传输文件

以传输文件到手机为例进行说明,首先,将你的手机蓝牙设置为可侦测状态,然后执行以下命令开始蓝牙搜索:

hcitool scan


搜索到设备时,结果举例如下:

Scanning ...
    2C:8A:72:1D:46:02   HTC6525LVW

这表示搜索到一台名为HTC6525LVW的手机,我们记下手机名称前面的MAC地址,然后用sdptool命令查看该手机支持的蓝牙服务:

sdptool browser 2C:8A:72:1D:46:02

注:上述命令中的MAC地址请替换成手机实际的蓝牙MAC地址
这个命令会详细列出手机蓝牙所支持的协议,我们需要关心的是一个名为 OBEX Object Push 的文件传输服务,以HTC6525LVW手机为例,其显示结果如下所示:

Service Name: OBEX Object Push
Service RecHandle: 0x1000b
Service Class ID List:
  "OBEX Object Push" (0x1105)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 12
  "OBEX" (0x0008)
Profile Descriptor List:
  "OBEX Object Push" (0x1105)
    Version: 0x0100

从上面的信息可以看到,这个手机的OBEX Object Push服务的所用的频道是12, 我们需要将它传递给obexftp命令,最后发起文件传输请求的命令如下:

obexftp --nopath --noconn --uuid none --bluetooth -b 2C:8A:72:1D:46:02 -B 12 -put example.jpg

注:上述命令中的MAC地址、频道和文件名请替换成实际的

执行上述命令后,请留意手机屏幕,正常情况下手机会弹出配对和接收文件的提示,确定后就开始文件传輪了。

蓝牙常见问题:
1) 开发板上找不到蓝牙设备, 可尝试用以下命令开启蓝牙:

rfkill unblock 0

2) 提示找不到相关命令,可尝试用以下命令安装相关软件:

apt-get install bluetooth bluez obexftp openobex-apps python-gobject ussp-push

8.7 连接WiFi

无论是SD WiFi还是USB WiFi, 它们的连接方式都是一样的。正基科技的APXX系列芯片属于SD WiFi,另外系统默认也已经支持市面上众多常见的USB WiFi,已测试过的USB WiFi型号如下:

序号 型号
1 RTL8188CUS/8188EU 802.11n WLAN Adapter
2 RT2070 Wireless Adapter
3 RT2870/RT3070 Wireless Adapter
4 RTL8192CU Wireless Adapter
5 小米WiFi mt7601
6 5G USB WiFi RTL8821CU
7 5G USB WiFi RTL8812AU

目前使用 NetworkManager 工具来管理网络,其在命令行下对应的命令是 nmcli,要连接WiFi,相关的命令如下:

  • 切换到root账户
$ su root
  • 查看网络设备列表
$ nmcli dev

注意,如果列出的设备状态是 unmanaged 的,说明网络设备不受NetworkManager管理,你需要清空 /etc/network/interfaces下的网络设置,然后重启.

  • 开启WiFi
$ nmcli r wifi on
  • 扫描附近的 WiFi 热点
$ nmcli dev wifi
  • 连接到指定的 WiFi 热点
$ nmcli dev wifi connect "SSID" password "PASSWORD" ifname wlan0

请将 SSID和 PASSWORD 替换成实际的 WiFi名称和密码。
连接成功后,下次开机,WiFi 也会自动连接。

更详细的NetworkManager使用指南可参考这篇文章: Use NetworkManager to configure network settings

如果你的USB WiFi无法正常工作, 大概率是因为文件系统里缺少了对应的USB WiFi固件。对于Debian系统, 可以在Debian-WiFi里找到并安装USB WiFi芯片的固件。而对于Ubuntu系统, 则可以通过下列命令安装所有的USB WiFi固件:

$ apt-get install linux-firmware

一般情况下, 各种WiFi芯片的固件都存放在/lib/firmware目录下。


8.8 连接以太网

默认插上网线开机,会自动连接并通过DHCP获取IP地址,如需要配置静态IP地址,请参考 NetworkManager 的相关文档: Use NetworkManager to configure network settings


8.9 定制命令行的欢迎信息(文字LOGO)

欢迎信息主要是这个目录下的脚本来打印的:

/etc/update-motd.d/

比如要修改 FriendlyELEC 的大字LOGO,可以修改/etc/update-motd.d/10-header 这个文件,比如要将LOGO改为HELLO,可将以下行:

TERM=linux toilet -f standard -F metal $BOARD_VENDOR

改为:

TERM=linux toilet -f standard -F metal HELLO

8.10 修改时区

例如更改为Shanghai时区:

sudo rm /etc/localtime
sudo ln -ls /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

8.11 选择系统默认的音频设备

可以通过下面的操作步骤,设置系统默认的音频设备。
可用以下命令查看系统中所有的声卡设备 (注:不同的开发板结果会有所不同):

pi@NanoPi:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: realtekrt5651co [realtek,rt5651-codec], device 0: ff880000.i2s-rt5651-aif1 rt5651-aif1-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: rockchiphdmi [rockchip,hdmi], device 0: ff8a0000.i2s-i2s-hifi i2s-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: ROCKCHIPSPDIF [ROCKCHIP,SPDIF], device 0: ff870000.spdif-dit-hifi dit-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

可以看到,硬件上有如下声卡设备:

声卡设备 声卡序号 说明
realtekrt5651co 0 Realtek声卡的缺省输出接口(通过3.5mm耳机输出)
rockchiphdmi 1 HDMI输出
ROCKCHIPSPDIF 2 光纤输出 (注:暂不可用,因为硬件没有引出)

要配置成将音频输出到3.5mm耳机接口,可修改配置文件/etc/asound.conf,修改成如下内容:

defaults.pcm.card 0
defaults.pcm.device 0

要配置成将音频输出到HDMI,则将上面的defaults.pcm.card修改为1。
需要注意的是,有些板子由于没有Realtek声卡 (没有耳机输出接口),所以HDMI设备的序号会是card 0,所以配置时,要以aplay -l命令的结果为准。

8.12 设置PWM风扇的行为

默认情况下,风扇的转速是根据cpu温度动态调整的,如果需要取消温控,让风扇一直处于运行状态,可以把脚本 /usr/bin/start-rk3399-pwm-fan.sh 修改成以下内容来实现:

#!/bin/bash
 
echo 0 > /sys/class/pwm/pwmchip1/export
sleep 1
echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable
echo 50000 > /sys/class/pwm/pwmchip1/pwm0/period
echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
echo 45000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

8.13 运行X11程序

FriendlyCore系统集成了轻量级的Xorg,虽然没有窗口管理器,但是你仍然可以运行单一的X-Windows程序,例如要运行的程序是~/YourX11App,使用以下命令:

. /usr/bin/setqt5env-xcb
startx ~/YourX11App -geometry 1280x800

注意 “.” 与 /usr/bin/setqt5env-xcb 之间有一个空格,另外,-geometry后面的分辨率请更改为你的屏幕的实际分辨率。

8.14 mpv硬解播放器

FriendlyCore预装了基于 ffmpeg 实现的命令行视频播放器,除了 mpv 播放器本身,也包含了 libmpv 库文件,方便在程序里调用。
mpv播放器支持 Rockchip MPP video decoder,所以支持4K硬解播放,mpv的参数较多,为了简化使用,我们提供了一个脚本 start-mpv,简化后,只要传文件名给它,就可以播放视频了:

start-mpv /home/pi/demo.mp4

需要注意的是,播放时需要使用pi用户登录,因为其它用户的目录里没有mpv相关的设置,当然你可以从pi用户目录复制一份过来也是可以的,mpv的设置文件存放在以下路径:

/home/pi/.config/mpv/mpv.conf

mpv.conf的文件内容如下所示:

vo=gpu
gpu-context=drm
hwdec=rkmpp
demuxer-max-bytes=41943040
demuxer-max-back-bytes=41943040
drm-osd-plane-id=1
drm-video-plane-id=0
audio-device=alsa/default:CARD=rockchiphdmi

这些都是比较重要的,会传递给 mpv 的参数,其中hwdec需要指定为rkmpp才能开启硬件解码,audio-device用于指定音频输出设备,默认输出到HDMI,你可以用以下命令来查询系统中有哪些音频设备:

mpv --audio-device=help

另一个比较重要的参数是 drm-osd-size,当全屏播放视频时,drm-osd-size指定为屏幕的分辨率即可,这个参数由start-mpv自动获取屏幕参数并传给mpv,start-mpv脚本除此之外,还会做一件更重要的事情,它需要保证系统中的 libmali 库用了正确的版本,因为 mpv 是通过 gbm 来渲染画面的,所以 libmali.so 需要使用这个版本: libmali-midgard-t86x-r14p0-gbm.so,这也意味着,这个版本的mpv只能在FriendlyCore下使用,不能在X11 Desktop下使用,具体细节可以自已查看 start-mpv 的脚本内容。
mpv官方使用指南:https://github.com/mpv-player/mpv/wiki

9 同时适用于FriendlyDesktop与FriendlyCore系统的功能特性

9.1 Linux下使用摄像头(MIPI接口摄像头OV13850与OV4689,USB摄像头罗技C920)

摄像头连接方法: 摄像头可以连接在MIPI接口,如下图所示:
M4-mipi-single-camera.jpg


为了方便测试摄像头,我们提供了脚本可以在命令行测试摄像头的拍照和录像功能。
你可以用以下命令更新这个脚本到最新版本:

cd /tmp/
git clone https://github.com/friendlyarm/gst-camera-sh.git
sudo cp gst-camera-sh/*.sh /usr/bin/

共有以下三个脚本:
gst-camera.sh: 单个摄像头的预览、拍照与录像
dual-camera.sh: 预览两个摄像头
stop-gst-camera.sh: 停止预览

9.1.1 gst-camera.sh 参数说明

参数 功能
--index或-i 选择要使用的摄像头的序号,可选值为0和1,当同时连接两个摄像头时,指定为1表示要操作第二个摄像头
--action或-a 指定命令要执行的动作,可选参数为: preview、photo和video,分别对应预览、拍照和录像
--output或-o 指定输出的文件名,用于拍照和录像时指定输出文件名
--verbose或-v 指定为yes时,会输出调用gst-launch-1.0命令的完整命令行
-x 使用rkximagesink插件,预览图像会输出到X11窗口,适用于FriendlyDesktop与Lubuntu系统
-g 使用glimagesink插件,预览图像会输出到X11窗口,适用于FriendlyDesktop与Lubuntu系统
-k 使用kmssink插件,预览图像会直接输出到屏幕,适用于FriendlyCore系统

脚本gst-camera.sh会自动识别OV13850/OV4689/罗技C920摄像头,并传递合适的参数给gst-launch-1.0。

9.1.2 脚本使用方法

  • 预览图像
gst-camera.sh --action preview
  • 拍照

用命令拍照一张照片,存储为文件 1.jpg:

gst-camera.sh -a photo -o 1.jpg
  • 录像并预览

用以下命令启动录像,存储为视频文件 1.ts,录像时使用了硬件编码:

gst-camera.sh --action video -output 1.ts


  • 显示完整的命令

加入 --verbose yes 的参数,会显示最终的 gsteamer 命令,例如:

gst-camera.sh --action video --output 1.ts --verbose yes

你会得到以下完整的 gsteamer 命令,这对你开发会有帮助:

gst-launch-1.0 rkisp num-buffers=512 device=/dev/video0 io-mode=1 ! \
    video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! \
        mpph264enc ! queue ! h264parse ! mpegtsmux ! \
        filesink location=/tmp/camera-record.ts
  • 预览双摄像头

连接两个mipi摄像头,或者一个mipi摄像头加一个usb摄像头(仅测试过:罗技C920 pro),调用以下命令即可同时预览两个摄像头的图像:

dual-camera.sh

注:建议在FriendlyDesktop下测试。

9.1.3 gst-launch-1.0命令行解析

在FriendlyDesktop下预览摄像头命令如下:

gst-launch-1.0 rkisp device=/dev/video1 io-mode=4 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! rkximagesink

重要参数说明:

参数 说明
device 用于预览的device (selfpath) 是 /dev/video1, 用于拍照的device (mainpath) 是 /dev/video0, 如果是多路摄像头,则另一路预览(selfpath)是 /dev/video5, 另一路拍照 (mainpath)是 /dev/video4, USB摄像头一般都是 /dev/video8
io-mode 值为1表示是memory map模式,值为4表示是dmabuf模式,一般预览用io-mode=4,拍照用io-mode=1, 在OpenCV里访问用io-mode=4
rkximagesink/glimagesink/kmssink 在X-Windows窗口中输出mipi摄像头图像时指定为rkximagesink (适用于FriendlyDesktop),如果是USB摄像头则指定为glimagesink,FriendlyCore下只能使用kmssink

9.1.4 在OpenCV中访问摄像头

访问MIPI摄像头:

cv.VideoCapture('rkisp device=/dev/video1 io-mode=4 ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! videoconvert ! appsink', cv.CAP_GSTREAMER)

访问USB摄像头:

cv.VideoCapture('rkisp device=/dev/video8 io-mode=4 ! videoconvert ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! videoconvert ! appsink', cv.CAP_GSTREAMER)


详情请参考这里的示例代码:https://github.com/friendlyarm/install-opencv-on-friendlycore/tree/rk3399/examples

9.1.5 摄像头应用教程: 推流至直播平台

请查看这篇文档: How to setup RTMP server on NanoPC-T4/zh

9.1.6 参考资源

http://blog.iotwrt.com/media/2017/10/01/camera/ http://www.360doc.com/content/16/1019/17/496343_599664458.shtml

9.2 Docker的安装与使用

9.2.1 安装Docker

使用以下命令安装:

wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/containerd.io_1.2.6-3_arm64.deb
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/docker-ce-cli_19.03.2~3-0~ubuntu-bionic_arm64.deb
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/docker-ce_19.03.2~3-0~ubuntu-bionic_arm64.deb
sudo dpkg -i containerd.io_1.2.6-3_arm64.deb
sudo dpkg -i docker-ce-cli_19.03.2~3-0~ubuntu-bionic_arm64.deb
sudo dpkg -i docker-ce_19.03.2~3-0~ubuntu-bionic_arm64.deb

9.2.2 验证Docker的安装

用Docker创建并运行一个debian镜像:

git clone https://github.com/friendlyarm/debian-jessie-arm-docker
cd debian-jessie-arm-docker
./rebuild-image.sh
./run.sh

9.3 Linux下使用ffmpeg进行硬件加速的视频解码

FriendlyCore和FriendlyDesktop系统均预装了 ffmpeg 的可执行文件、静态库和头文件,位于 /usr/ffmpeg-rkmp目录。
ffmpeg支持RockChip MPP视频硬件解码器,但并不支持硬编码,具体信息可参考:https://trac.ffmpeg.org/wiki/HWAccelIntro

测试4K视频的解码性能:

/usr/ffmpeg-rkmp/bin/ffmpeg -benchmark -loglevel 48 -vcodec h264_rkmpp -i 4K-Chimei-inn-60mbps.mp4 -map 0:v:0 -f null -

结果如下图所示,平均 45 FPS:
Rk3399-ffmpeg-fps.jpg
要播放视频,可以使用基于 ffmpeg 实现的播放器 mpv,上面测试所用的4K视频可在网盘的 test-video 目录找到,网盘地址:http://dl.friendlyelec.com/nanopct4。

10 初始化NVME固态硬盘和USB移动硬盘

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

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

10.3 硬盘的自动挂载

10.3.1 在FriendlyWrt系统下挂载

在FriendlyWrt菜单中, 点击"系统"->"挂载点"界面, 在页面底部的"挂载点"的区域中, 点击"新增"按钮, 在UUID一栏中,选择你的硬盘分区, NVME固态硬盘选择 /dev/nvme0n1p1, 如果是USB移动硬盘, 则选择 /dev/sda1, 然后钩选"已启动“, 填写挂载硬盘的目标位置, 本例中选择将 NVME固态硬盘 挂载到 /mnt 目录, 如下图所示:
Friendlywrt mount disk-zh.jpg
点击"Save"按钮保存设置, 挂载完成后界面会列出所挂载的硬盘, 如下图所示:
Friendlywrt mount disk finish-zh.jpg

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

10.4 为硬盘设置网络共享

10.4.1 提升硬件挂载目录的权限

为了方便普通用户的读取, 进入终端, 输入以下命令先提升硬件挂载目录的权限:

chmod 777 /mnt

10.4.2 FriendlyWrt下设置网络共享

进入 “服务” -> "网络共享" 菜单, 在页面底部的 “共享目录” 区域, 点击 “新增” 按钮, 分别填写 "名称" 与 "路径" 为 mnt 和 /mnt, 其他默认, 点击 "保存并应用" 即可.

10.4.3 在电脑上访问共享

在Windows电脑上输入以下地址访问共享目录:

\\192.168.2.1\mnt

在Ubuntu/Mac电脑上使用以下地址访问共享目录:

smb://192.168.2.1/mnt

在询问身份验证时, 输入如下信息:
连接方式: 已注册用户
用户名: root
域: WORKGROUP
密码: password

10.5 本机上进行硬盘速度测试

10.5.1 NVME固态硬盘速度测试

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

10.5.2 USB移动机械硬盘速度测试

10.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
10.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.6 Linux下使用4G EC20模块

请参考: How to use 4G Module on NanoPC-T4/zh

11 Buildroot Linux系统的使用

Buildroot是Linux平台上一个构建嵌入式Linux系统的框架,由Makefile脚本和Kconfig配置文件构成,旨在简化系统制作步骤,可实现一站式生成可烧写的系统固件,最终的固件包含boot-loader、kernel和rootfs,以及rootfs中的各种库和应用程序 (例如qt, gstreamer, busybox等)。

由 FriendlyELEC 提供的 Buildroot 项目是基于Rockchip原厂的 linux-sdk 制作, 项目使用 git 管理,与原厂的linux sdk更新保持同步;


Buildroot for rockchip运行界面如下:

  • Rk3399-buildroot-home.jpg
  • Rk3399-buildroot-console.jpg

  • Rk3399-buildroot-camera.jpg
  • Rk3399-buildroot-player.jpg


关于Buildroot系统更详细的说明,请参考: Buildroot

12 Lubuntu 系统的使用

看这里: Lubuntu desktop 16.04 for RK3399/zh
Lubuntu下使用NVME SSD: How to Initialize and Format New SSD And HDD

13 Android8.1 系统的使用

我们为 NanoPi-M4V2 提供了完善的Android8.1 BSP,代码使用 gitlab.com 平台管理,完全开源,支持GPU加速和VPU硬件加速。
Rk3399android8.png


13.1 使用MIPI摄像头进行拍照和录像

NanoPi-M4V2在Android系统下,可以搭配 MIPI摄像头CAM1320 进行拍照和录像,操作比较简单,连接摄像头到NanoPi-M4V2的MIPI接口,开机进入 Android 系统,用系统自带的 Camera 应用即可完成拍照和录像,操作跟 Android 手机是一样的。
NanoPi-M4V2板上共有两个MIPI接口可以连接两个摄像头分别对应前置摄像头和后置摄像头,其对应关系如下表所示:
MIPI-CSI1 <--> Android 后置摄像头
MIPI-CSI2 <--> Android 前置摄像头

连接方法如下图所示:
M4-mipi-dual-camera.jpg

13.2 使用双MIPI摄像头预览与录像

从github下载以下示例源代码,并用 Android studio 编译并运行:

git clone https://github.com/friendlyarm/Dual-Camera.git -b working-branch

应用安装后,需要设置Android权限才能让程序正常运行,方法是在开发板的Android系统里进入 Settings -> Apps & notifications -> Dual Camera -> Permissions 钩选以下权限:

Camera
Microphone
Storage

最终运行效果如下:
Android dual camera demo.jpg
点击界面上的 "CAPTURE VIDEO" 按钮即可录制视频(同时录两个摄像头),录制的视频保存到以下位置:/storage/emulated/0/Download/dualcamera_h264.mp4,电脑上可以用以下adb命令下载到本地:

adb pull /storage/emulated/0/Download/dualcamera_h264.mp4

已知问题
录制的视频文件,播放时会比正常的快,可能需要调整mediacodec的某些参数


13.3 切换系统语言

Android系统默认的系统语言是英文,比如我们要设置为中文,步骤如下: 1) 进入 Android 设置:Settings -> System -> Languages & Input -> Languages;
2)点击"Add a language", 在列表中选择 "简体中文",再选择 "中国";
3) 这时列表中会有中文和英文两种语言,拖动中文那一项到列表的最上面即可,注意,如果你使用的是鼠标,拖动的方法是:将鼠标指针放在列表项右边的图标上,然后按下鼠标中键来拖动;

13.4 Android8.1 硬件访问

开发者可以通过FriendlyThings SDK在Android App中访问和控制主板上的各种硬件资源,比如Uart, SPI, I2C, GPIO等接口,详情可参考以下两份文档:

13.5 Android神经网络 NN SDK示例

Android8.1 BSP中包含了支持GPU加速的Android NN SDK,为了方便测试,Android8固件中也预装了原厂提供的Android NN示例程序:TfLiteCameraDemo,这是一个使用Rockchip AndroidNN GPU加速的MobileNet分类器Demo,运行时需要连接摄像头模块,USB和CSI摄像头都是支持的,通过点击 “TfLiteCameraDemo”图标进入示例,其运行效果如下所示:

TfLiteCameraDemo.png
关于Android NN SDK的详细描述,可以去网上参考原厂的文档
TfLiteCameraDemo示例源代码下载地址:[TfLiteCameraDemo源代码]

13.6 如何使用adb(Android Debug Bridge)

13.6.1 在Windows10下使用adb

1. 准备一个烧写好安卓系统的 NanoPi-M4V2 ,一条Typc-C数据线
2. 在dl.friendlyelec.com找到 NanoPi-M4V2 的网盘,进入后下载Tools文件夹下的adb.zip
T4 andriod adb 00.jpg
3. 解压adb.zip
T4 andriod adb 01.jpg
4. 按win+R打开“运行”窗口,输入“cmd”打开命令行工具
T4 andriod adb 02.jpg
5. 在命令行工具输入以下命令转到adb工具的所在路径:

cd c:\adb

T4 andriod adb 03.jpg
6. 输入以下命令会出现adb的版本信息和使用说明,说明adb可用:

adb

T4 andriod adb 04.jpg
7. 把烧写好安卓系统的 NanoPi-M4V2 接上电源,用Type-C数据线连接 NanoPi-M4V2 和电脑,然后在命令行工具输入:

adb devices

可看到返回的设备信息,说明Win10已经通过adb检测到 NanoPi-M4V2 ,之后可以在Win10下对设备进行操作
T4 andriod adb 05.jpg
8. 尝试在Win10下使用命令在设备上安装安卓应用,下载一个APK文件,然后输入“adb install 文件名.apk”,如:

adb install QQ_Android_8.3.6.apk

看到“Success”的提示即安装成功
T4 andriod adb 06.jpg

13.6.2 在Ubuntu下使用adb

1. 把烧写好安卓系统的 NanoPi-M4V2 接上电源,用Type-C数据线连接 NanoPi-M4V2 和电脑,打开“终端”
T4 ubuntu adb 01.jpg
2. 输入以下命令安装adb工具,这时要求输入用户密码:

sudo apt-get install android-tools-adb

T4 ubuntu adb 02.jpg
3. 安装过程中弹出下载提示,输入“Y”然后按Enter确认
T4 ubuntu adb 03.jpg
等待安装完成
T4 ubuntu adb 04.jpg
4. 在命令行工具输入以下命令查看设备:

adb devices

可看到返回的设备信息,说明Ubuntu已经通过adb检测到 NanoPi-M4V2
T4 ubuntu adb 05.jpg

13.6.3 adb下修改系统文件

1. 第一次启动系统,如果需要更改系统文件,需要关闭安全验证 (注:安装apk不需要关闭),关闭安全验证后需要重启

adb root
adb disable-verity
adb reboot

2. 重启后,获得root权限,并重新挂载 /system 开启写入权限

adb root
adb remount

3. 上传文件

adb push example.txt /system/

13.6.4 注意事项

部分电脑USB端口可能供电不足,如使用NanoPi M4系列请使用PSU Module供电

13.7 HDMI分辨率、边界调节

如果连接了HDMI显示设备,可进入 Android 的 Settings -> Display -> Advanced -> HDMI & Rotation 进行设置。

HDMI Resolution 缺省为 Auto,可手动设置显示分辨率,最高可支持 4K 分辨率
Screen Zoom 用户可观察红色边框的显示,点击中间的4个箭头按钮来进行缩放调节
Display Rotation 可进行横竖屏切换

13.8 屏幕旋转

使用HDMI与LCD作为显示设备时,如果需要旋转屏幕,可进入 Android 的 Settings -> Display -> Advanced -> HDMI & Rotation -> Display Rotation 进行设置。

在 adb shell 用命令来测试屏幕旋转 (不会保存设置):

wm rotation 90

13.9 隐藏Navigation bar

进入设置界面 Settings -> Accessibility,启用 Immersive Mode,然后再打开你的 Android应用,例如 Lightning,你会发现它将处于全屏状态。

13.10 切换音频输出通道

可以配置音频输出到HDMI或者耳机接口,设置入口:Android 的 Settings -> Accessibility -> Force audio output。 如果 Force audio output菜单项是灰色的,即处于不可选择的状态,说明你所用的硬件会自动检测耳机插拨状态,并自动切换音频通道,无需设置。

13.11 调整录音的音量

1) 先通过串口或adb shell,以root用户权限使用amix 命令调节录音的音量,例如:

amix "IN2 Boost"
amix "ADC Capture Volume"

以上命令用于查看当前的设置,然后便可根据支持的值来调节并测试。
2) 调试好后,修改 hardware/rockchip/audio/tinyalsa_hal/codec_config/rt5651_config.h 文件中 rt5651_main_mic_capture_controls 数组中对应配置项的值,编译Android源代码并测试。

13.12 定制开关机界面与动画

13.12.1 开启与关闭

将 device/rockchip/common/BoardConfig.mk 文件的
BOOT_SHUTDOWN_ANIMATION_RINGING := false
改为
BOOT_SHUTDOWN_ANIMATION_RINGING := true
来打开编译时将文件打包进固件的功能

13.12.2 开机动画

创建或替换Android源代码目录下的如下文件:
kernel/logo.bmp
kernel/logo_kernel.bmp
device/rockchip/common/bootshutdown/bootanimation.zip

13.12.3 关机动画

创建或替换Android源代码目录下的如下文件:
device/rockchip/common/bootshutdown/shutdownanimation.zip

13.12.4 动画制作方法

请参考:http://blog.sina.com.cn/s/blog_4960586c0100vu5v.html

13.13 移除Google框架

如果不需要使用google服务,可以删除Google框架以节约系统资源,方法是删除Android源代码中的以下目录,然后重新编译Android:
vendor/google

13.14 使用USB摄像头进行拍照和录像

Android系统同时支持USB摄像头拍照和录像,使用系统自带的 Camera 应用即可,有两点需要注意的地方:
1)需要根据摄像头规格,选择合适的录像分辨率,可以先选择较低的CIF分辨率,测试OK之后再尝试更高的分辨率,设置界面如下所示:
Android8-usbcamera-setting.png;
2)USB摄像头不能与MIPI摄像头同时使用,也不能热拨插,插入摄像头后需要重新开机才能识别;

我们测试过的USB摄像头型号如下:罗技C270,罗技C922 PRO,
实测罗技C922 PRO录像和拍照可以达到1080P分辨率。

13.15 Android下使用4G模块EC20

13.15.1 连接方法

连接时,需要通过USB to miniPCIe转接板转接EC20,再连接到主板的USB Host端口,如下图所示:
M4-4g-ec20.jpg
连接后无需额外的配置,启动Android后就可以使用4G上网了,跟Android手机类拟。

13.15.2 启用EC20的GPS功能

默认情况下,Android的GPS功能是关闭的 (原因是Android在没有找到任何GPS模块的情况下,会不停的打印LOG信息),在你连接了EC20模块后,就可以开启GPS了。
开启方法是修改Android源代码下的 vendor/quectel/ec20/BoardConfigPartial.mk 文件,将下面这行:

BOARD_HAS_GPS := false

改为

BOARD_HAS_GPS := true

然后重新编译 Android。

13.16 Android下使用NVME SSD高速固态硬盘

13.16.1 第一步:格式化SSD为单分区ext4格式

此操作可以在电脑上进行,也可以在开发板的 linux 系统里进行。

为了方便操作,请在终端上先用以下命令切换为 root 用户:

su -

root用户的默认密码是fa。

13.16.1.1 检查是否检测到了SSD
root@FriendlyELEC:~# cat /proc/partitions 
major minor  #blocks  name
   1        0       4096 ram0
 259        0  125034840 nvme0n1

看到有 nvme0n1 设备的节点,说明SSD已经成功被识别到了。

13.16.1.2 给SSD重新分区

为了让 Linux 系统能成功能挂载,我们选择给 SSD 重新分区,下面的命令会自动将 SSD 整个空间分成一个区:

(echo o; echo n; echo p; echo 1; echo ""; echo ""; echo w; echo q) | fdisk /dev/nvme0n1

如果要分多个区,可以用 fdisk /dev/nvme0n1 命令,参考 fdisk的文档来操作。

13.16.1.3 将分区格式化为 ext4 格式

上一个步骤分区完成后,我们再用 cat /proc/partitions 命令看一下当前的分区信息,在下面的结果中,可用于存储数据的分区设备名为 /dev/nvme0n1p1 :

root@FriendlyELEC:~# cat /proc/partitions
major minor  #blocks  name
 
   1        0       4096 ram0
 259        0  125034840 nvme0n1
 259        2  125033816 nvme0n1p1


下面的命令将该分区格式化为 ext4 格式,其中-L参数指定SSD分区的名称,这个名称会在Android界面上显示:

mkfs.ext4 /dev/nvme0n1p1 -L SSD

13.16.2 第二步:Android开机自动挂载

只要SSD已经被正确地格式化,Android就会自动挂载SSD为外置存储设备,无需额外的设置,打开Android内置的Files应用,可以看到SSD设备已经挂载:
Android8-files-ssd.jpg
第三方的软件可以正常识别SSD,如下图中的迅雷下载软件,可以设置将文件默认下载到SSD上:
Android8-thunder-ssd.png

14 Android7.1 系统的使用

看这里: Android7

15 如何编译系统

15.1 搭建编译环境

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

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

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

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

15.2 编译 Openwrt/Friendlywrt

15.2.1 下载源代码

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

15.2.1.1 版本FriendlyWrt 21.02
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
15.2.1.2 版本FriendlyWrt 23.05
mkdir friendlywrt23-rk3399
cd friendlywrt23-rk3399
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 rk3399.xml --repo-url=https://github.com/friendlyarm/repo  --no-clone-bundle
tools/repo sync -c  --no-clone-bundle

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

15.2.3 二次编译

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

15.2.4 单独编译u-boot

./build.sh uboot

15.2.5 单独编译kernel

./build.sh kernel

15.2.6 单独编译friendlywrt

./build.sh friendlywrt

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

cd friendlywrt
make -j1 V=s

15.3 编译Buildroot

请参考: Buildroot

15.4 其他Linux系统编译

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

操作系统 内核版本 uboot版本 交叉编译器 分区类型 构建工具集 内核代码分支 内核配置 uboot代码分支 uboot配置
lubuntu linux v4.4.y u-boot v2014.10 6.4-aarch64
MBR sd-fuse nanopi4-linux-v4.4.y nanopi4_linux_defconfig nanopi4-v2014.10_oreo rk3399_defconfig

friendlycore-arm64
friendlydesktop-arm64
eflasher
buildroot linux v4.19.y u-boot
v2017.09
11.3-aarch64 GPT sd-fuse nanopi4-v4.19.y nanopi4_linux_defconfig nanopi4-v2017.09 nanopi4_defconfig
ubuntu-focal-desktop-arm64
debian-bullseye-desktop-arm64
debian-bullseye-minimal-arm64
friendlycore-focal-arm64
debian-bookworm-core-arm64
ubuntu-noble-core-arm64
openmediavault-arm64 linux v6.1.y u-boot
v2017.09
11.3-aarch64 GPT
sd-fuse




nanopi-r2-v6.1.y



nanopi4_linux_defconfig
friendlywrt21 GPT nanopi4_linux_defconfig
+friendlywrt.config
friendlywrt21-docker
friendlywrt23
friendlywrt23-docker
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
  • sd-fuse构建脚本可以用于快速编译kernel和uboot、重新打包sd卡固件与卡刷固件等
  • 点击表格中的MBR与GPT可查看各系统的分区布局(配置文件)

15.4.2 编译内核linux-v4.4.y

本节内容适用于如下OS:

lubuntu eflasher friendlydesktop-arm64 friendlycore-arm64

下载源代码并编译:

git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi4-linux-v4.4.y kernel-rockchip
cd kernel-rockchip
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH
touch .scmversion
# 配置内核
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig
# 启动配置界面
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig
# 编译内核
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images -j$(nproc)
# 编译驱动模块
mkdir -p out-modules
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules -j$(nproc)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules_install
KERNEL_VER=$(make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 kernelrelease)
rm -rf $PWD/out-modules/lib/modules/${KERNEL_VER}/kernel/drivers/gpu/arm/mali400/
[ ! -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与内核

15.4.3 编译u-boot v2014.10

本节内容适用于如下OS:

lubuntu eflasher friendlydesktop-arm64 friendlycore-arm64

下载源代码并编译:

git clone https://github.com/friendlyarm/uboot-rockchip --single-branch --depth 1 -b nanopi4-v2014.10_oreo
cd uboot-rockchip
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH
make CROSS_COMPILE=aarch64-linux- rk3399_defconfig
make CROSS_COMPILE=aarch64-linux-

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

uboot.img trust.img rk3399_loader_v1.22.119.bin (打包时改名为MiniLoaderAll.bin)

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

15.4.4 编译内核linux-v4.19.y

本节内容适用于如下OS:

ubuntu-focal-desktop-arm64 debian-bullseye-desktop-arm64 debian-bullseye-minimal-arm64 friendlycore-focal-arm64 ubuntu-noble-core-arm64 debian-bookworm-core-arm64 buildroot

下载源代码并编译:

git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi4-v4.19.y kernel-rockchip
cd kernel-rockchip
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
touch .scmversion
# 配置内核
# option1: 加载Linux系统配置
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig
# option2: 加载FriendlyWrt系统配置
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig friendlywrt.config
# 启动配置界面
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig
# 编译内核
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images -j$(nproc)
# 编译驱动模块
mkdir -p out-modules
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules -j$(nproc)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules_install
KERNEL_VER=$(make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 kernelrelease)
rm -rf $PWD/out-modules/lib/modules/${KERNEL_VER}/kernel/drivers/gpu/arm/mali400/
[ ! -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与内核

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

本节内容适用于如下OS:

friendlywrt21 friendlywrt21-docker friendlywrt23 friendlywrt23-docker openmediavault-arm64

下载源代码并编译:

git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi-r2-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 nanopi4_linux_defconfig
# option2: 加载FriendlyWrt系统配置
# make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi4_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_rk3399/kernel-6.1.y/tools/mkkrnlimg && chmod 755 mkkrnlimg
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3399/kernel-6.1.y/tools/resource_tool && chmod 755 resource_tool
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3399/kernel-6.1.y/prebuilt/boot/logo.bmp
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3399/kernel-6.1.y/prebuilt/boot/logo_kernel.bmp
./mkkrnlimg arch/arm64/boot/Image kernel.img
mkdir kernel-dtbs
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dtb kernel-dtbs/rk3399-nanopi4-rev09.dtb
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dtb kernel-dtbs/rk3399-nanopi4-rev0a.dtb
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4se.dtb kernel-dtbs/rk3399-nanopi4-rev0b.dtb
cp -f arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dtb kernel-dtbs/rk3399-nanopi4-rev00.dtb
./resource_tool --dtbname kernel-dtbs/*.dtb logo.bmp logo_kernel.bmp

完成后会得到如下文件:

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

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

15.4.6 编译u-boot v2017.09

本节内容适用于如下OS:

ubuntu-focal-desktop-arm64 debian-bullseye-desktop-arm64 debian-bullseye-minimal-arm64 friendlycore-focal-arm64 ubuntu-noble-core-arm64 debian-bookworm-core-arm64 buildroot

下载源代码并编译:

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 nanopi4-v2017.09
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
cd uboot-rockchip/
./make.sh nanopi4

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

uboot.img trust.img rk3399_loader_v1.24.126.bin (打包时改名为MiniLoaderAll.bin)

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

15.4.7 应用新编译的uboot与内核

15.4.7.1 安装到目标板
15.4.7.1.1 MBR分区

本节内容适用于如下OS:

lubuntu eflasher friendlydesktop-arm64 friendlycore-arm64

目前只有linux v4.4内核使用MBR分区,需要参考此链接的partmap文件,计算各分区的偏移地址,用dd命令将img文件写入到相应位置,例如parameter.template文件内容中"0x00014000@0x00014000(kernel)"表示kernel.img的位置位于0x00014000,转换成10进制就是81920, 相应的dd命令如下所示:

dd if=kernel.img of=/dev/mmcblk0 seek=81920
15.4.7.1.2 GPT分区

本节内容适用于如下OS:

ubuntu-focal-desktop-arm64 friendlycore-focal-arm64 debian-bullseye-desktop-arm64 debian-bullseye-minimal-arm64 ubuntu-noble-core-arm64
buildroot friendlywrt21 friendlywrt21-docker friendlywrt23 friendlywrt23-docker

linux v4.19内核和linux v5.15内核的系统默认使用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。

15.4.7.2 打包新的SD Image

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

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

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

内核版本 构建脚本
linux v4.4.y sd-fuse
linux v4.19.y
sd-fuse
linux v6.1.y
sd-fuse
15.4.7.3 线刷

注:不支持内核v4.4.y的固件

15.4.7.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以上版本。

15.5 使用脚本进行编译

15.5.1 下载工具与固件

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

git clone https://github.com/friendlyarm/sd-fuse_rk3399.git -b kernel-4.19
cd sd-fuse_rk3399
tar xvzf /path/to/netdrive/03_分区镜像文件/friendlycore-focal-arm64-images.tgz

15.5.2 编译内核

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

git clone https://github.com/friendlyarm/kernel-rockchip --depth 1 -b nanopi4-v4.19.y kernel-rk3399
KERNEL_SRC=$PWD/kernel-rk3399 ./build-kernel.sh friendlycore-focal-arm64

15.5.3 编译内核头文件

git clone https://github.com/friendlyarm/kernel-rockchip --depth 1 -b nanopi4-v4.19.y kernel-rk3399
MK_HEADERS_DEB=1 BUILD_THIRD_PARTY_DRIVER=0 KERNEL_SRC=$PWD/kernel-rk3399 ./build-kernel.sh friendlycore-focal-arm64

15.5.4 编译uboot

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

git clone https://github.com/friendlyarm/uboot-rockchip --depth 1 -b nanopi4-v2017.09
UBOOT_SRC=$PWD/uboot-rockchip ./build-uboot.sh friendlycore-focal-arm64

15.5.5 生成新固件

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

./mk-sd-image.sh friendlycore-focal-arm64

命令完成后,固件位于out目录,可以用 dd 命令制作sd启动卡,举例说明:

dd if=out/rk3399-sd-friendlycore-focal-4.19-arm64-YYYYMMDD.img of=/dev/sdX bs=1M

15.6 Android系统编译

15.6.1 电脑的软硬件要求

  • 至少配置16G以上内存+300G磁盘空间,建议使用32G内存+大容量高速SSD的机器,不建议使用虚拟机;
  • 如遇到编译错误,可能是编译环境问题,推荐使用如下Docker容器进行编译:docker-cross-compiler-novnc

15.6.2 编译Android10

15.6.2.1 下载Android10源代码

有以下两种途径获取 Android10 的源代码,都需要联网:

  • 使用网盘里的git repo压缩包

网盘下载地址: 点击进入
文件位于网盘的以下路径:07_源代码/rk3399-android-10.git-YYYYMMDD.tar.xz (YYYYMMDD表示打包的日期)
从网盘中获取的压缩包在解压之后,需要执行一下 sync.sh 脚本,会从gitlab上拉取最新的代码:

tar xf /path/to/netdisk/07_源代码/rk3399-android-10.git-YYYYMMDD.tar.xz
cd rk3399-android-10
./sync.sh

注意: 如果遇到“error: unknown option `recurse-submodules'”,请升级git至v2.0.0或以上版本。

  • 直接克隆git仓库

NanoPi-M4V2 源代码托管在 gitlab 上,使用以下命令进行下载:

git clone --recursive https://gitlab.com/friendlyelec/rk3399-android-10.git -b main
15.6.2.2 编译并生成Image文件

编译Android 10建议使用普通用户登录,运行以下命令编译:

cd rk3399-android-10
./build-nanopc-t4.sh -F -M

如果需要包含google apps,需要设置一个环境变量再编译,如下所示:

cd rk3399-android-10
export INSTALL_GAPPS_FOR_TESTING=yes
./build-nanopc-t4.sh -F -M
15.6.2.3 编译OTA Packages

如果需要A/B (Seamless) System Updates的支持,需要先进行以下定制:
a) 搭建自己的更新服务器
b) 定制packages/apps/Updater使其适配自己的更新服务
定制完成后,使用快速编译脚本参数-O或--ota可编译OTA Packages,如下所示:

cd rk3399-android-10
./build-nanopc-t4.sh -F -O -M

编译成功完成后,OTA更新相关的包位于目录 rockdev/otapackage/ ,请保留此目录。
当完成了某些修改后使用参数-O 再次编译将会生成ota-update-XXXXXXXX.zip,这是增量更新包。
OTA Packages依赖BUILD_NUMBER, 只有它有变化才会生成增量更新包,缺省的生成规则请查看build-nanopc-t4.sh。
修改 device/rockchip/rk3399/nanopc-t4/BoardConfig.mk 中

BOARD_USES_AB_IMAGE := false

可禁用 A/B 特性,然后重新编译(包括u-boot和android)。

15.6.2.4 更新系统为自已编译的Image

编译完成后,image文件会存放在Android10源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 NanoPi-M4V2上:
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区;
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 android10 目录;
3) 将SD卡插入NanoPi-M4V2,重新烧写Andorid系统即可;
也可参考这个github仓库的方法来更新:sd-fuse_rk3399
烧写Android 10时EFlasher 需要 v1.3 或以上版本,通过Type-C烧写时请使用rockchip提供的工具AndroidTool v2.71 或Linux_Upgrade_Tool v1.49 。

15.6.3 编译Android8.1

15.6.3.1 下载Android8.1源代码

有以下两种途径获取 Android8.1 的源代码,都需要联网:

  • 使用网盘里的git repo压缩包

网盘下载地址: 点击进入
文件位于网盘的以下路径:sources/rk3399-android-8.1.git-YYYYMMDD.tgz (YYYYMMDD表示打包的日期)
从网盘中获取的压缩包在解压之后,需要执行一下 sync.sh 脚本,会从gitlab上拉取最新的代码:

tar xvzf /path/to/netdisk/sources/rk3399-android-8.1.git-YYYYMMDD.tgz
cd rk3399-android-8.1
./sync.sh
  • 直接克隆git仓库

NanoPi-M4V2 源代码托管在 gitlab 上,使用以下命令进行下载:

git clone https://gitlab.com/friendlyelec/rk3399-android-8.1 --depth 1 -b master
15.6.3.2 编译并生成Image文件

使用以下命令编译:

cd rk3399-android-8.1
./build-nanopc-t4.sh -F -M
15.6.3.3 更新系统为自已编译的Image

编译完成后,image文件会存放在Android8.1源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 NanoPi-M4V2上:
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区;
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 android8 目录;
3) 将SD卡插入NanoPi-M4V2,重新烧写Andorid系统即可;
也可参考这个github仓库的方法来更新:sd-fuse_rk3399

15.6.4 编译Android7源代码

15.6.4.1 下载Android7源代码

有以下两种途径获取 Android7 的源代码,都需要联网:

  • 使用网盘里的git repo压缩包

网盘下载地址: 点击进入
文件位于网盘的以下路径:sources/rk3399-android-7.git-YYYYMMDD.tgz (YYYYMMDD表示打包的日期)
从网盘中获取的 repo 压缩包在解压之后,需要执行一下 sync.sh 脚本,会从gitlab上拉取最新的代码:

tar xvzf /path/to/netdisk/sources/rk3399-android-7.git-20181228.tgz
cd rk3399-nougat
./sync.sh
  • 直接克隆git仓库

NanoPi-M4V2 源代码托管在 gitlab 上,使用以下命令进行下载:

git clone https://gitlab.com/friendlyelec/rk3399-nougat --depth 1 -b nanopc-t4-nougat
15.6.4.2 编译并生成Image文件

使用以下命令编译:

cd rk3399-nougat
./build-nanopc-t4.sh -F -M
15.6.4.3 更新系统为自已编译的Image

编译完成后,image文件会存放在Android7源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 NanoPi-M4V2上:
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区;
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 nougat 目录;
3) 将SD卡插入NanoPi-M4V2,重新烧写Andorid系统即可;
也可参考这个github仓库的方法来更新:sd-fuse_rk3399

16 板载资源的使用

16.1 串口访问

如下表所示,仅 UART4 可供应用程序开发使用:

串口设备 串口资源占用情况
UART0 已被蓝牙占用
UART1 已被千兆以太网占用
UART2 已被作为调试串口
UART3 已被千兆以太网占用
UART4 空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM)

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

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

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

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

在Linux PC上执行以下shell命令,为了简洁起见,这里以debian-bullseye-desktop-arm64系统为例,但方法适用于所有Linux系统。

su root
git clone https://github.com/friendlyarm/sd-fuse_rk3399 --single-branch -b kernel-4.19
cd sd-fuse_rk3399
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

18 更改内核命令行参数 (仅支持4.4内核)

18.1 eMMC启动

步骤如下:
先做一张eflahser的烧写卡 (使用rk3xxxx-eflasher-开头的固件文件),
将烧写卡插入电脑,进入sd卡的OS相关目录,编辑文件parameter.txt, 这是个文本文件,里面有命令行参数,
然后再用烧写卡启动,把系统烧写进 eMMC。

18.2 SD启动

要修改SD卡启动时的命令行参数, 需要重新打包SD卡镜像文件, 可以使用我们提供的sd-fuse脚本来辅助打包:

git clone https://github.com/friendlyarm/sd-fuse_rk3399.git -b master --single-branch
cd sd-fuse_rk3399
tar xvzf /path/to/netdrive/03_Partition\ image\ files/friendlydesktop-arm64-images.tgz
tar xvzf /path/to/netdrive/03_Partition\ image\ files/emmc-flasher-images.tgz
vim friendlydesktop-arm64/parameter.txt   # 编辑命令行参数
./mk-sd-image.sh friendlydesktop-arm64    # 重新打包sd映象文件
./mk-emmc-image.sh friendlydesktop-arm64  # 重新打包sd-to-emmc映象文件(eflasher img)

19 Linux操作系统的常见操作

19.1 Linux系统下使用adb

19.1.1 buildroot系统下开启adb功能

开机自动开启

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

临时开启

usbdevice-wrapper start

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

开机自动开启

sudo systemctl enable usbdevice
sudo reboot

临时开启

usbdevice-wrapper start

19.1.3 如何连接

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

19.2 安装内核头文件

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

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

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

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

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

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

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

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

bootargs-ext=rockchipdrm.fb_max_sz=2048

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

bootargs-ext=userdata=

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

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

20 选配配件eMMC模块的使用

NanoPi M4V2-eMMC.jpg

20.1 烧写系统到eMMC

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

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

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

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

20.1.1.1 烧写官方固件到eMMC

详细操作步骤如下:

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

20.1.2 方法2: 在网页上烧写

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

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

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

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

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

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

20.1.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启动你安装的系统;

21 更多OS

21.1 DietPi

Dietpi-logo.png
DietPi is a highly optimised & minimal Debian-based Linux distribution. DietPi is extremely lightweight at its core, and also extremely easy to install and use.
Setting up a single board computer (SBC) or even a computer, for both regular or server use, takes time and skill. DietPi provides an easy way to install and run favourite software you choose.
For more information, please visit this link https://dietpi.com/docs/.

DietPi supports many of the NanoPi board series, you may download the image file from here:

22 查看瑞芯微原厂资料

23 原理图、尺寸图

24 更新日志

24.1 2024-04-21

24.1.1 OpenMediaVault

  • 更新到 7.0.5-1
  • 更新到 Debian12

24.2 2024-03-15

24.2.1 Ubuntu focal desktop

  • 修正蓝牙无法使用的问题

24.3 2024-01-31

24.3.1 Debian/Ubuntu/FriendlyCore/Buildroot

  • 增加adb支持

24.4 2023-12-01

24.4.1 FriendlyWrt

  • 更新到 6.1.63 内核
  • 更新到 OpenWrt 23.05.2

24.5 2023-10-31

24.5.1 增加新系统

  • 增加NAS系统 OpenMediaVault,基于Debian11构建,使用6.1内核

24.5.2 Debian Core/FriendlyCore-Lite-Core

  • 更新到 6.1 内核

24.5.3 FriendlyWrt

  • 更新到 6.1 内核
  • 更新到 openwrt-23.05

24.6 2023-07-01

24.6.1 Debian11

  • 更新到Rockchip sdk版本最新版本, 升级gpu与xserver驱动等,提升UI与媒体播放性能
  • 修正已知问题

24.7 2023-05-26

24.7.1 FriendlyWrt更新

  • 更新 v22.03 到新版本 openwrt-22.03.5
  • 更新 v21.02 到新版本 openwrt-21.02.7

24.8 2023-05-21

24.8.1 Debian11:

  • 更新到Rockchip sdk版本linux-5.10-gen-rkr4
  • 为了流畅性,将桌面切换至LXDE

24.9 2023-04-26

24.9.1 FriendlyWrt:

  • 更新 v22.03 到新版本 openwrt-22.03.4
  • 更新 v21.02 到新版本 openwrt-21.02.6

24.10 2023-02-10

24.10.1 新增 Debian11

分为以下三个版本:

  • Debian11 Core: 仅命令行
  • Debian11 Minimal: LXDE桌面,精简版
  • Debian11 Desktop: LXDE桌面,完整版

24.11 2023-01-09

24.11.1 FriendlyCore更新说明:

  • 优化了开机服务

24.12 2022-12-04

24.12.1 FriendlyWrt:

  • 修正存储空间某些情况下无法扩展的问题
  • 加强eMMC刷机工具的刷机稳定性

24.13 2022-09-06

24.13.1 FriendlyWrt更新说明:

  • 提升了NanoPi-R4SE的eMMC读取性能
  • 增加Fullcone NAT支持 (默认开启)
  • 版本升级到 22.03.0 正式版
  • 修复NanoPC-T4在FriendlyWrt下的eMMC稳定性问题

24.14 2022-08-19

24.14.1 Lubuntu/Android8/FriendlyDesktop更新说明:

  • 增加7寸屏HD703E的支持
  • 修正FriendlyDesktop eMMC启动问题

24.14.2 Buildroot更新说明:

  • 修正在Som-RK3399下未自动加载WiFi模块的问题

24.15 2022-08-03

24.15.1 FriendlyWrt更新说明:

  • 升级FriendlyWrt至最新版本22.03-rc6
  • 修正 R4S/R4SE 软重启后小概率会识别不到pcie设备(lan口)的问题
  • 修正R4SE在烧写系统到eMMC时状态灯没有反映烧写进度的问题
  • 防火墙设置调整: 单网口的设备(使如NanoPi-T4/NanoPi-M4)默认设置为允许WAN入站流量以方便网页配置,多网口的设备仍然保持默认拒绝WAN入站流量
  • 更新使用4.19内核的FriendlyWrt固件,特性与5.15的FriendlyWrt 21.02 docker版本一致

24.16 2022-07-27

24.16.1 FriendlyWrt更新说明:

  • 提供测试版22.03-rc3, 可根据软件包的需求情况进行选择, 推荐使用稳定版本 21.02.3
  • 提供docker与非docker两个版本,除了docker外其他特性相同
  • 改善了第三方软件包的安装兼容性问题
  • 增加支持 “恢复出厂设置” 功能
  • 增加网页刷机工具 eMMC-Tools, 支持安装FriendlyElec及部分第三方固件到eMMC, 除了raw-image还支持rockchip打包格式的固件
  • 其他一些细节调整: 默认设置时区设置为上海、新增NAS分类菜单、去掉lcd2usb、改进安全性设置、调优sysctl参数、修正docker防火墙设置等
  • 增加支持新的硬件型号: NanoPi-R4SE

24.17 2022-07-04

24.17.1 Debian 10(buster) Desktop (首次发布)

  • 桌面环境采用 LXDE, 多种主题可选, 简洁美观, 占用资源少
  • 提供基于 Mali GPU 的 OpenGL 支持
  • 支持Rockhip MPP视频硬编和硬解码
  • 预装基于mpv的Kodi, SMPlayer播放器, 支持4K视频硬解码
  • 预装Chromium浏览器, 支持vpu/gpu硬件加速 (视频硬解限h264/mp4格式)
  • 支持安装Plex Server, wps等应用, 玩法丰富

24.18 2021-12-02

  • 修正某些sd卡会导致reboot命令和看门狗无法正常工作的问题 (更新了uboot v2017.09)

24.19 2021-10-29

24.19.1 FriendlyWrt更新说明:

  • FriendlyWrt更新至官方稳定版本 21.02.1,特性与19.07.5基本保持一致,支持docker、usb wifi等

24.19.2 Friendlycore-Focal 更新说明:

  • 更新了rockchip的视频编/解码(mpp)支持
  • 更新了camera支持, 集成了rkisp_3A_server,运行它后摄像头预览可直接使用v4l2src,用法实例如下:
     rkisp_3A_server --mmedia /dev/media0 &
     gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4 ! \
       video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! queue ! kmssink
  • 修复gst-camera.sh预览HDMI IN会出错的问题

24.20 2021-08-31

24.20.1 FriendlyWrt更新说明:

  • FriendlyWrt的内核更新到 5.10.60
  • 新增一款高速5G USB WiFi的支持,网卡型号为 Comfast CF-WU782AC V2,芯片型号为 MediaTek MT7662
  • 改进了USB WiFi的兼容性
  • 改进了PWM风扇的支持,风扇由内核驱动控制,支持温控(详情请在R4S的WiKi页面搜索 PWM风扇)
  • 改进了首次启动的稳定性 (之前的版本,首次启动时,某些情况下会出现bpfilter错误)

24.21 2021-03-11

24.21.1 FriendlyWrt更新说明:

  • FriendlyWrt内核更新到5.10

24.22 2020-12-24

24.22.1 FriendlyWrt更新说明:

  • FriendlyWrt更新至官方稳定版本 19.07.5

24.23 2020-12-17

24.23.1 FriendlyWrt更新说明:

24.24 2020-12-17

24.24.1 FriendlyWrt更新说明:

1) FriendlyWrt提供两个版本,使用4.19内核与5.4内核,其中5.4用于R4S,其他型号请使用4.19版本
2) 提高了软件包的兼容性,方便用 opkg 命令安装软件包

24.24.2 FriendlyCore/FriendlyDesktop更新说明:

更新wiringPi,支持更多引脚

24.25 2020-10-27

  • 增加新OS: FriendlyCore 20.04, 主要特性如下:

1) Linux内核版本为4.19.111
2) 基于Ubuntu 20.04构建,保留FriendlyCore原有特性如Qt5, OpenCV,WiringPi等,暂不支持ffmpeg/mpv
3) U-Boot 2017.09
4) 整合原厂最新的GPU、视频编解码、Camera支持

24.26 2020-09-27

24.26.1 Android 10更新说明:

  • 增加A/B(无缝)系统更新的支持
  • 为演示新特性,此次发布的Rom,可检查到一个更新

24.27 日期 2020-09-16

  • Android 10 更新

1) 更新SDK为Rockchip android-10.0-mid-rkr9
2) HDMI开放更多的分辨率选择
3) 修复DisplayPort无显示的问题
4) 更新蓝牙固件,修复NanoPi M4B无法启用蓝牙的问题
5) 修正内核的logo显示

  • FriendlyCore/FriendlyDesktop 更新如下:

1) 更新蓝牙固件,修复蓝牙固件没有成功加载的问题
2) 更新bcmdhd 驱动为 1.579.77.41.22
3)修正 /tmp/ 目录权限某些情况下被修改成只读的问题

24.28 日期 2020-08-17

1) 修正 typc-c 烧写的稳定性和易用性,为每个系统的压缩包预置了AndroidTool以及配置文件,无需手动加载文件 (注:改变EMMC中的OS类型时,仍需先擦除Flash再烧写新的OS);
2) 修正 FriendlyWrt 串口无法登录的问题;

24.29 日期 2020-07-10

  • Android 10 更新:

1) SOM-RK3399缺省启用HDMI IN音频输入与耳机口音频输出
2) 增加支持2个USB摄像头协同工作,Camera应用可切换前/后摄像头预览
3) 集成了浏览器Chrome和输入法Gboard

24.30 日期 2020-06-23

  • 增加新OS: Android 10, 主要特性如下:

1) 基于原⼚ android-10.0-mid-rkr8, 具体版本如下:
- AOSP: android-10.0.0_r32
- Linux version 4.19.111
- U-Boot 2017.09
2) 支持MIPI-CSI摄像头和USB摄像头
3) 支持HDMI IN视频输入
4) 集成Google Play应⽤用商店
5) 集成Lightning为缺省浏览器器应⽤用 (注:Android官⽅缺省不提供Browser应用)
6) 启⽤Android动态分区特性(dynamic partitions)
7) 已整合FriendlyThings demo
8) 支持4G网络,模块型号为: Quectel EC20
9) 支持RC-100红外遥控器器,支持下拉通知栏、截屏
10) 提供自动隐藏导航栏的设置
11) 更新用于 Android10的线刷工具:AndroidTool_Release_v2.71.zip,Linux_Upgrade_Tool_v1.49.zip

  • Android8更新如下:

增加自动隐藏导航栏的设置

24.31 日期 2020-03-24

1) 更新Android8.1_SDK至Rockchip官方版本v8.32_20200218
2) 升级OpenCV版本至 4.2
3) 升级OpenWrt版本至 19.07.1
4) DDR loader版本更新到1.24,LPDDR4支持多频点
5) 加强了摄像头驱动的稳定性
6) 内核稳定性方面的优化

24.32 日期 2019-12-27

  • FriendlyCore/FriendlyDesktop 更新如下:

1) 预装 wiringPi for python3,支持在非root用户下访问gpio等硬件资源
2) 优化了opencv在非root用户下的使用,修正pi用户下的virtual env权限
3) 更新了 ramdisk, 修正 /tmp 目录的权限问题
4) 更改内核配置,改善了 docker 的兼容性

  • FriendlyWrt更新如下:

升级版本到 OpenWrt r19-snapshot 64bit,支持Docker CE

  • eflasher更新如下:

1) 支持只烧写部分文件,例如仅更新emmc内的内核和uboot
2) 在界面上增加禁用overlay filesystem选项
3) 增加命令行参数,方便脚本调用,可以实现无交互的一键安装
4) 修正备份与恢复镜像后,不同设备会出现相同mac地址的问题
5) UI界面现在可以配置标题,隐藏界面菜单与按钮

24.33 日期 2019-09-26

  • FriendlyCore/FriendlyDesktop小修正:

修正 Qt5 demo在某些LCD下无法触摸的问题

24.34 日期 2019-09-03

  • Android 8.1更新如下:

1) 更新Android8.1_SDK至Rockchip官方版本v8.20_20190801 (内核更新到4.4.167)
2) 增加录音音量(+15dB)
3) 修正某些HDMI显示器比例显示不正确的问题
4) USB 3.0 Host: 启用AutoRetry特性,改进部分USB3.0工业摄像头的稳定性

  • FriendlyCore/FriendlyDesktop更新如下:

1) 合并原厂的内核更新,并升级至kernel-4.4.179
2) USB 3.0 Host: 启用AutoRetry特性,改进部分USB3.0工业摄像头的稳定性
3) 增加Linux下支持使用HDMI IN

  • Buildroot更新如下:

1) 更新Buildroot至Rockchip官方版本v2.2.0_20190628
2) 合并原厂的内核更新,并升级至kernel-4.4.179
3) 增加使能开机后自动加载蓝牙固件

24.35 日期 2019-07-18

  • FriendlyCore/FriendlyDesktop/Lubuntu更新:

1) 修改SDIO最高频率为150M以提升Wi-Fi性能
2) 修复部分NVMe M.2固态硬盘无法识别的问题,提升兼容性

  • Android 8更新

1) 修改SDIO最高频率为150M以提升Wi-Fi性能
2) 启用了蓝牙BLE的支持

24.36 日期 2019-06-25

Linux(Ubuntu 16.04/18.04) 全面采用 OverlayFS,以增强文件系统的稳定性.

24.37 日期 2019-05-23

  • Ubuntu 18.04(FriendlyCore, FriendlyDesktop)更新:

1) 修正 Pulseaudio 服务没法启动的问题
2) 修正 Bluetooth 服务的问题

24.38 日期 2019-05-11

  • Android 8.1更新如下:

1) 增加支持PWM风扇自动调速
2) 增加SSD支持: 开机会自动挂载SSD (注:SSD分区需格式化为ext4格式)

  • Ubuntu 18.04(FriendlyCore, FriendlyDesktop)更新:

1) 内核版本更新到 Linux-4.4.167
2) 升级摄像头isp驱动(由 cif_isp10 升级至 rk_isp1),支持双mipi摄像头同时工作
3) 升级集成OpenCV 4.1,支持双mipi摄像头, USB摄像头(罗技C920)
4) 增加4G LTE无线模块的支持(型号:Quectel EC20)
5) 增加支持PWM风扇自动调速
6) 改进了FriendlyDesktop的易用性

  • EFlasher烧写专用系统更新:

1) 精简了文件系统体积
2) 为了启动速度,网络配置由DHCP改为静态IP地址(192.168.1.231)

24.39 日期 2019-03-08

  • 增加Buildroot项目:

增加 Buildroot Linux系统,基于Rockchip原厂RK3399 Linux SDK,项目开源,详情请参考:Buildroot

  • Android 8.1更新如下:

1) 优化了LCD和HDMI屏幕旋转的设置,支持命令行操作(命令:wm rotation 90)
2) 修复将音频强制输出到耳机后麦克风无法声音的问题

  • FriendlyCore, FriendlyDesktop, Lubuntu更新如下:

1) 内核版本更新到 v4.4.154
2) 增加Docker的支持
3) 内核配置项进行了优化,启用更多特性与设备驱动
4) 修正USB WiFi无法使用的问题
5) 修正ISP摄像头的稳定性问题

24.40 日期 2018-12-19

  • Android 8.1更新如下:

1) 更新AOSP源码版本到 Android8.1-SDK v5.00-20181109
2) 增加HDMI分辨率与边界调节的设置界面
3) 增加音频输出设置,可设置默认输出到耳机或者HDMI
4) 增加OV13850和和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口

  • FriendlyCore更新如下:

1) 增加OV13850和和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口
2)增加ffmpeg支持,提供静态库和头文件,支持4K硬解(不支持硬编码)
3)增加命令行mpv播放器,支持4K硬解

  • FriendlyDesktop更新如下:

1) 增加OV13850和和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口
2) 增加chromium-browser浏览器,支持网页1080P硬解播放, 支持WebGL
3)增加ffmpeg支持,提供静态库和头文件,支持4K硬解(不支持硬编码)
4) 修正音量调节Issue
5) 将音频输出通道默认设置为HDMI (可通过/etc/pulse/default.pa修改配置)
6) 优化本地硬解播放器,与本地mp4文件关联,双击本地视频默认会启动本地硬解播放器播放(仅支持mp4文件)
7) 为NEO4自动启用 swap 分区
8) 修正 hostapd 相关的issue
9) 调整DPMS设置,默认关闭自动休眠

  • Lubuntu更新如下:

1) 增加OV13850和宽动态OV4689摄像头支持,可任意连接到CSI1或CSI2接口
2) 增加chromium-browser浏览器,支持网页1080P硬解播放, 支持WebGL
3) 将音频输出通道默认设置为HDMI(可通过/etc/asound.conf修改配置)
4) 优化本地硬解播放器,与本地mp4文件关联,双击本地视频默认会启动本地硬解播放器播放(仅支持mp4文件)
5) 修正前一版本中存在的一些关于软件包报错的issue
6) 调整DPMS设置,默认关闭自动休眠

24.41 日期 2018-11-12

  • Android 8.1更新如下:

1) 增加USB-C显示器的支持
2) 增加4G网络的支持,支持模块的型号为:Quectel EC20
3) 增加Android硬件访问库FriendlyThing,用于在Android下编程访问各种硬件资源,比如Uart, SPI, I2C, GPIO等
4) 优化内核配置提升PCIe性能,连接NVME SSD会有较大幅度的性能提升
5) 集成Google Play应用商店
6) 改进摄像头的底层支持,使之能自动适应竖屏(HD702E)和横屏(HDMI)
7) 修复Android8下接NVME SSD时分区表异常以及Android8无法启动的问题

  • Android 7.1更新如下:

1) 增加4G网络的支持,支持模块的型号为:Quectel EC20
2) 增加Android硬件访问库FriendlyThing,用于在Android下编程访问各种硬件资源,比如Uart, SPI, I2C, GPIO等
3) 优化内核配置提升PCIe性能,连接NVME SSD会有较大幅度的性能提升
4) 改进摄像头的底层支持,使之能自动适应竖屏(HD702E)和横屏(HDMI)
5) 修复Android8下接NVME SSD时分区表异常以及Android8无法启动的问题

  • FriendlyCore和FriendlyDesktop更新如下:

1) 增加OV13850摄像头的支持,提供支持ISP的gsteamer插件
2) 增加WiringPi的支持,用于C语言编程访问GPIO等硬件资源
3) 增加WiringPi-Python的支持,用于Python编程访问GPIO等硬件资源
4) 优化内核配置提升PCIe性能,连接NVME SSD会有较大幅度的性能提升

24.42 日期 2018-09-21

  • 增加一款eDP屏的支持
  • Linux启用了PCI-E转Sata 功能 (AHCI SATA support)
  • Linux下的SquashFS启用了LZO/XZ/ZSTD压缩支持

24.43 日期 2018-09-05

  • 增加新OS: Android 8.1, 主要特性如下:

1) 支持同时接2个CAM1320 (OV13850),可选择切换前后摄像头使用
2) 支持USB摄像头 (1路, 不能与CAM1320同时使用)
3) 支持AndroidNN GPU 加速方案,可为采用AndroidNN API开发的 AI 相关应用提供通用加速支持
4) 集成了Rockchip官方提供的Tensorflow Lite物品识别Demo: TfLiteCameraDemo (启动前须先连接CAM1320或USB摄像头)
5) 集成Lightning为缺省浏览器应用 (注:Android官方缺省不提供Browser应用)
6) 支持RC-100红外遥控器,支持下拉通知栏、截屏
7) 支持Android全盘加密功能,system分区已启用Verity特性,使用adb时,可通过adb root; adb disable-verity命令禁止Verity
8) 支持MTP功能,在连接Type-C后,可进入Settings -> Connected devices -> USB 选择相应功能
9) 内核版本升级到 4.4.126
10) 更新AOSP源码到版本 android-8.1.0_r41,并更新8月份安全补丁

  • FriendlyCore 增加Qt双摄像头示例程序:示例位于/opt/dual-camera目录,通过run.sh运行 (启动前须先连接两个USB摄像头,建议使用罗技C270或罗技C922摄像头)
  • FriendlyDesktop 默认设置HDMI分辨率为 1080P