SOM-RK3399v2/zh
Contents
- 1 简介
- 2 硬件特性
- 3 布局和引脚定义
- 4 参考底板
- 5 快速入门
- 6 Debian11 桌面系统的使用
- 6.1 Debian11桌面系统简介
- 6.2 帐户与密码
- 6.3 查看IP地址
- 6.4 通过ssh登录Debian
- 6.5 更新软件包
- 6.6 安装x11vnc远程桌面
- 6.7 安装内核头文件
- 6.8 更改时区
- 6.9 更换开机LOGO和桌面墙纸
- 6.10 开机自动启动程序(例如Kodi)
- 6.11 取消USB存储设备自动挂载
- 6.12 设置中文语言与输入法
- 6.13 安装Plex多媒体服务器
- 6.14 在Debian系统上安装Docker
- 6.15 如何测试NPU
- 6.16 如何测试VPU
- 6.17 设置WiFi无线链接
- 6.18 取消自动登录
- 6.19 测试OpenGL ES性能
- 6.20 设置HDMI/DP屏幕分辨率
- 6.21 调节HDMI边界
- 6.22 Chromium网页浏览器
- 6.23 测试mpp视频硬件编码
- 7 Debian10 桌面系统的使用
- 8 FriendlyDesktop系统的使用
- 8.1 帐户与密码
- 8.2 设置WiFi无线链接
- 8.3 设置HDMI/DP屏幕分辨率
- 8.4 调节HDMI边界
- 8.5 设置eDP显示屏旋转
- 8.6 测试OpenGL ES性能
- 8.7 如何播放4K视频
- 8.8 如何使用USB摄像头
- 8.9 如何通过蓝牙传输文件
- 8.10 安装使用OpenCV
- 8.11 开发Qt程序
- 8.12 访问GPIO/I2C/串口等硬件资源
- 8.13 切换音频默认输出设备
- 8.14 播放网络流媒体(或网络摄像头)
- 8.15 Chromium网页浏览器
- 8.16 屏幕保护与自动休眠相关设置
- 8.17 安装Scratch
- 8.18 安装Arduino IDE
- 8.19 开机自动启动程序
- 8.20 用root用户登录桌面
- 8.21 FriendlyDesktop下使用NVME SSD
- 9 FriendlyCore的使用
- 10 同时适用于FriendlyDesktop与FriendlyCore系统的功能特性
- 11 初始化NVME固态硬盘和USB移动硬盘
- 12 Buildroot Linux系统的使用
- 13 Lubuntu 系统的使用
- 14 Android8.1 系统的使用
- 14.1 使用MIPI摄像头进行拍照和录像
- 14.2 使用双MIPI摄像头预览与录像
- 14.3 切换系统语言
- 14.4 Android8.1 硬件访问
- 14.5 Android神经网络 NN SDK示例
- 14.6 如何使用adb(Android Debug Bridge)
- 14.7 HDMI分辨率、边界调节
- 14.8 屏幕旋转
- 14.9 隐藏Navigation bar
- 14.10 切换音频输出通道
- 14.11 调整录音的音量
- 14.12 定制开关机界面与动画
- 14.13 移除Google框架
- 14.14 用摇控器操作Android
- 14.15 使用USB摄像头进行拍照和录像
- 14.16 Android下使用4G模块EC20
- 14.17 Android下使用NVME SSD高速固态硬盘
- 14.18 设置调速散热风扇
- 15 Android7.1 系统的使用
- 16 如何编译系统
- 17 硬件资源访问
- 18 备份文件系统并创建SD映像(将系统及应用复制到另一块开发板)
- 19 更改内核命令行参数 (仅支持4.4内核)
- 20 Linux操作系统的常见操作
- 21 救砖办法
- 22 更多OS
- 23 Link to Rockchip Resources
- 24 原理图, PCB图
- 25 更新日志
- 25.1 2024-04-21
- 25.2 2024-03-15
- 25.3 2024-01-31
- 25.4 2023-12-01
- 25.5 2023-10-31
- 25.6 2023-07-01
- 25.7 2023-05-26
- 25.8 2023-05-21
- 25.9 2023-04-26
- 25.10 2023-02-10
- 25.11 2023-01-09
- 25.12 2022-12-04
- 25.13 2022-09-06
- 25.14 2022-08-19
- 25.15 2022-08-03
- 25.16 2022-07-27
- 25.17 2022-07-04
- 25.18 2021-12-02
- 25.19 2021-10-29
- 25.20 2021-08-31
- 25.21 2021-03-11
- 25.22 2020-12-24
- 25.23 2020-12-17
- 25.24 2020-12-17
- 25.25 2020-10-27
- 25.26 2020-09-27
- 25.27 日期 2020-09-16
- 25.28 日期 2020-08-17
- 25.29 日期 2020-07-10
- 25.30 日期 2020-06-23
- 25.31 日期 2020-03-24
- 25.32 日期 2019-12-27
- 25.33 日期 2019-09-26
- 25.34 日期 2019-09-03
- 25.35 日期 2019-07-18
- 25.36 日期 2019-06-25
- 25.37 日期 2019-05-23
- 25.38 日期 2019-05-11
- 25.39 日期 2019-03-08
- 25.40 日期 2018-12-19
- 25.41 日期 2018-11-12
- 25.42 日期 2018-09-21
- 25.43 日期 2018-09-05
- 25.44 2018-08-20
- 25.45 2018-08-02
- 25.46 2018-07-28
- 25.47 2018-07-27
- 25.48 2018-07-19
- 25.49 2018-06-20
1 简介
- SOM-RK3399v2是友善电子团队设计的一款266-pin金手指形式高性能ARM计算机模块,它采用了瑞芯微64位六核SoC RK3399作为主处理器,标配4GB LPDDR4内存和16GB闪存,板载2x2 MIMO双天线WiFi模组,尺寸只有69.6x50mm,模块上带有独立的TypeC供电接口,以及USB-C显示接口,无需底板也可以单独使用。
- SOM-RK3399v2计算模块具有丰富的外设和扩展接口,通过底板可连接使用4通道NVMe高速固态硬盘,读写速度高达1GB/s; 它还可以扩展使用双MIPI宽动态摄像头,另外它还带有eDP显示接口,MIPI显示接口, 1路USB3.0, 2路USB2.0, 以及I2C, I2S, SPI, PWM, GPIO和串口等各种资源。
- SOM-RK3399v2可流畅运行Android 8.1, Ubuntu 18.04, Armbian, Buildroot等主流嵌入式操作系统, 软件资源和生态非常丰富,尤其是Android 8.1具有NN SDK神经网络加速软件包, Qt-5.10集成了VPU硬件编解码, GPU图形加速,可使用QML快速开发流畅的动态式界面,因此SOM-RK3399v2核心板非常适合中小型企业和初创公司做高端人脸识别,机器视觉,VR虚拟现实,自动驾驶,深度计算分析等方面的人工智能产品快速原型及产品开发。
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: 标配16GB eMMC 5.1闪存,可定制选配32GB/64GB
- 有线网络: 集成千兆以太网PHY
- 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
- DP on Type-C: DisplayPort 1.2 Alt Mode on USB Type-C
- LCD Interface: 一个eDP 1.3(4 线,10.8Gbps), 一个或2个4线MIPI-DSI
- USB
- USB 2.0: 2个独立的原生USB 2.0 Host
- USB 3.0: 1个原生USB 3.0 Host
- USB Type-C: 支持USB3.0 Type-C 和 DisplayPort 1.2 Alt Mode on USB Type-C
- PCIe: PCIe x4, compatible with PCIe 2.1, Dual operation mode
- SDIO/MMC: 一路SDIO/MMC, 用来扩展SD卡
- 调试串口: 一路调试串口 UART, 3V level, 1500000bps
- 按键: PowerKey, Reset, Recovery 各一个
- LED指示灯: 一个电源LED ,一个GPIO控制的状态LED
- 其它资源
- 2 X 1.8V I2C, 1 x 3V I2C
- 1 x 3V UART/SPI
- 2 x PWM
- 1 x IR-RX
- 1 x SPDIF_TX
- 1 x 1.8V 8ch-I2S,
- 6 x 1.8V GPIO, 8 x 3V GPIO
- 3 x 1.8V ADC inputs
- 供电: DC12V/1A(金手指), Type-C:DC5V/2.5A(Type-C)
- PCB: 8层沉金工艺, 50 mm x 69.6 mm x 1.2mm, 260 Pin金手指接口
- 环境工作温度: -20℃ to 70℃
3 布局和引脚定义
- 260 Pin 金手指定义
- 匹配的卡槽型号:0.5mm Pitch 5.2H 260-Pin Standard Type DDR4 SODIMM Socket, 参考型号:https://www.te.com/usa-en/product-2309409-5.html
Top | Bottom | ||||||||
---|---|---|---|---|---|---|---|---|---|
Pin# | Assignment | Pin Type | If Not Use | Description | Pin# | Assignment | Pin Type | If Not Use | Description |
1 | VCC_IN | Power IN | / | 12V Power Input | 2 | VCC_IN | Power IN | / | 12V Power Input |
3 | VCC_IN | Power IN | / | 4 | VCC_IN | Power IN | / | ||
5 | VCC_IN | Power IN | / | 6 | VCC_IN | Power IN | / | ||
7 | VCC_IN | Power IN | / | 8 | VCC_IN | Power IN | / | ||
9 | GND | Power | / | System Ground(0V) | 10 | GND | Power | / | System Ground(0V) |
11 | GND | Power | / | 12 | GND | Power | / | ||
13 | VCC5V0_SYS | Power OUT | float | 5V Power Output,2A max. Auto on when system power on, and off when system power off. | 14 | PWR_KEY | In | float | System Power Key signal, active low, internal pulled up to 3.3V with 10K |
15 | VCC5V0_SYS | Power OUT | float | 16 | VDC_ONOFF | In | float | Power On Mode Select, float for Auto Start,short to GND for PowerKey Mode | |
17 | VCC5V0_SYS | Power OUT | float | 18 | RTC_BATT_IN | Power IN | float | RTC backup battery(3V)input,backup current is 25uA | |
19 | VCC5V0_SYS | Power OUT | float | 20 | RECOVERY | In | float | System RECOVERY Key signal,acticve low | |
21 | VCC3V3_SYS | Power OUT | float | 3.3V Power Output,1A max. Auto on when system power on, and off when system power off. | 22 | RESET_IN_H | In | float | RESET signal, acticve high |
23 | VCC3V3_SYS | Power OUT | float | 24 | GND | Power | / | System Ground(0V) | |
25 | VCC3V3_SYS | Power OUT | float | 26 | ADC_IN0 | In | float | 0V to 1.8V inputs of RK3399 SoC ADC | |
27 | VCC3V3_SYS | Power OUT | float | 28 | ADC_IN2 | In | float | ||
29 | VCC_1V8 | Power OUT | float | 1.8V Power Output,200mA max. Auto on when system power on, and off when system power off. | 30 | ADC_IN3 | In | float | |
31 | VCC_1V8 | Power OUT | float | 32 | GND | Power | / | System Ground(0V) | |
33 | VCC3V3_S3 | Power OUT | float | 3.3V Power Output,100mA max. Auto on when system power on, and off when system sleep or power off. | 34 | GPIO1_A0 | In/Out | float | 3V GPIO. Linux GPIO 32 |
35 | GND | Power | / | System Ground(0V) | 36 | GPIO1_A1 | In/Out | float | 3V GPIO. Linux GPIO 33 |
37 | GPIO0_A2 | In/Out | float | 1.8V GPIO. Linux GPIO 2 | 38 | GPIO1_A3 | In/Out | float | 3V GPIO. Linux GPIO 35 |
39 | GPIO2_A2 | In/Out | float | 1.8V GPIO. Linux GPIO 66 | 40 | GPIO1_A4 | In/Out | float | 3V GPIO. Linux GPIO 36 |
41 | GPIO2_A3 | In/Out | float | 1.8V GPIO. Linux GPIO 67 | 42 | GPIO1_C2 | In/Out | float | 3V GPIO . Linux GPIO 50 |
43 | GPIO2_A4 | In/Out | float | 1.8V GPIO. Linux GPIO 68 | 44 | GPIO1_C6 | In/Out | float | 3V GPIO. Linux GPIO 54 |
45 | GPIO2_A5 | In/Out | float | 1.8V GPIO. Linux GPIO 69 | 46 | GPIO1_C7 | In/Out | float | 3V GPIO . Linux GPIO 55 |
47 | GPIO2_A6 | In/Out | float | 1.8V GPIO. Linux GPIO 70 | 48 | GPIO1_D0 | In/Out | float | 3V GPIO . Linux GPIO 56 |
49 | IR_RX | In | float | Infrared Receiver input, 1.8V level | 50 | GPIO4_C5/SPDIF_TX | In/Out | float | 3V GPIO . Linux GPIO 149. or SPDIF Output |
51 | GND | Power | / | System Ground(0V) | 52 | UART2DBG_TX | Out | float | Debug UART TX, 1500000bps, 3V level |
53 | I2C1_SCL | Out | float | I2C1 clock, 1.8V level, open drian with 2.2K pulled internal | 54 | UART2DBG_RX | In | float | Debug UART RX, 1500000bps, 3V level |
55 | I2C1_SDA | In/Out | float | I2C1 data, 1.8V level, open drian with 2.2K pulled internal | 56 | SPI1_CSn0 | Out | float | SPI1 chip select, 3V level |
57 | I2C2_SDA | In/Out | float | I2C2 data, 1.8V level, open drian with 2.2K pulled internal | 58 | SPI1_TXD/UART4_TX | Out | float | SPI1 MOSI, or UART4 TX,3V level |
59 | I2C2_SCL | Out | float | I2C2 clock, 1.8V level, open drian with 2.2K pulled internal | 60 | SPI1_RXD/UART4_RX | In | float | SPI1 MISO, or UART4 RX,3V level |
61 | I2C7_SCL_HDMI | Out | float | I2C7 clock, 1.8V level, for HDMI EDID CLK, open drian with 2.2K pulled internal | 62 | SPI1_CLK | Out | float | SPI1 Clock, 3V level |
63 | I2C7_SDA_HDMI | In/Out | float | I2C7 data, 1.8V level, for HDMI EDID DATA, open drian with 2.2K pulled internal | 64 | GND | Power | / | System Ground(0V) |
65 | GND | Power | / | System Ground(0V) | 66 | GPIO4_C1/I2C3_SCL | In/Out | float | I2C3 clock, 3V level,open drian. or GPIO,Linux GPIO 145 |
67 | I2S0_SCLK | Out | float | I2S0 continuous serial clock, 1.8V level | 68 | GPIO4_C0/I2C3_SDA | In/Out | float | I2C3 data, 3V level,open drian. or GPIO,Linux GPIO 144 |
69 | I2S0_LRCK_RX | Out | float | I2S0 word select for input data, 1.8V level | 70 | I2C4_TPSCL | Out | float | I2C4 clock,3V level, open drian with 2.2K pulled up,for touch panel |
71 | I2S0_LRCK_TX | Out | float | I2S0 word select for output data, 1.8V level | 72 | I2C4_TPSDA | In/Out | float | I2C4 data,3V level, open drian with 2.2K pulled up,for touch panel |
73 | I2S0_SDI0 | In | float | I2S0 serial data, 1.8V level | 74 | GND | Power | / | System Ground(0V) |
75 | I2S0_SDI1SDO3 | In/out | float | I2S0 serial data, 1.8V level | 76 | HP_DET_H | In | Pull up to VCC3V3_SYS | headphone insert detect, active high |
77 | I2S0_SDI2SDO2 | In/out | float | I2S0 serial data, 1.8V level | 78 | GPIO4_D5_LCD_BL_EN | Out | float | LCD backlight on/off control, active high, 3V level |
79 | I2S0_SDI3SDO1 | In/out | float | I2S0 serial data, 1.8V level | 80 | GPIO4_D6_LCD_RST_H | Out | float | LCD reset, active high, 3V level. |
81 | I2S0_SDO0 | out | float | I2S0 serial data, 1.8V level | 82 | GPIO1_B5_TP_RST | Out | float | Touch panel reset, active low, 3V level |
83 | GND | Power | / | System Ground(0V) | 84 | GPIO1_C4_TP_INT | In | float | Touch panel IRQ, active low, 3V level |
85 | I2S_CLK | out | float | I2S Mclk for I2S0 and I2S1 | 86 | GND | Power | / | System Ground(0V) |
87 | GND | Power | / | System Ground(0V) | 88 | PWM0_BL | Out | float | PWM0 for LCD backlight dimming |
89 | I2S1_SCLK | Out | float | I2S1 continuous serial clock, 1.8V level | 90 | GPIO4_C6/PWM1 | Out | float | PWM1 for cooling fan control |
91 | 2S1_LRCK_RX | Out | float | I2S1 word select for input data, 1.8V level | 92 | GND | Power | / | System Ground(0V) |
93 | I2S1_LRCK_TX | Out | float | I2S1 word select for output data, 1.8V level | 94 | VCC3V0_SD | Power Out | float | 3V power out for SD card. |
95 | I2S1_SDI0 | In | float | I2S0 serial data, 1.8V level | 96 | GND | Power | / | System Ground(0V) |
97 | I2S1_SDO0 | Out | float | I2S0 serial data, 1.8V level | 98 | SDMMC0_D0 | In/Out | float | SD card Data0 |
99 | MIPI_CSI0_RST | Out | float | Camera Reset for MIPI CSI0, 1.8V level | 100 | SDMMC0_D1 | In/Out | float | SD card Data1 |
101 | MIPI_CSI0_PWN | Out | float | Camera Power Down for MIPI CSI0, 1.8V level | 102 | SDMMC0_D2 | In/Out | float | SD card Data2 |
103 | MIPI_CSI1_RST | Out | float | Camera Reset for MIPI CSI1, 1.8V level | 104 | SDMMC0_D3 | In/Out | float | SD card Data3 |
105 | MIPI_CSI1_PWN | Out | float | Camera Power Down for MIPI CSI1, 1.8V level | 106 | SDMMC0_CMD | Out | float | SD card CMD |
107 | VCC1V8_CAM | Power Out | float | Power Out for Camera IO | 108 | SDMMC0_DET_L | In | float | SD card detect |
109 | GND | Power | / | System Ground(0V) | 110 | GND | Power | / | System Ground(0V) |
111 | GPIO2_B3_CIF_CLKOUTA | Out | float | MCLK for camera sensor | 112 | SDMMC0_CLK | Out | float | SD card Clock |
113 | GND | Power | / | System Ground(0V) | 114 | GND | Power | / | System Ground(0V) |
115 | MIPI_RX0_D3N | In | float | MIPI CSI0 negative differential data line | 116 | MIPI_TX1/RX1_D0N | In/Out | float | MIPI CSI1/DSI1 negative differential data line |
117 | MIPI_RX0_D3P | In | float | MIPI CSI0
positive differential data line |
118 | MIPI_TX1/RX1_D0P | In/Out | float | MIPI CSI1/DSI1
positive differential data line |
119 | GND | Power | / | System Ground(0V) | 120 | GND | Power | / | System Ground(0V) |
121 | MIPI_RX0_D2N | In | float | MIPI CSI0 negative differential data line | 122 | MIPI_TX1/RX1_D1N | In/Out | float | MIPI CSI1/DSI1 negative differential data line |
123 | MIPI_RX0_D2P | In | float | MIPI CSI0
positive differential data line |
124 | MIPI_TX1/RX1_D1P | In/Out | float | MIPI CSI1/DSI1
positive differential data line |
125 | GND | Power | / | System Ground(0V) | 126 | GND | Power | / | System Ground(0V) |
127 | MIPI_RX0_CLKN | In | float | MIPI CSI0 negative differential clock line | 128 | MIPI_TX1/RX1_CLKN | In/Out | float | MIPI CSI1/DSI1 negative differential clock line |
129 | MIPI_RX0_CLKP | In | float | MIPI CSI0
positive differential clock line |
130 | MIPI_TX1/RX1_CLKP | In/Out | float | MIPI CSI1/DSI1
positive differential clock line |
131 | GND | Power | / | System Ground(0V) | 132 | GND | Power | / | System Ground(0V) |
133 | MIPI_RX0_D1N | In | float | MIPI CSI0 negative differential data line | 134 | MIPI_TX1/RX1_D2N | In/Out | float | MIPI CSI1/DSI1 negative differential data line |
135 | MIPI_RX0_D1P | In | float | MIPI CSI0
positive differential data line |
136 | MIPI_TX1/RX1_D2P | In/Out | float | MIPI CSI1/DSI1
positive differential data line |
137 | GND | Power | / | System Ground(0V) | 138 | GND | Power | / | System Ground(0V) |
139 | MIPI_RX0_D0N | In | float | MIPI CSI0 negative differential data line | 140 | MIPI_TX1/RX1_D3N | In/Out | float | MIPI CSI1/DSI1 negative differential data line |
141 | MIPI_RX0_D0P | In | float | MIPI CSI0
positive differential data line |
142 | MIPI_TX1/RX1_D3P | In/Out | float | MIPI CSI1/DSI1
positive differential data line |
143 | GND | Power | / | System Ground(0V) | 144 | GND | Power | / | System Ground(0V) |
Connector Key | Connector Key | ||||||||
145 | HDMI_CEC | In/Out | float | HDMI CEC signal, 3V level | 146 | GND | Power | / | System Ground(0V) |
147 | HDMI_HPD | In | float | HDMI hot plug | 148 | MIPI_TX0_D3N | Out | float | MIPI DSI0 negetive differential data line |
149 | GND | Power | / | System Ground(0V) | 150 | MIPI_TX0_D3P | Out | float | MIPI DSI0 positive differential data line |
151 | HDMI_TXCN | Out | float | HDMI differential clock line negative | 152 | GND | Power | / | System Ground(0V) |
153 | HDMI_TXCP | Out | float | HDMI differential clock line positive | 154 | MIPI_TX0_D2N | Out | float | MIPI DSI0 negetive differential data line |
155 | GND | Power | / | System Ground(0V) | 156 | MIPI_TX0_D2P | Out | float | MIPI DSI0 positive differential data line |
157 | HDMI_TX0N | Out | float | HDMI differential data line negative | 158 | GND | Power | / | System Ground(0V) |
159 | HDMI_TX0P | Out | float | HDMI differential data line positive | 160 | MIPI_TX0_CLKN | Out | float | MIPI DSI0 negetive differential clock line |
161 | GND | Power | / | System Ground(0V) | 162 | MIPI_TX0_CLKP | Out | float | MIPI DSI0 positive differential clock line |
163 | HDMI_TX1N | Out | float | HDMI differential data line negative | 164 | GND | Power | / | System Ground(0V) |
165 | HDMI_TX1P | Out | float | HDMI differential data line positive | 166 | MIPI_TX0_D1N | Out | float | MIPI DSI0 negetive differential data line |
167 | GND | Power | / | System Ground(0V) | 168 | MIPI_TX0_D1P | Out | float | MIPI DSI0 positive differential data line |
169 | HDMI_TX2N | Out | float | HDMI differential data line negative | 170 | GND | Power | / | System Ground(0V) |
171 | HDMI_TX2P | Out | float | HDMI differential data line positive | 172 | MIPI_TX0_D0N | Out | float | MIPI DSI0 negetive differential data line |
173 | GND | Power | / | System Ground(0V) | 174 | MIPI_TX0_D0P | Out | float | MIPI DSI0 positive differential data line |
175 | USB3.0/TYPE-C1_DP | In/Out | float | TYPEC1 USB 2.0 data+ | 176 | GND | Power | / | System Ground(0V) |
177 | USB3.0/TYPE-C1_DM | In/Out | float | TYPEC1 USB 2.0 data- | 178 | PCIE_RX3_N | In | float | PCIe negative differential data line |
179 | GND | Power | / | System Ground(0V) | 180 | PCIE_RX3_P | In | float | PCIe positive differential data line |
181 | USB3.0/TYPEC1_TX1P | Out | float | TYPEC1 USB3.0 PHY0 SuperSpeed TX1P | 182 | GND | Power | / | System Ground(0V) |
183 | USB3.0/TYPEC1_TX1M | Out | float | TYPEC1 USB3.0 PHY0 SuperSpeed TX1M | 184 | PCIE_TX3N | Out | float | PCIe negative differential data line |
185 | GND | Power | / | System Ground(0V) | 186 | PCIE_TX3P | Out | float | PCIe positive differential data line |
187 | USB3.0/TYPEC1_RX1P | In | float | TYPEC1 USB3.0 PHY0 SuperSpeed RX1P | 188 | GND | Power | / | System Ground(0V) |
189 | USB3.0/TYPEC1_RX1M | In | float | TYPEC1 USB3.0 PHY0 SuperSpeed RX1M | 190 | PCIE_RX2_N | In | float | PCIe negative differential data line |
191 | GND | Power | / | System Ground(0V) | 192 | PCIE_RX2_P | In | float | PCIe positive differential data line |
193 | TYPEC1_TX2P | Out | float | TYPEC1 USB3.0 PHY0 SuperSpeed TX2P | 194 | GND | Power | / | System Ground(0V) |
195 | TYPEC1_TX2M | Out | float | TYPEC1 USB3.0 PHY0 SuperSpeed TX2M | 196 | PCIE_TX2N | Out | float | PCIe negative differential data line |
197 | GND | Power | / | System Ground(0V) | 198 | PCIE_TX2P | Out | float | PCIe positive differential data line |
199 | TYPEC1_RX2P | In | float | TYPEC1 USB3.0 PHY0 SuperSpeed RX2P | 200 | GND | Power | / | System Ground(0V) |
201 | TYPEC1_RX2M | In | float | TYPEC1 USB3.0 PHY0 SuperSpeed RX2M | 202 | PCIE_RX1_N | In | float | PCIe negative differential data line |
203 | GND | Power | / | System Ground(0V) | 204 | PCIE_RX1_P | In | float | PCIe positive differential data line |
205 | TYPEC1_SBU1 | In/Out | float | TYPEC1 SBU1 | 206 | GND | Power | / | System Ground(0V) |
207 | TYPEC1_SBU2 | In/Out | float | TYPEC1 SBU2 | 208 | PCIE_TX1N | Out | float | PCIe negative differential data line |
209 | GND | Power | / | System Ground(0V) | 210 | PCIE_TX1P | Out | float | PCIe positive differential data line |
211 | TYPEC1_SBU1_DC | Out | float | TYPEC1 SBU1 DC Bias | 212 | GND | Power | / | System Ground(0V) |
213 | TYPEC1_SBU2_DC | Out | float | TYPEC1 SBU2 DC Bias | 214 | PCIE_RX0_N | In | float | PCIe negative differential data line |
215 | TYPEC1_U2VBUSDET | In | float | TYPEC1 Vbus detect | 216 | PCIE_RX0_P | In | float | PCIe positive differential data line |
217 | GND | Power | / | System Ground(0V) | 218 | GND | Power | / | System Ground(0V) |
219 | HOST0_DP | In/Out | float | USB 2.0 Host0 data+ | 220 | PCIE_TX0N | Out | float | PCIe negative differential data line |
221 | HOST0_DM | In/Out | float | USB 2.0 Host0 data- | 222 | PCIE_TX0P | Out | float | PCIe positive differential data line |
223 | GND | Power | / | System Ground(0V) | 224 | GND | Power | / | System Ground(0V) |
225 | HOST1_DP | In/Out | float | USB 2.0 Host1 data+ | 226 | PCIE_REF_CLKN | Out | float | PCIe negative differential reference clock line |
227 | HOST1_DM | In/Out | float | USB 2.0 Host1 data- | 228 | PCIE_REF_CLKP | Out | float | PCIe positive differential reference clock line |
229 | GND | Power | / | System Ground(0V) | 230 | GND | Power | / | System Ground(0V) |
231 | EDP_TX3N | Out | float | eDP data line negative | 232 | LAN_LED0_BLINK | Out | float | 10/100/1000M Ethernet Status LED0 |
233 | EDP_TX3P | Out | float | eDP data line positive | 234 | LAN_LED1_LINK | Out | float | 10/100/1000M Ethernet Status LED1 |
235 | GND | Power | / | System Ground(0V) | 236 | GND | Power | / | System Ground(0V) |
237 | EDP_TX2N | Out | float | eDP data line negative | 238 | MDI3- | In/Out | float | 10/100/1000M Ethernet MDI3- |
239 | EDP_TX2P | Out | float | eDP data line positive | 240 | MDI3+ | In/Out | float | 10/100/1000M Ethernet MDI3+ |
241 | GND | Power | / | System Ground(0V) | 242 | GND | Power | / | System Ground(0V) |
243 | EDP_TX1N | Out | float | eDP data line negative | 244 | MDI2- | In/Out | float | 10/100/1000M Ethernet MDI2- |
245 | EDP_TX1P | Out | float | eDP data line positive | 246 | MDI2+ | In/Out | float | 10/100/1000M Ethernet MDI2+ |
247 | GND | Power | / | System Ground(0V) | 248 | GND | Power | / | System Ground(0V) |
249 | EDP_TX0N | Out | float | eDP data line negative | 250 | MDI1- | In/Out | float | 10/100/1000M Ethernet MDI1- |
251 | EDP_TX0P | Out | float | eDP data line positive | 252 | MDI1+ | In/Out | float | 10/100/1000M Ethernet MDI1+ |
253 | GND | Power | / | System Ground(0V) | 254 | GND | Power | / | System Ground(0V) |
255 | EDP_AUXP | In/Out | float | eDP AUX line positive | 256 | MDI0- | In/Out | float | 10/100/1000M Ethernet MDI0- |
257 | EDP_AUXN | In/Out | float | eDP AUX line negative | 258 | MDI0+ | In/Out | float | 10/100/1000M Ethernet MDI0+ |
259 | GND | Power | / | System Ground(0V) | 260 | GND | Power | / | System Ground(0V) |
- 按键
- 三个按键分别是电源按键, 系统还原和复位。此3个按键相应的信号也存在于260Pin金手指上。
- LED
- 一个红色的电源LED和一个绿色的状态LED
- USB Type-C接口
- 一个全功能USB-C接口,支持DP,支持USB2.0和USB3.0数据传输,可向外输出5V/2A电源,但不可外接电源给板子供电。支持DRP和安卓ADB调试。因为USB3.0模式下不支持ADB,所以,当使用ADB功能时,请连接到PC的USB2.0端口,或使用只具备USB2.0功能的数据线连接板子和PC。
- 另外一个USB Type-C接口(与金手指的电源输入直接相连)只有给板子供电的功能,用于不接底板快速测试板子。
- 电源输入
- 支持从金手指和USB Type-C接口给核心板供电,支持5V到20V宽电压输入,推荐12V。我们运行安兔兔测试程序时,测量到的最大功耗是10.8W, 建议按12W设计。
- 设计底板时,建议在电源输入处添加100uF/16V,或100uF/35V电解电容, 以减少电源振铃和提供瞬态电流。
4 参考底板
- SOM-RK3399 Dev Kit 点击跳转到底板介绍页面
5 快速入门
5.1 准备工作
要开启你的SOM-RK3399,请先准备好以下硬件:
- SOM-RK3399主板
- Type-C数据线
- TF卡: Class10或以上的8GB microSD卡
- USB转串口适配器(可选,用于调试或PC上进行操作)
- 一个DC接口的外接电源,要求输出为12V/2A
- 一台支持HDMI输入的显示器或者电视(或选购LCD配件)
- 一套USB键盘鼠标,同时连接更多USB的设备时还需要USB HUB
- 一台电脑,需要联网,建议使用Ubuntu 18.04 64位系统
5.2 安装系统
5.2.1 下载固件
5.2.1.1 官方固件
访问此处的下载地址下载固件文件 (位于网盘的"01_系统固件"目录):
下表列出了所有官方固件,文件名中的XYZ代表文件的不同用途,其含义如下:
- sd: 安装系统到TF卡时使用
- eflasher: 需要通过TF卡烧写系统到eMMC时使用
- usb: USB线刷时使用
图标 | 文件名 | 版本 | 描述 | 内核版本 |
---|---|---|---|---|
rk3399-XYZ-android10-YYYYMMDD.img.zip | 10 | Android 10 | 4.4.y | |
rk3399-XYZ-android8-YYYYMMDD.img.zip | 8.1 | Android 8.1 | 4.4.y | |
rk3399-XYZ-android7-YYYYMMDD.img.zip | 7.1.2 | Android 7.1.2 | 4.4.y | |
rk3399-XYZ-debian-bullseye-minimal-4.19-arm64-YYYYMMDD.img.gz | bullseye | Debian11 系统固件,LXDE桌面, 不预装推荐软件包, 支持GPU/VPU硬件加速 | 4.19.y | |
rk3399-XYZ-debian-bullseye-desktop-4.19-arm64-YYYYMMDD.img.gz | bullseye | Debian11 完整版固件,LXDE桌面, 预装推荐软件包, 支持GPU/VPU硬件加速 | 4.19.y | |
rk3399-XYZ-debian-bookworm-core-4.19-arm64-YYYYMMDD.img.gz | bookworm | Debian12 精简版固件,没有桌面, 仅命令行 | 4.19.y | |
rk3399-XYZ-ubuntu-focal-desktop-4.19-arm64-YYYYMMDD.img.gz | focal | Ubuntu 20.04固件, LXQT桌面,支持GPU/VPU硬件加速 | 4.19.y | |
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 | |
rk3399-XYZ-friendlycore-focal-4.19-arm64-YYYYMMDD.img.gz | focal | 64位FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core 20.04构建 | 4.19.y | |
rk3399-XYZ-friendlycore-bionic-4.4-arm64-YYYYMMDD.img.gz | bionic | 64位FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core 18.04构建 | 4.4.y | |
rk3399-XYZ-lubuntu-desktop-xenial-4.4-armhf-YYYYMMDD.img.zip | xenial | Lubuntu桌面版固件(内置Qt 5.10.0, X-Window) | 4.4.y | |
rk3399-XYZ-ubuntu-noble-core-4.19-arm64-YYYYMMDD.img.gz | noble | 精简版64位Ubuntu系统固件,基于Ubuntu core 24.04构建 | 4.19.y | |
rk3399-XYZ-openmediavault-6.1-YYYYMMDD.img.gz | Shaitan | OpenMediaVault NAS系统,基于Debian12构建 | 6.1.y | |
rk3399-XYZ-buildroot-4.19-arm64-YYYYMMDD.img.gz | -- | Buildroot 固件,基于Rockchip Linux SDK,带Qt5-wayland图形界面 | 4.19.y | |
rk3399-XYZ-friendlywrt-21.02-YYYYMMDD.img.gz | 21.02 | FriendlyWrt, 基于OpenWrt 21.02 | 6.1.y | |
rk3399-XYZ-friendlywrt-21.02-docker-YYYYMMDD.img.gz | 21.02 | 预装了Docker的FriendlyWrt, 基于OpenWrt 21.02 | 6.1.y | |
rk3399-XYZ-friendlywrt-23.05-YYYYMMDD.img.gz | 23.05 | FriendlyWrt, 基于OpenWrt 23.05 | 6.1.y | |
rk3399-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 | |
rk3399-XYZ-multiple-os-YYYYMMDD-25g.img.gz | - | 内含了多个操作系统的eMMC烧写文件,方便测试各个OS,此固件不会开机自动烧写,需要手动选择要烧写的OS |
5.2.1.2 工具软件(可选)
访问 此处的下载链接 下载所需要的工具软件 (位于网盘的"05_工具软件"目录).
文件名 | 描述 |
---|---|
win32diskimager.rar | 用于将映象文件写入SD卡 |
SD Card Formatter | 用于清空SD卡中的引导数据 |
RKDevTool_Release_v2.84.zip | 瑞芯微的刷机工具,USB线刷系统时需要使用此工具 |
5.2.2 通过TF卡运行系统
操作步骤如下:
- 准备一张8G或以上容量的TF卡;
- 访问此处的下载地址下载需要的固件(位于"01_系统固件/01_SD卡固件"目录);
- 下载烧写工具 win32diskimager (位于"05_工具软件"目录),或者选用你喜爱的工具;
- 解压 .gz 格式的压缩文件得到 .img 格式的镜像文件;
- 在Windows下以管理员身份运行 win32diskimager,在界面上选择你的SD卡盘符,选择解压后的固件文件,点击 Write 按钮烧写到SD卡;
- 将SD卡从电脑端弹出,插入SOM-RK3399的microSD卡槽;
- 连接SOM-RK3399的电源,系统会从TF卡启动, 某些型号可能需要按下Power键才会启动;
5.2.3 烧写系统到eMMC
5.2.3.1 方法1: 用TF启动卡进行自动烧写
此方法是通过SD卡启动一个小型的Linux系统, 借助名为EFlasher的工具来烧写固件到eMMC。
如果有连接HDMI显示器, 可通过图形界面观察烧写进度, 也可以通过板载LED灯来掌握烧写进度:
默认情况下烧写是上电自动开始的,所以要注意备份eMMC里的数据,如果不想自动,可以使用文件名含"multiple-os"字样的固件,在界面上手动选择要烧写的系统。
5.2.3.1.1 烧写官方固件到eMMC
详细操作步骤如下:
- 准备一张8G或以上容量的SDHC卡;
- 访问此处的下载地址下载需要的固件(位于"01_系统固件/02_SD卡刷机固件(SD-to-eMMC)"目录)和烧写工具win32diskimager(位于"05_工具软件"目录);
- 解压 .gz 格式的压缩文件得到 .img 格式的镜像文件;
- 在Windows下以管理员身份运行 win32diskimager,在界面上选择你的SD卡盘符,选择解压后的固件文件,点击 Write 按钮烧写到SD卡;
- 将SD卡从电脑端弹出,插入SOM-RK3399的microSD卡槽;
- 连接SOM-RK3399的电源,系统会从SD卡启动,并自动启动 EFlasher 烧写工具将系统安装到 eMMC;
- 烧写完成后,从SOM-RK3399弹出SD卡,SOM-RK3399会自动重启并从eMMC启动你刚刚烧写的系统;
5.2.3.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卡放在SOM-RK3399上上电启动, 会自动烧写你的固件, 通过板载 LED 灯来了解安装进度;
5.2.3.2 方法2: 在网页上烧写
使用烧写了FriendlyWrt固件的TF卡启动SOM-RK3399, 登录FriendlyWrt页面, 在网页菜单上点击 "系统" -> "eMMC刷机助手" 进入eMMC刷机助手界面, 点击界面上的 "选择文件" 按钮, 选择你要刷写的文件 (官方固件选用文件名有"-sd-"的文件), 亦可选择第三方固件, 文件支持 .gz 格式的压缩文件, 或者以 .img 作为扩展名的raw格式。
选择文件后, 点击 “上传并烧写” 按钮, 开始上传并烧写, 如下图所示:
烧写完成后,请弹出SD卡,设备会自动重启, 并从eMMC引导新系统,可留意指示灯的状态, 在系统状态灯闪烁,同时网卡状态灯亮起时,表示系统启动完成, 如果eMMC安装的系统是 FriendlyWrt, 则可以通过点击“进入首页”进入FriendlyWrt管理页面。
官方固件需要选用文件名带 "-sd-" 字样的镜像文件, 例如: rk3NNN-sd-friendlywrt-21.02-YYYYMMDD.img.gz, 压缩文件只支持gz格式, 如果文件太大, 可以先压缩成gz格式再上传。
5.2.3.3 方法3: 通过USB烧写
5.2.3.3.1 USB烧写步骤1: 安装USB驱动和工具
从网盘的tools目录下载瑞芯微的USB驱动: DriverAssitant_v5.12.zip, 解压后安装;
在相同目录下, 下载瑞芯微开发工具: RKDevTool_Release_v2.84.zip, 解压后备用;
5.2.3.3.2 USB烧写步骤2: 将SOM-RK3399与电脑连接, 并进入刷机模式
按住Recover Key按键不放, 用USB C数据线, 将SOM-RK3399与电脑进行连接, 连接到SOM-RK3399的USB C接口, 保持按住Recover Key键, 状态灯亮起3秒后即可松开;
5.2.3.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.3 串口调试
如果你想查看SOM-RK3399启动时更多详细的信息,或者更直接的对其进行控制,建议连接并使用调试串口。
- 使用准备好的USB转串口适配器和连接线(需另购),连接开发板:
Pin# 开发板调试串口 USB转串口适配器 1 GND GND 2 VCC5V0_SYS NC (不需要连接)
注: Matrix USB2UART适配器,请将5V ON/OFF切换到OFF3 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出现异常(如乱码),需检查并更换。
6 Debian11 桌面系统的使用
6.1 Debian11桌面系统简介
Debian11 Desktop 是一个轻量级的Debian桌面环境,具有如下特点:
- 桌面环境采用 LXDE, 多种主题可选, 简洁美观, 占用资源少;
- 提供基于 Mali GPU 的 OpenGL 支持;
- 支持Rockhip MPP视频硬编和硬解码;
- 预装基于mpv的Kodi, SMPlayer播放器, 均支持4K视频硬解码;
- 预装Chromium浏览器, 支持vpu/gpu硬件加速 (视频硬解限h264/mp4格式);
- 支持安装Plex Server, Docker与wps等应用, 玩法丰富;
6.2 帐户与密码
普通用户:
用户名: pi
密码: pi
Root用户:
默认没有设置root密码,可通过sudo passwd root命令配置root密码
6.3 查看IP地址
由于Debian主机名默认为硬件型号, 所以可以使用ping命令来获得IP地址: ping SOM-RK3399
6.4 通过ssh登录Debian
使用以下命令:ssh pi@SOM-RK3399
默认密码为pi
6.5 更新软件包
6.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
6.6 安装x11vnc远程桌面
x11vnc是一个VNC服务器, 安装后我们可以不依赖外部的显示设备, 通过网络远程登录Debian桌面。
6.6.1 安装x11vnc
sudo apt-get install x11vnc
6.6.2 设置VNC登录密码
sudo x11vnc -storepasswd /etc/x11vnc.pwd
6.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
6.6.4 测试远程桌面
在电脑上启动VNC客户端软件, 在地址栏输入: IP地址:5900 连接即可, 效果如下图所示, 图中设备IP地址为192.168.1.123, 使用端口5900进行连接:
6.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
6.8 更改时区
6.8.1 检查当前时区
timedatectl
6.8.2 列出所有时区
timedatectl list-timezones
6.8.3 设置时区 (比如上海)
sudo timedatectl set-timezone Asia/Shanghai
6.9 更换开机LOGO和桌面墙纸
6.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,请根据实际情况指定
6.9.2 更换桌面墙纸
修改如下配置文件:
/home/pi/.config/pcmanfm/LXDE/desktop-items-0.conf
6.9.3 恢复出厂设置
在终端上执行如下命令:
sudo firstboot && sudo reboot
6.10 开机自动启动程序(例如Kodi)
把要开机启动的程序的desktop文件放入~/.config/autostart/目录即可,例如:
mkdir ~/.config/autostart/ cp /usr/share/applications/kodi.desktop ~/.config/autostart/
6.11 取消USB存储设备自动挂载
sudo systemctl mask udisks2 sudo reboot
6.12 设置中文语言与输入法
6.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
6.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即可切换中英文输入法, 右上角也出现了输入法图标, 右击右上角的输入法图标, 在弹出菜单中可以切换输入法, 如下图所示:
6.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/
6.14 在Debian系统上安装Docker
请参考此链接: How to Install Docker on Debian/zh
6.15 如何测试NPU
请参考此链接: NPU/zh
6.16 如何测试VPU
请参考此链接: VPU/zh
6.17 设置WiFi无线链接
6.17.1 图形界面操作
点击右上角的网络图标,选择你要连接的WiFi热点,按界面提示操作即可。
6.17.2 命令行操作
请参考 Use NetworkManager to configure network settings/zh
6.18 取消自动登录
编辑文件:
sudo vim /etc/lightdm/lightdm.conf
注释掉如下两行内容 (在前面插入#):
autologin-user=pi
autologin-user-timeout=0
6.19 测试OpenGL ES性能
在系统菜单 System Tools 中点击 Terminator 打开命令行终端,输入以下命令即可测试:
glmark2-es2
6.20 设置HDMI/DP屏幕分辨率
进入系统菜单 Perferences -> Monitor Settings界面进行设置即可。
推荐分辨率:1920x1080@60Hz
6.21 调节HDMI边界
打开命令行终端,输入命令进行操作,有几个注意事项:
1) 需要登录桌面才能操作,如果Desktop停留在Login是无法设置的;
2) 如果你是在 ssh 登录的终端,请使用与桌面登录相同的用户名,默认是 pi,不能使用root用户,同时,你需要赋值 DISPLAY 变量:
export DISPLAY=:0.0
6.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
6.21.2 设置分辨率
例如设置为 1920X1080@60Hz:
xrandr --output HDMI-1 --mode 1920x1080 --refresh 60
6.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
6.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
6.22 Chromium网页浏览器
6.22.1 GPU支持情况
系统预装的Chromium网页浏览器已经默认启用硬件加速,支持WebGL,可以通过输入网址 chrome://gpu 了解硬件加速情况,如下图所示:
6.22.2 VPU支持情况
在浏览器上播放一个视频,然后在命令行使用fuser查看mpp设备节点的使用情况来确认已经调用了vpu:
pi@FriendlyElec:~$ fuser /dev/mpp_service /dev/mpp_service: 3258
如果fuser命令没有内容输出, 则表示当前是软解.
6.22.3 查看支持的硬解格式
在浏览器地址栏输入 about://gpu,翻页到页面最底部,查看 "Video Acceleration Information" 表格;
播放一个视频后,再在浏览器地址栏输入 about://media-internals, 可以查看最近播放的视频是否启用了硬解;
6.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
7 Debian10 桌面系统的使用
- Refer to:
8 FriendlyDesktop系统的使用
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硬解视频播放。
8.1 帐户与密码
普通用户:
用户名: pi 密码: pi
Root用户:
用户名: root 密码: fa
8.2 设置WiFi无线链接
点击FriendlyDesktop右上角的网络图标,选择你要连接的WiFi热点,按界面提示操作即可。
8.3 设置HDMI/DP屏幕分辨率
进入系统菜单 Perferences -> Monitor Settings界面进行设置即可。
推荐分辨率:1920x1080@60Hz
8.4 调节HDMI边界
打开命令行终端,输入命令进行操作,有几个注意事项:
1) 需要登录桌面才能操作,如果Desktop停留在Login是无法设置的;
2) 如果你是在 ssh 登录的终端,请使用与桌面登录相同的用户名,默认是 pi,不能使用root用户,同时,你需要赋值 DISPLAY 变量:
export DISPLAY=:0.0
8.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
8.4.2 设置分辨率
例如设置为 1920X1080@60Hz:
xrandr --output HDMI-1 --mode 1920x1080 --refresh 60
8.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
8.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
8.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 配置文件。
注意:硬解视频时,视频窗口并不会跟随屏幕旋转。
8.6 测试OpenGL ES性能
在系统菜单 System Tools 中点击 Terminator 打开命令行终端,输入以下命令即可测试:
taskset -c 4-5 glmark2-es2
8.7 如何播放4K视频
8.7.1 使用Qt硬解播放器播放
FriendlyDesktop预装了Qt播放器Qt5-VideoPlayer,该播放器已经适配Rockchip的gstreamer插件,支持4K视频的硬解播放, 播放器启动方法:
在FriendlyDesktop上打开菜单 Sound & Video,点击 Qt5-VideoPlayer。
在播放器界面上,点击左下角的 Open 按钮加载一个视频文件到右边的播放列表,双击播放列表上的文件开始播放。播放器的界面如下所示,可以设置全屏播放,也可以调节音量:
Qt播放器源代码: https://github.com/friendlyarm/rk-player-qt
8.7.2 命令行播放
打开命令行终端,输入以下命令即可测试:
gst-player.sh
默认音频会输出到耳机孔, 可以使用 which gst-player.sh 找到这个脚本的位置,自已定制其播放的行为。
8.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
8.9 如何通过蓝牙传输文件
在FriendlyDesktop上打开菜单 Preferences,启动 Bluetooth Manager,在界面上点 Search 即可搜索周边的蓝牙设备, 点击你的设备进行配对,配对后即可发送文件,如下图所示:
8.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
8.11 开发Qt程序
FriendlyDesktop下提供了重新编译的 Qt 5.10.0,支持RK3399的OpenGL ES和Gstreamer 1.0的硬件加速,同时集成了 QtCreator IDE,已配置好可以直接在开发板上编译并运行程序,如下所示:
运行Qt程序时,需要指定platform参数为xcb,如下所示:
./HelloQt --platform xcb
8.12 访问GPIO/I2C/串口等硬件资源
请参考下面的文档:
8.13 切换音频默认输出设备
8.13.1 查看当前默认的输出设备
在普通用户的终端上,输入以下命令:
pactl info -vvv
显示的信息包含以下内容,表示当前音频输出到耳机:
Default Sink: alsa_output.platform-rt5651-sound.stereo-fallback
显示的信息包含以下内容,表示当前音频输出到HDMI:
Default Sink: alsa_output.platform-hdmi-sound.stereo-fallback
8.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%
8.13.3 设置默认的音频输出设备为HDMI
在普通用户的终端上,输入以下命令:
pactl set-default-sink alsa_output.platform-hdmi-sound.stereo-fallback
8.13.4 查看设置是否已生效
cat /var/lib/pulse/*-default-sink
8.13.5 播放时临时切换
这种方法仅对当前的播放进程有效:
打开菜单 "Sound & Video" -> "PulseAudio Volume Control", 在界面上点击 "Built-in Audio Stereo" 按钮切换不同的输出设备,比如在HDMI与耳机接口之间切换。
8.14 播放网络流媒体(或网络摄像头)
打开命令行终端,输入以下命令:
gst-launch-1.0 rtspsrc location="rtsp://admin:12345@192.168.1.120:554/live/main" ! rtph264depay ! decodebin ! rkximagesink
请将 rtsp:// 后面的地址改成真实的地址。
8.15 Chromium网页浏览器
系统预装的Chromium网页浏览器已经默认启用硬件加速,支持WebGL,可以通过输入网址 chrome://gpu 了解硬件加速情况,如下图所示:
8.16 屏幕保护与自动休眠相关设置
屏幕保护与自动休眠的配置文件是 /etc/xdg/autostart/xset_command.desktop,默认出厂的设置是屏幕保护和DPMS都是关闭的,你可以通过修改这个文件来更改配置,具体可以了解一下Linux下 xset 命令的用法。
8.17 安装Scratch
用以下命令安装:
sudo apt-get install scratch:arm64
8.18 安装Arduino IDE
用以下命令安装:
sudo apt-get install arduino:arm64
8.19 开机自动启动程序
把要开机启动的程序的desktop文件放入~/.config/autostart/目录即可,例如:
cp /usr/share/applications/org.qt-project.qtcreator.desktop ~/.config/autostart/
8.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
8.21 FriendlyDesktop下使用NVME SSD
请参考: How to Initialize and Format New SSD And HDD
9 FriendlyCore的使用
9.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等相关软件包
9.2 运行FriendlyCore
- 对于有HDMI接口的板子,如果要在电视上进行操作,您需要连接USB鼠标和键盘。
- 如果您需要进行内核开发,最好选购一个串口配件,连接了串口,则可以通过串口终端对开发板进行操作。
SOM-RK3399需要使用USB转串口模块,连接方法如下图所示:
- FriendlyCore默认帐户:
普通用户:
用户名: pi 密码: pi
Root用户:
用户名: root 密码: fa
默认会以 pi 用户自动登录,你可以使用 sudo npi-config 命令取消自动登录。
- 更新软件包:
$ sudo apt-get update
9.3 开发Qt应用
请参考 How to Build and Install Qt Application for FriendlyELEC Boards/zh
9.4 开机自动运行Qt示例程序
使用npi-config工具进行开启:
sudo npi-config
进入Boot Options -> Autologin -> Qt/Embedded,选择Enable然后重启即可。
9.5 扩展TF卡文件系统
第一次启动FriendlyCore系统时,系统会自动扩展文件系统分区,请耐心等待,TF卡/eMMC的容量越大,需要等待的时间越长,进入系统后执行下列命令查看文件系统分区大小:
df -h
9.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
9.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目录下。
9.8 连接以太网
默认插上网线开机,会自动连接并通过DHCP获取IP地址,如需要配置静态IP地址,请参考 NetworkManager 的相关文档: Use NetworkManager to configure network settings。
9.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
9.10 修改时区
例如更改为Shanghai时区:
sudo rm /etc/localtime sudo ln -ls /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
9.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命令的结果为准。
9.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
9.13 运行X11程序
FriendlyCore系统集成了轻量级的Xorg,虽然没有窗口管理器,但是你仍然可以运行单一的X-Windows程序,例如要运行的程序是~/YourX11App,使用以下命令:
. /usr/bin/setqt5env-xcb startx ~/YourX11App -geometry 1280x800
注意 “.” 与 /usr/bin/setqt5env-xcb 之间有一个空格,另外,-geometry后面的分辨率请更改为你的屏幕的实际分辨率。
9.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
10 同时适用于FriendlyDesktop与FriendlyCore系统的功能特性
10.1 Linux下使用摄像头(MIPI接口摄像头OV13850与OV4689,USB摄像头罗技C920)
摄像头连接方法:
摄像头可以连接在MIPI接口,如下图所示:
为了方便测试摄像头,我们提供了脚本可以在命令行测试摄像头的拍照和录像功能。
你可以用以下命令更新这个脚本到最新版本:
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: 停止预览
10.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。
10.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下测试。
10.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
10.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
10.1.5 摄像头应用教程: 推流至直播平台
请查看这篇文档: How to setup RTMP server on NanoPC-T4/zh
10.1.6 参考资源
http://blog.iotwrt.com/media/2017/10/01/camera/ http://www.360doc.com/content/16/1019/17/496343_599664458.shtml
10.2 Docker的安装与使用
10.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
10.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
10.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:
要播放视频,可以使用基于 ffmpeg 实现的播放器 mpv,上面测试所用的4K视频可在网盘的 test-video 目录找到,网盘地址:http://dl.friendlyelec.com/nanopct4。
11 初始化NVME固态硬盘和USB移动硬盘
11.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
11.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
11.3 硬盘的自动挂载
11.3.1 在FriendlyWrt系统下挂载
在FriendlyWrt菜单中, 点击"系统"->"挂载点"界面, 在页面底部的"挂载点"的区域中, 点击"新增"按钮, 在UUID一栏中,选择你的硬盘分区, NVME固态硬盘选择 /dev/nvme0n1p1, 如果是USB移动硬盘, 则选择 /dev/sda1, 然后钩选"已启动“, 填写挂载硬盘的目标位置, 本例中选择将 NVME固态硬盘 挂载到 /mnt 目录, 如下图所示:
点击"Save"按钮保存设置, 挂载完成后界面会列出所挂载的硬盘, 如下图所示:
11.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
11.4 为硬盘设置网络共享
11.4.1 提升硬件挂载目录的权限
为了方便普通用户的读取, 进入终端, 输入以下命令先提升硬件挂载目录的权限:
chmod 777 /mnt
11.4.2 FriendlyWrt下设置网络共享
进入 “服务” -> "网络共享" 菜单, 在页面底部的 “共享目录” 区域, 点击 “新增” 按钮, 分别填写 "名称" 与 "路径" 为 mnt 和 /mnt, 其他默认, 点击 "保存并应用" 即可.
11.4.3 在电脑上访问共享
在Windows电脑上输入以下地址访问共享目录:
\\192.168.2.1\mnt
在Ubuntu/Mac电脑上使用以下地址访问共享目录:
smb://192.168.2.1/mnt
在询问身份验证时, 输入如下信息:
连接方式: 已注册用户
用户名: root
域: WORKGROUP
密码: password
11.5 本机上进行硬盘速度测试
11.5.1 NVME固态硬盘速度测试
11.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
11.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
11.5.2 USB移动机械硬盘速度测试
11.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
11.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
11.6 设置调速散热风扇
散热风扇使用PWM来实现自动调速,会根据当前的CPU温度来决定风扇的开关,以及风扇的转速,如果当前的CPU温度不高,风扇会被关闭或者以较低转速旋转 (减少不必要的环境噪声),
如果你想让风扇立即开始工作,可以用以下命令让CPU立即以高负载运行,以便观察风扇的工作状态:
cpuburn
如果你想改变风扇的调速行为,请修改以下文件:
/usr/bin/fa-fancontrol.sh # 入口,被pwm-fan.service服务调用,分两种情况控制风扇,由内核控制风扇,或者用户空间通过操作PWM控制风扇 /usr/bin/fa-fancontrol-direct.sh # 用户空间通过操作PWM控制风扇的脚本,可控制风速等,此脚本由上面的脚本调用
需要禁止开机自动启动风扇(比如你需要连接其他的PWM设备),请输入以下命令:
systemctl stop pwm-fan systemctl disable pwm-fan
或者删除下面这两个文件:
/etc/systemd/system/pwm-fan.service /etc/systemd/system/multi-user.target.wants/pwm-fan.service
11.7 Linux下使用4G EC20模块
请参考: How to use 4G Module on NanoPC-T4/zh
12 Buildroot Linux系统的使用
Buildroot是Linux平台上一个构建嵌入式Linux系统的框架,由Makefile脚本和Kconfig配置文件构成,旨在简化系统制作步骤,可实现一站式生成可烧写的系统固件,最终的固件包含boot-loader、kernel和rootfs,以及rootfs中的各种库和应用程序 (例如qt, gstreamer, busybox等)。
由 FriendlyELEC 提供的 Buildroot 项目是基于Rockchip原厂的 linux-sdk 制作, 项目使用 git 管理,与原厂的linux sdk更新保持同步;
- Rockchip原厂Buildroot项目: https://github.com/rockchip-linux/buildroot
- Buildroot官网: https://buildroot.org
Buildroot for rockchip运行界面如下:
关于Buildroot系统更详细的说明,请参考: Buildroot
13 Lubuntu 系统的使用
看这里: Lubuntu desktop 16.04 for RK3399/zh
Lubuntu下使用NVME SSD: How to Initialize and Format New SSD And HDD
14 Android8.1 系统的使用
我们为 SOM-RK3399 提供了完善的Android8.1 BSP,代码使用 gitlab.com 平台管理,完全开源,支持GPU加速和VPU硬件加速。
14.1 使用MIPI摄像头进行拍照和录像
SOM-RK3399在Android系统下,可以搭配 MIPI摄像头CAM1320 进行拍照和录像,操作比较简单,连接摄像头到SOM-RK3399的MIPI接口,开机进入 Android 系统,用系统自带的 Camera 应用即可完成拍照和录像,操作跟 Android 手机是一样的。
14.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
最终运行效果如下:
点击界面上的 "CAPTURE VIDEO" 按钮即可录制视频(同时录两个摄像头),录制的视频保存到以下位置:/storage/emulated/0/Download/dualcamera_h264.mp4,电脑上可以用以下adb命令下载到本地:
adb pull /storage/emulated/0/Download/dualcamera_h264.mp4
已知问题:
录制的视频文件,播放时会比正常的快,可能需要调整mediacodec的某些参数
14.3 切换系统语言
Android系统默认的系统语言是英文,比如我们要设置为中文,步骤如下:
1) 进入 Android 设置:Settings -> System -> Languages & Input -> Languages;
2)点击"Add a language", 在列表中选择 "简体中文",再选择 "中国";
3) 这时列表中会有中文和英文两种语言,拖动中文那一项到列表的最上面即可,注意,如果你使用的是鼠标,拖动的方法是:将鼠标指针放在列表项右边的图标上,然后按下鼠标中键来拖动;
14.4 Android8.1 硬件访问
开发者可以通过FriendlyThings SDK在Android App中访问和控制主板上的各种硬件资源,比如Uart, SPI, I2C, GPIO等接口,详情可参考以下两份文档:
14.5 Android神经网络 NN SDK示例
Android8.1 BSP中包含了支持GPU加速的Android NN SDK,为了方便测试,Android8固件中也预装了原厂提供的Android NN示例程序:TfLiteCameraDemo,这是一个使用Rockchip AndroidNN GPU加速的MobileNet分类器Demo,运行时需要连接摄像头模块,USB和CSI摄像头都是支持的,通过点击 “TfLiteCameraDemo”图标进入示例,其运行效果如下所示:
关于Android NN SDK的详细描述,可以去网上参考原厂的文档
TfLiteCameraDemo示例源代码下载地址:[TfLiteCameraDemo源代码]
14.6 如何使用adb(Android Debug Bridge)
14.6.1 在Windows10下使用adb
1. 准备一个烧写好安卓系统的 SOM-RK3399 ,一条Typc-C数据线
2. 在dl.friendlyelec.com找到 SOM-RK3399 的网盘,进入后下载Tools文件夹下的adb.zip
3. 解压adb.zip
4. 按win+R打开“运行”窗口,输入“cmd”打开命令行工具
5. 在命令行工具输入以下命令转到adb工具的所在路径:
cd c:\adb
6. 输入以下命令会出现adb的版本信息和使用说明,说明adb可用:
adb
7. 把烧写好安卓系统的 SOM-RK3399 接上电源,用Type-C数据线连接 SOM-RK3399 和电脑,然后在命令行工具输入:
adb devices
可看到返回的设备信息,说明Win10已经通过adb检测到 SOM-RK3399 ,之后可以在Win10下对设备进行操作
8. 尝试在Win10下使用命令在设备上安装安卓应用,下载一个APK文件,然后输入“adb install 文件名.apk”,如:
adb install QQ_Android_8.3.6.apk
14.6.2 在Ubuntu下使用adb
1. 把烧写好安卓系统的 SOM-RK3399 接上电源,用Type-C数据线连接 SOM-RK3399 和电脑,打开“终端”
2. 输入以下命令安装adb工具,这时要求输入用户密码:
sudo apt-get install android-tools-adb
3. 安装过程中弹出下载提示,输入“Y”然后按Enter确认
等待安装完成
4. 在命令行工具输入以下命令查看设备:
adb devices
可看到返回的设备信息,说明Ubuntu已经通过adb检测到 SOM-RK3399
14.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/
14.6.4 注意事项
部分电脑USB端口可能供电不足,如使用NanoPi M4系列请使用PSU Module供电
14.7 HDMI分辨率、边界调节
如果连接了HDMI显示设备,可进入 Android 的 Settings -> Display -> Advanced -> HDMI & Rotation 进行设置。
HDMI Resolution 缺省为 Auto,可手动设置显示分辨率,最高可支持 4K 分辨率 Screen Zoom 用户可观察红色边框的显示,点击中间的4个箭头按钮来进行缩放调节 Display Rotation 可进行横竖屏切换
14.8 屏幕旋转
使用HDMI与LCD作为显示设备时,如果需要旋转屏幕,可进入 Android 的 Settings -> Display -> Advanced -> HDMI & Rotation -> Display Rotation 进行设置。
在 adb shell 用命令来测试屏幕旋转 (不会保存设置):
wm rotation 90
进入设置界面 Settings -> Accessibility,启用 Immersive Mode,然后再打开你的 Android应用,例如 Lightning,你会发现它将处于全屏状态。
14.10 切换音频输出通道
可以配置音频输出到HDMI或者耳机接口,设置入口:Android 的 Settings -> Accessibility -> Force audio output。 如果 Force audio output菜单项是灰色的,即处于不可选择的状态,说明你所用的硬件会自动检测耳机插拨状态,并自动切换音频通道,无需设置。
14.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源代码并测试。
14.12 定制开关机界面与动画
14.12.1 开启与关闭
将 device/rockchip/common/BoardConfig.mk 文件的
BOOT_SHUTDOWN_ANIMATION_RINGING := false
改为
BOOT_SHUTDOWN_ANIMATION_RINGING := true
来打开编译时将文件打包进固件的功能
14.12.2 开机动画
创建或替换Android源代码目录下的如下文件:
kernel/logo.bmp
kernel/logo_kernel.bmp
device/rockchip/common/bootshutdown/bootanimation.zip
14.12.3 关机动画
创建或替换Android源代码目录下的如下文件:
device/rockchip/common/bootshutdown/shutdownanimation.zip
14.12.4 动画制作方法
请参考:http://blog.sina.com.cn/s/blog_4960586c0100vu5v.html
14.13 移除Google框架
如果不需要使用google服务,可以删除Google框架以节约系统资源,方法是删除Android源代码中的以下目录,然后重新编译Android:
vendor/google
14.14 用摇控器操作Android
SOM-RK3399在Android下完美支持 FriendlyARM RC-100 红外遥控器,更方便SOM-RK3399在接电视的场景下使用,遥控器按键功能丰富:
按键定义与功能如下表所示:
按键 功能 上 导航键-上 下 导航键-下 左 导航键-左 右 导航键-右 OK 确认 - 音量- + 音量+ 静音 静音 菜单 Android菜单键 首页 Android Home键 返回 Android 返回键 F1 下拉Android 通知栏 F2 Android 截屏 F3 切换操作模式,在鼠标模式与按钮模式之间切换
14.15 使用USB摄像头进行拍照和录像
Android系统同时支持USB摄像头拍照和录像,使用系统自带的 Camera 应用即可,有两点需要注意的地方:
1)需要根据摄像头规格,选择合适的录像分辨率,可以先选择较低的CIF分辨率,测试OK之后再尝试更高的分辨率,设置界面如下所示:
;
2)USB摄像头不能与MIPI摄像头同时使用,也不能热拨插,插入摄像头后需要重新开机才能识别;
我们测试过的USB摄像头型号如下:罗技C270,罗技C922 PRO,
实测罗技C922 PRO录像和拍照可以达到1080P分辨率。
14.16 Android下使用4G模块EC20
14.16.1 连接方法
连接时,需要通过USB to miniPCIe转接板转接EC20,再连接到主板的USB Host端口,如下图所示:
连接后无需额外的配置,启动Android后就可以使用4G上网了,跟Android手机类拟。
14.16.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。
14.17 Android下使用NVME SSD高速固态硬盘
14.17.1 第一步:格式化SSD为单分区ext4格式
此操作可以在电脑上进行,也可以在开发板的 linux 系统里进行。
为了方便操作,请在终端上先用以下命令切换为 root 用户:
su -
root用户的默认密码是fa。
14.17.1.1 检查是否检测到了SSD
root@FriendlyELEC:~# cat /proc/partitions major minor #blocks name 1 0 4096 ram0 259 0 125034840 nvme0n1
看到有 nvme0n1 设备的节点,说明SSD已经成功被识别到了。
14.17.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的文档来操作。
14.17.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
14.17.2 第二步:Android开机自动挂载
只要SSD已经被正确地格式化,Android就会自动挂载SSD为外置存储设备,无需额外的设置,打开Android内置的Files应用,可以看到SSD设备已经挂载:
第三方的软件可以正常识别SSD,如下图中的迅雷下载软件,可以设置将文件默认下载到SSD上:
14.18 设置调速散热风扇
散热风扇使用PWM来实现自动调速,会根据当前的CPU温度来决定风扇的开关,以及风扇的转速,如果当前的CPU温度不高,风扇会被关闭或者以较低转速旋转 (减少不必要的环境噪声),如果你想改变风扇的调速行为,请修改Android bsp源代码中的以下文件:
device/rockchip/rk3399/nanopc-t4/pwm_fan.sh
需要禁止开机自动启动风扇(比如你需要连接其他的PWM设备),请修改Android bsp源代码中的以下文件:
device/rockchip/rk3399/init.rk3399.rc
对源代码做了修改后,需要重新编译Android。
15 Android7.1 系统的使用
看这里: Android7
16 如何编译系统
16.1 搭建编译环境
16.1.1 方法1: 使用Docker进行交叉编译
请参考 docker-cross-compiler-novnc,也可使用网盘 “04_SDK与编译器/docker” 目录下的本地镜像,参考README.md用docker load命令导入即可。
16.1.2 方法2: 本地搭建交叉编译环境
16.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 |
16.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)
16.2 编译 Openwrt/Friendlywrt
16.2.1 下载源代码
FriendlyWrt有两个版本, 请根据需要进行选择.
16.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
16.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
16.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
16.2.3 二次编译
cd friendlywrt make menuconfig #改动FriendlyWrt的配置 rm -rf ./tmp make -j${nproc} cd ../ ./build.sh sd-img ./build.sh emmc-img
16.2.4 单独编译u-boot
./build.sh uboot
16.2.5 单独编译kernel
./build.sh kernel
16.2.6 单独编译friendlywrt
./build.sh friendlywrt
或者进入friendlywrt目录, 按标准openwrt的命令操作, 上面的命令出现错误时, 可尝试使用以下命令单线程编译:
cd friendlywrt make -j1 V=s
16.3 编译Buildroot
请参考: Buildroot
16.4 其他Linux系统编译
16.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 |
- 内核源代码仓库地址: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卡固件与卡刷固件等
- 点击表格中的MBR与GPT可查看各系统的分区布局(配置文件)
16.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与内核
16.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与内核
16.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与内核
16.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与内核
16.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与内核
16.4.7 应用新编译的uboot与内核
16.4.7.1 安装到目标板
16.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
16.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。
16.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 |
16.4.7.3 线刷
注:不支持内核v4.4.y的固件
16.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以上版本。
16.5 使用脚本进行编译
16.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
16.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
16.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
16.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
16.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
16.6 Android系统编译
16.6.1 电脑的软硬件要求
- 至少配置16G以上内存+300G磁盘空间,建议使用32G内存+大容量高速SSD的机器,不建议使用虚拟机;
- 如遇到编译错误,可能是编译环境问题,推荐使用如下Docker容器进行编译:docker-cross-compiler-novnc;
16.6.2 编译Android10
16.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仓库
SOM-RK3399 源代码托管在 gitlab 上,使用以下命令进行下载:
git clone --recursive https://gitlab.com/friendlyelec/rk3399-android-10.git -b main
16.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
16.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)。
16.6.2.4 更新系统为自已编译的Image
编译完成后,image文件会存放在Android10源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 SOM-RK3399上:
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区;
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 android10 目录;
3) 将SD卡插入SOM-RK3399,重新烧写Andorid系统即可;
也可参考这个github仓库的方法来更新:sd-fuse_rk3399
烧写Android 10时EFlasher 需要 v1.3 或以上版本,通过Type-C烧写时请使用rockchip提供的工具AndroidTool v2.71 或Linux_Upgrade_Tool v1.49 。
16.6.3 编译Android8.1
16.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仓库
SOM-RK3399 源代码托管在 gitlab 上,使用以下命令进行下载:
git clone https://gitlab.com/friendlyelec/rk3399-android-8.1 --depth 1 -b master
16.6.3.2 编译并生成Image文件
使用以下命令编译:
cd rk3399-android-8.1 ./build-nanopc-t4.sh -F -M
16.6.3.3 更新系统为自已编译的Image
编译完成后,image文件会存放在Android8.1源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 SOM-RK3399上:
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区;
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 android8 目录;
3) 将SD卡插入SOM-RK3399,重新烧写Andorid系统即可;
也可参考这个github仓库的方法来更新:sd-fuse_rk3399
16.6.4 编译Android7源代码
16.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仓库
SOM-RK3399 源代码托管在 gitlab 上,使用以下命令进行下载:
git clone https://gitlab.com/friendlyelec/rk3399-nougat --depth 1 -b nanopc-t4-nougat
16.6.4.2 编译并生成Image文件
使用以下命令编译:
cd rk3399-nougat ./build-nanopc-t4.sh -F -M
16.6.4.3 更新系统为自已编译的Image
编译完成后,image文件会存放在Android7源代码目录的 rockdev/Image-nanopc_t4/ 子目录下,参考以下步骤更新到 SOM-RK3399上:
1) 将 EFlasher 启动SD卡 通过读卡器插入电脑,电脑上的Ubuntu系统会自动挂载 SD卡的分区;
2) 我们需要将 rockdev/Image-nanopc_t4/ 子目录下的所有文件,拷贝并覆盖到 SD卡 FRIENDLYARM 分区里的 nougat 目录;
3) 将SD卡插入SOM-RK3399,重新烧写Andorid系统即可;
也可参考这个github仓库的方法来更新:sd-fuse_rk3399
17 硬件资源访问
17.1 串口访问
如下表所示,仅 UART4 可供应用程序开发使用:
串口设备 串口资源占用情况 UART0 已被蓝牙占用 UART1 已被千兆以太网占用 UART2 已被作为调试串口 UART3 已被千兆以太网占用 UART4 空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM)
18 备份文件系统并创建SD映像(将系统及应用复制到另一块开发板)
18.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 /
注:备份时,如果系统中有挂载目录,最后会出现一个错误提示信息,可以无视它,我们本来就是要忽略这些目录
18.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
19 更改内核命令行参数 (仅支持4.4内核)
19.1 eMMC启动
步骤如下:
先做一张eflahser的烧写卡 (使用rk3xxxx-eflasher-开头的固件文件),
将烧写卡插入电脑,进入sd卡的OS相关目录,编辑文件parameter.txt, 这是个文本文件,里面有命令行参数,
然后再用烧写卡启动,把系统烧写进 eMMC。
19.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)
20 Linux操作系统的常见操作
20.1 Linux系统下使用adb
20.1.1 buildroot系统下开启adb功能
开机自动开启
mv /etc/init.d/K50usbdevice.sh /etc/init.d/S50usbdevice.sh reboot
临时开启
usbdevice-wrapper start
20.1.2 ubuntu和debian系统下开启adb功能
开机自动开启
sudo systemctl enable usbdevice sudo reboot
临时开启
usbdevice-wrapper start
20.1.3 如何连接
使用adb时,与电脑相连接的端口与usb线刷的端口相同。
20.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包。
20.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
21 救砖办法
如何固件没有正确安装,导致开发板变砖,而且可能没有机会通过SD卡重新安装固件,这时,就需要进入Maskrom模式,通过擦除存储设备的办法救砖。
21.1 Windows用户
21.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
21.1.2 进入Maskrom模式擦除存储设备
- 使用USB数据线将SOM-RK3399与电脑相连接
- 在电脑上启动 RKDevTool
- 将SOM-RK3399断开电源,按住 MASK 键,连接电源,当看到界面下方显示 Found One MASKROM Device 时松开按键, 如下图所示:
- 在 RKDevTool 界面上点击 Advanced Function 选项卡
- 在 Boot 编辑框中选择 MiniLoaderAll.bin,然后点击 Download 按钮
- 选中 EMMC,点 Switch Storage,再点击 ErashAll 按钮擦除eMMC
- 至此,SOM-RK3399恢复至初始状态,可以正常通过SD卡或eMMC引导系统了
21.2 Linux/Mac用户
21.2.1 下载所需文件
- 获取所需工具:访问这里,在 05_Tools 目录中找到 upgrade_tool_v2.30_for_linux.tgz (或Mac用户选upgrade_tool_v2.25_for_mac.tgz) 下载到本地
- 获取loader: 访问这里,进入CPU型号对应的tools目录,下载 MiniLoaderAll.bin
21.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
21.2.3 进入Maskrom模式擦除存储设备
- 使用USB数据线将SOM-RK3399与电脑相连接
- 将SOM-RK3399断开电源,按住 MASK 键,连接电源,4秒后松开按键
- 用如下命令检查连接:
upgrade_tool LD
显示类似 "DevNo=1 Vid=0x2207,Pid=0x350b,LocationID=13 Mode=Maskrom SerialNo=" 的内容表示已检测到设备。
- 用如下命令擦除eMMC:
upgrade_tool EF MiniLoaderAll.bin
- 至此,SOM-RK3399恢复至初始状态,可以正常通过SD卡或eMMC引导系统了
22 更多OS
22.1 DietPi
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:
23 Link to Rockchip Resources
- Link to Rockchip's resources: https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/RKDocs
- RK3399 datasheet V2.1
- RK3399TRM V1.4
24 原理图, PCB图
- SOM-RK3399v2_1910_Schematic.pdf
- SOM-RK3399v2_1910_dxf.zip
- 底板原理图:SOM-RK3399_Dev_Kit_1904_Schematic.pdf
- 底板PCB CAD 文件:SOM-RK3399_Dev_Kit_1904_dxf.zip
25 更新日志
25.1 2024-04-21
25.1.1 OpenMediaVault
- 更新到 7.0.5-1
- 更新到 Debian12
25.2 2024-03-15
25.2.1 Ubuntu focal desktop
- 修正蓝牙无法使用的问题
25.3 2024-01-31
25.3.1 Debian/Ubuntu/FriendlyCore/Buildroot
- 增加adb支持
25.4 2023-12-01
25.4.1 FriendlyWrt
- 更新到 6.1.63 内核
- 更新到 OpenWrt 23.05.2
25.5 2023-10-31
25.5.1 增加新系统
- 增加NAS系统 OpenMediaVault,基于Debian11构建,使用6.1内核
25.5.2 Debian Core/FriendlyCore-Lite-Core
- 更新到 6.1 内核
25.5.3 FriendlyWrt
- 更新到 6.1 内核
- 更新到 openwrt-23.05
25.6 2023-07-01
25.6.1 Debian11
- 更新到Rockchip sdk版本最新版本, 升级gpu与xserver驱动等,提升UI与媒体播放性能
- 修正已知问题
25.7 2023-05-26
25.7.1 FriendlyWrt更新
- 更新 v22.03 到新版本 openwrt-22.03.5
- 更新 v21.02 到新版本 openwrt-21.02.7
25.8 2023-05-21
25.8.1 Debian11:
- 更新到Rockchip sdk版本linux-5.10-gen-rkr4
- 为了流畅性,将桌面切换至LXDE
25.9 2023-04-26
25.9.1 FriendlyWrt:
- 更新 v22.03 到新版本 openwrt-22.03.4
- 更新 v21.02 到新版本 openwrt-21.02.6
25.10 2023-02-10
25.10.1 新增 Debian11
分为以下三个版本:
- Debian11 Core: 仅命令行
- Debian11 Minimal: LXDE桌面,精简版
- Debian11 Desktop: LXDE桌面,完整版
25.11 2023-01-09
25.11.1 FriendlyCore更新说明:
- 优化了开机服务
25.12 2022-12-04
25.12.1 FriendlyWrt:
- 修正存储空间某些情况下无法扩展的问题
- 加强eMMC刷机工具的刷机稳定性
25.13 2022-09-06
25.13.1 FriendlyWrt更新说明:
- 提升了NanoPi-R4SE的eMMC读取性能
- 增加Fullcone NAT支持 (默认开启)
- 版本升级到 22.03.0 正式版
- 修复NanoPC-T4在FriendlyWrt下的eMMC稳定性问题
25.14 2022-08-19
25.14.1 Lubuntu/Android8/FriendlyDesktop更新说明:
- 增加7寸屏HD703E的支持
- 修正FriendlyDesktop eMMC启动问题
25.14.2 Buildroot更新说明:
- 修正在Som-RK3399下未自动加载WiFi模块的问题
25.15 2022-08-03
25.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版本一致
25.16 2022-07-27
25.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
25.17 2022-07-04
25.17.1 Debian 10(buster) Desktop (首次发布)
- 桌面环境采用 LXDE, 多种主题可选, 简洁美观, 占用资源少
- 提供基于 Mali GPU 的 OpenGL 支持
- 支持Rockhip MPP视频硬编和硬解码
- 预装基于mpv的Kodi, SMPlayer播放器, 支持4K视频硬解码
- 预装Chromium浏览器, 支持vpu/gpu硬件加速 (视频硬解限h264/mp4格式)
- 支持安装Plex Server, wps等应用, 玩法丰富
25.18 2021-12-02
- 修正某些sd卡会导致reboot命令和看门狗无法正常工作的问题 (更新了uboot v2017.09)
25.19 2021-10-29
25.19.1 FriendlyWrt更新说明:
- FriendlyWrt更新至官方稳定版本 21.02.1,特性与19.07.5基本保持一致,支持docker、usb wifi等
25.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会出错的问题
25.20 2021-08-31
25.20.1 FriendlyWrt更新说明:
- FriendlyWrt的内核更新到 5.10.60
- 新增一款高速5G USB WiFi的支持,网卡型号为 Comfast CF-WU782AC V2,芯片型号为 MediaTek MT7662
- 改进了USB WiFi的兼容性
- 改进了PWM风扇的支持,风扇由内核驱动控制,支持温控(详情请在R4S的WiKi页面搜索 PWM风扇)
- 改进了首次启动的稳定性 (之前的版本,首次启动时,某些情况下会出现bpfilter错误)
25.21 2021-03-11
25.21.1 FriendlyWrt更新说明:
- FriendlyWrt内核更新到5.10
25.22 2020-12-24
25.22.1 FriendlyWrt更新说明:
- FriendlyWrt更新至官方稳定版本 19.07.5
25.23 2020-12-17
25.23.1 FriendlyWrt更新说明:
25.24 2020-12-17
25.24.1 FriendlyWrt更新说明:
1) FriendlyWrt提供两个版本,使用4.19内核与5.4内核,其中5.4用于R4S,其他型号请使用4.19版本
2) 提高了软件包的兼容性,方便用 opkg 命令安装软件包
25.24.2 FriendlyCore/FriendlyDesktop更新说明:
更新wiringPi,支持更多引脚
25.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支持
25.26 2020-09-27
25.26.1 Android 10更新说明:
- 增加A/B(无缝)系统更新的支持
- 为演示新特性,此次发布的Rom,可检查到一个更新
25.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/ 目录权限某些情况下被修改成只读的问题
25.28 日期 2020-08-17
1) 修正 typc-c 烧写的稳定性和易用性,为每个系统的压缩包预置了AndroidTool以及配置文件,无需手动加载文件 (注:改变EMMC中的OS类型时,仍需先擦除Flash再烧写新的OS);
2) 修正 FriendlyWrt 串口无法登录的问题;
25.29 日期 2020-07-10
- Android 10 更新:
1) SOM-RK3399缺省启用HDMI IN音频输入与耳机口音频输出
2) 增加支持2个USB摄像头协同工作,Camera应用可切换前/后摄像头预览
3) 集成了浏览器Chrome和输入法Gboard
25.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更新如下:
增加自动隐藏导航栏的设置
25.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) 内核稳定性方面的优化
25.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界面现在可以配置标题,隐藏界面菜单与按钮
25.33 日期 2019-09-26
- FriendlyCore/FriendlyDesktop小修正:
修正 Qt5 demo在某些LCD下无法触摸的问题
25.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) 增加使能开机后自动加载蓝牙固件
25.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的支持
25.36 日期 2019-06-25
Linux(Ubuntu 16.04/18.04) 全面采用 OverlayFS,以增强文件系统的稳定性.
25.37 日期 2019-05-23
- Ubuntu 18.04(FriendlyCore, FriendlyDesktop)更新:
1) 修正 Pulseaudio 服务没法启动的问题
2) 修正 Bluetooth 服务的问题
25.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)
25.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摄像头的稳定性问题
25.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设置,默认关闭自动休眠
25.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会有较大幅度的性能提升
25.42 日期 2018-09-21
- 增加一款eDP屏的支持
- Linux启用了PCI-E转Sata 功能 (AHCI SATA support)
- Linux下的SquashFS启用了LZO/XZ/ZSTD压缩支持
25.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
25.44 2018-08-20
- 增加新的桌面OS:FriendlyDesktop 18.04 for RK3399,主要特性
1) 带X桌面 LXDE,基于64位Ubuntu 18.04系统构建,支持OpenGL ES加速,支持硬解播放
2) 支持SD卡启动运行,支持TF卡刷机或Type-C刷机
3) 完全保留FriendlyCore 18.04 for RK3399的特性,集成带GPU和VPU加速的Qt 5.10.0
4) 内置开源硬解的4K视频播放器 QtVideoPlayer(Menu->Sound & Video->Qt5-VideoPlayer)
5) 内置 QtCreator IDE,Arduino 和 Scratch等流行开发和学习工具,开箱即用
6) 支持双屏异显 (可选择eDP/DP/HDMI 任意两路同时输出)
7) 支持eDP电容触摸屏 (HD702E)
8) 支持屏幕旋转 (仅限于eDP)
9) 支持AP6356S无线模块 (802.11 a/b/g/n/AC,BLE4.0)
10) 支持升兆以太网即插即用
11) 支持 OpenCV 3.4 一键安装 (详见https://github.com/friendlyarm/install-opencv-on-friendlycore)
12) 内置gcc版本:7.3.0
13) 内核版本:4.4.138
附下载链接:http://dl.friendlyelec.com/nanopct4
25.45 2018-08-02
- 增加可以直接从SD卡启动的FriendlyCore和Lubuntu固件
25.46 2018-07-28
- 修正FriendlyCore中的一处可能会影响CPU降频的问题
25.47 2018-07-27
- Android增加UART4支持并集成了串口demo,内核增加常见USB串口支持
25.48 2018-07-19
- 增加新的OS:FriendlyCore (based on ubuntu-core with Qt),主要特性
1) 基于最新版本的 Ubuntu 18.04 构建
2) 集成Qt 5.10.0,支持OpenGL ES加速,支持硬解播放,支持KMS双屏异显和WebGL和VNC远程控制
3) 集成 Xorg最小系统,以最轻量的方式运行X11应用
4) 集成带VPU加速的Gstreamer 1.0 多媒体框架
5) 支持7寸电容屏HD702
6) 5G WIFI 和 蓝牙4.0
- 内核修复连接HDMI 2.0设备时的core dump问题
- Linux内核合并了原厂release-4.4的更新,版本为4.4.132
- EFlasher更新: 增加eMMC备份与还原功能
25.49 2018-06-20
- Android 支持HDMI与LCD屏幕旋转
- Android 增加 摇控器支持
- Lubuntu 内核默认启用 UART4,应用程序可通过设备名 ttyS4 访问
- 改进了 HDMI 与 eDP屏的用户体验