SOM-RK3399/zh
Contents
- 1 简介
- 2 硬件特性
- 3 布局和引脚定义
- 4 参考底板
- 5 快速入门
- 6 FriendlyDesktop系统的使用
- 6.1 帐户与密码
- 6.2 设置WiFi无线链接
- 6.3 设置HDMI/DP屏幕分辨率
- 6.4 调节HDMI边界
- 6.5 设置eDP显示屏旋转
- 6.6 测试OpenGL ES性能
- 6.7 如何播放4K视频
- 6.8 如何使用USB摄像头
- 6.9 如何通过蓝牙传输文件
- 6.10 安装使用OpenCV
- 6.11 开发Qt程序
- 6.12 访问GPIO/I2C/串口等硬件资源
- 6.13 切换音频默认输出设备
- 6.14 播放网络流媒体(或网络摄像头)
- 6.15 Chromium网页浏览器
- 6.16 屏幕保护与自动休眠相关设置
- 6.17 安装Scratch
- 6.18 安装Arduino IDE
- 6.19 开机自动启动程序
- 6.20 用root用户登录桌面
- 6.21 FriendlyDesktop下使用NVME SSD
- 7 FriendlyCore的使用
- 8 同时适用于FriendlyDesktop与FriendlyCore系统的功能特性
- 9 初始化NVME固态硬盘和USB移动硬盘
- 10 Buildroot Linux系统的使用
- 11 Lubuntu 系统的使用
- 12 Android8.1 系统的使用
- 12.1 使用MIPI摄像头进行拍照和录像
- 12.2 使用双MIPI摄像头预览与录像
- 12.3 切换系统语言
- 12.4 Android8.1 硬件访问
- 12.5 Android神经网络 NN SDK示例
- 12.6 如何使用adb(Android Debug Bridge)
- 12.7 HDMI分辨率、边界调节
- 12.8 屏幕旋转
- 12.9 隐藏Navigation bar
- 12.10 切换音频输出通道
- 12.11 调整录音的音量
- 12.12 定制开关机界面与动画
- 12.13 移除Google框架
- 12.14 用摇控器操作Android
- 12.15 使用USB摄像头进行拍照和录像
- 12.16 Android下使用4G模块EC20
- 12.17 Android下使用NVME SSD高速固态硬盘
- 12.18 设置调速散热风扇
- 13 Android7.1 系统的使用
- 14 硬件资源访问
- 15 源代码下载地址汇总
- 16 更多OS
- 17 Link to Rockchip Resources
- 18 原理图, PCB图
- 19 更新日志
- 19.1 2024-04-21
- 19.2 2024-03-15
- 19.3 2024-01-31
- 19.4 2023-12-01
- 19.5 2023-10-31
- 19.6 2023-07-01
- 19.7 2023-05-26
- 19.8 2023-05-21
- 19.9 2023-04-26
- 19.10 2023-02-10
- 19.11 2023-01-09
- 19.12 2022-12-04
- 19.13 2022-09-06
- 19.14 2022-08-19
- 19.15 2022-08-03
- 19.16 2022-07-27
- 19.17 2022-07-04
- 19.18 2021-12-02
- 19.19 2021-10-29
- 19.20 2021-08-31
- 19.21 2021-03-11
- 19.22 2020-12-24
- 19.23 2020-12-17
- 19.24 2020-12-17
- 19.25 2020-10-27
- 19.26 2020-09-27
- 19.27 日期 2020-09-16
- 19.28 日期 2020-08-17
- 19.29 日期 2020-07-10
- 19.30 日期 2020-06-23
- 19.31 日期 2020-03-24
- 19.32 日期 2019-12-27
- 19.33 日期 2019-09-26
- 19.34 日期 2019-09-03
- 19.35 日期 2019-07-18
- 19.36 日期 2019-06-25
- 19.37 日期 2019-05-23
- 19.38 日期 2019-05-11
- 19.39 日期 2019-03-08
- 19.40 日期 2018-12-19
- 19.41 日期 2018-11-12
- 19.42 日期 2018-09-21
- 19.43 日期 2018-09-05
- 19.44 2018-08-20
- 19.45 2018-08-02
- 19.46 2018-07-28
- 19.47 2018-07-27
- 19.48 2018-07-19
- 19.49 2018-06-20
1 简介
- SOM-RK3399是友善电子团队设计的一款266-pin金手指形式高性能ARM计算机模块,它采用了瑞心微64位六核SoC RK3399作为主处理器,标配2GB DDR3内存和16GB闪存,板载2x2 MIMO双天线WiFi模组,尺寸只有69.6x50mm,模块上带有独立的TypeC供电接口,以及USB-C显示接口,无需底板也可以单独使用。
- SOM-RK3399计算模块具有丰富的外设和扩展接口,通过底板可连接使用4通道NVMe高速固态硬盘,读写速度高达1GB/s; 它还可以扩展使用双MIPI宽动态摄像头,另外它还带有eDP显示接口,MIPI显示接口, 1路USB3.0, 2路USB2.0, 以及I2C, I2S, SPI, PWM, GPIO和串口等各种资源。
- SOM-RK3399可流畅运行Android 8.1, Ubuntu 18.04, Armbian, Buildroot等主流嵌入式操作系统, 软件资源和生态非常丰富,尤其是Android 8.1具有NN SDK神经网络加速软件包, Qt-5.10集成了VPU硬件编解码, GPU图形加速,可使用QML快速开发流畅的动态式界面,因此SOM-RK3399核心板非常适合中小型企业和初创公司做高端人脸识别,机器视觉,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唤醒, 睡眠唤醒等功能
- 内存: 双通道2GB DDR3
- 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 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 hight |
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 2 | 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 hight |
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 hight, 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 hight, 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 5V_IN接口只有给板子供电的功能,用于不接底板快速测试板子。
- 电源输入
- 支持从金手指和USB Type-C 5V_IN接口给核心板供电,支持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 烧写系统到eMMC
SOM-RK3399需要通过SD卡启动,使用EFlasher工具将系统烧写到eMMC。
5.2.1 使用SD卡脱机烧写
访问此处的下载地址下载SD卡脱机烧写所需的文件及工具:
安卓系统 | |
rk3399-eflasher-android10-YYYYMMDD.img.zip | Android10 系统固件 |
rk3399-eflasher-android8-YYYYMMDD.img.zip | Android8.1 系统固件 |
rk3399-eflasher-android7-YYYYMMDD.img.zip | Android7.1.2 系统固件 |
Linux系统 | |
rk3399-eflasher-debian-bullseye-core-4.19-arm64-YYYYMMDD.img.gz | Debian11 精简版固件,没有桌面, 仅命令行,内核版本 4.19.y |
rk3399-eflasher-debian-buster-desktop-4.19-arm64-YYYYMMDD.img.gz | Debian10 系统固件,带LXDE桌面, 支持GPU/VPU硬件加速,内核版本 4.19.y |
rk3399-eflasher-buildroot-4.19-arm64-YYYYMMDD.img.gz | Buildroot 固件,基于Rockchip Linux SDK,带Qt5-wayland图形界面 |
rk3399-eflasher-friendlydesktop-bionic-4.4-arm64-YYYYMMDD.img.zip | 64位FriendlyDesktop桌面固件(内置Qt 5.10.0, X-Window),基于Ubuntu Desktop 18.04构建 |
rk3399-eflasher-friendlycore-focal-4.19-arm64-YYYYMMDD.img.gz | 64位FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core 20.04构建 |
rk3399-eflasher-friendlycore-bionic-4.4-arm64-YYYYMMDD.img.gz | 64位FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core 18.04构建 |
rk3399-eflasher-lubuntu-desktop-xenial-4.4-armhf-YYYYMMDD.img.zip | Lubuntu桌面版固件(内置Qt 5.10.0, X-Window) |
Linux系统 (精简版) | |
rk3399-eflasher-friendlycore-lite-focal-5.10-arm64-YYYYMMDD.img.zip | 精简版64位FriendlyCore系统固件,基于Ubuntu core 20.04构建,内核版本 5.15.y |
rk3399-eflasher-friendlycore-lite-focal-4.19-arm64-YYYYMMDD.img.zip | 精简版64位FriendlyCore系统固件,基于Ubuntu core 20.04构建,内核版本 4.19.y |
FriendlyWrt系统 | |
rk3399-eflasher-friendlywrt-21.02-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 5.15.y |
rk3399-eflasher-friendlywrt-21.02-docker-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建, 预装Docker,内核版本 5.15.y |
rk3399-eflasher-friendlywrt-22.03-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 22.03构建,内核版本 5.15.y |
rk3399-eflasher-friendlywrt-22.03-docker-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 22.03构建, 预装Docker,内核版本 5.15.y |
rk3399-eflasher-friendlywrt-21.02-kernel4-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 4.19.y |
Flash Utility: | |
win32diskimager.rar | Windows utility. Under Linux users can use "dd" |
详细操作步骤如下:
- 准备一张8G或以上容量的SDHC卡;
- 下载并解压 固件文件rk3399-eflasher-OSNAME-YYYYMMDD.img.zip 和 工具win32diskimager;
- 在Windows下以管理员身份运行 win32diskimager,在界面上选择你的SD卡盘符,选择解压后的EFlasher固件,点击 Write 按钮烧写到SD卡; 或者在 Linux下使用 dd 命令将 rk3399-eflasher-OSNAME-YYYYMMDD.img 写入 SD卡;
- 将SD卡从电脑端弹出,插入SOM-RK3399的microSD卡槽;
- 连接SOM-RK3399的电源,系统会从SD卡启动,并自动启动 EFlasher 烧写工具,你有多种途径可以操作 EFlasher:
方法1: 连接HDMI显示屏和USB鼠标,在图形界面上操作EFlasher;
方法2: 将开发板通过网线接入局域网,通过 ssh 登录开发板,然后输入命令 eflasher,根据命令行的提示进行操作;(注: ssh登录的用户是root,密码为fa,开发板IP可查看路由器后台获得)
方法3: 通过调试串口登录到串口终端,在终端上输入命令 eflasher 来操作;
方法4: 连接一个lcd2usb配件到SOM-RK3399上,按配件上面的K1键可以选择要烧写的系统,然后按K2键确定烧写,烧写进度会在lcd2usb上显示;
- 烧写完成后,切断电源,然后从SOM-RK3399端弹出SD卡,然后重新上电开机,SOM-RK3399会从eMMC启动你刚刚烧写的系统;
5.2.2 Windows下通过Type-C数据线进行烧写
访问此处的下载地址下载Windows下使用Type-C数据线烧写所需的文件及工具:
安卓系统 | |
rk3399-usb-android10-YYYYMMDD.img.zip | Android10 系统固件 |
rk3399-usb-android8-YYYYMMDD.img.zip | Android8.1 系统固件 |
rk3399-usb-android7-YYYYMMDD.img.zip | Android7.1.2 系统固件 |
Linux系统 | |
rk3399-usb-debian-bullseye-core-arm64-YYYYMMDD.img.gz | Debian11 精简版固件,没有桌面, 仅命令行,内核版本 4.19.y |
rk3399-usb-debian-bullseye-minimal-arm64-YYYYMMDD.img.gz | Debian11 系统固件,LXDE桌面, 不预装推荐软件包, 支持GPU/VPU硬件加速,内核版本 4.19.y |
rk3399-usb-debian-bullseye-desktop-arm64-YYYYMMDD.img.gz | Debian11 完整版固件,LXDE桌面, 预装推荐软件包, 支持GPU/VPU硬件加速,内核版本 4.19.y |
rk3399-usb-buildroot-4.19-arm64-YYYYMMDD.img.zip | Buildroot 固件,基于Rockchip Linux SDK,带Qt5-wayland图形界面 |
rk3399-usb-friendlydesktop-bionic-4.4-arm64-YYYYMMDD.img.zip | 64位FriendlyDesktop桌面固件(内置Qt 5.10.0, X-Window),基于Ubuntu Desktop 18.04构建 |
rk3399-usb-friendlycore-focal-4.19-arm64-YYYYMMDD.img.zip | 64位FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core 20.04构建 |
rk3399-usb-friendlycore-bionic-4.4-arm64-YYYYMMDD.img.zip | 64位FriendlyCore系统固件 (内置Qt 5.10.0),基于Ubuntu core 18.04构建 |
rk3399-usb-lubuntu-desktop-xenial-4.4-armhf-YYYYMMDD.img.zip | Lubuntu桌面版固件(内置Qt 5.10.0, X-Window) |
Linux系统 (精简版) | |
rk3399-usb-friendlycore-lite-focal-5.10-arm64-YYYYMMDD.img.zip | 精简版64位FriendlyCore系统固件,基于Ubuntu core 20.04构建,内核版本 5.15.y |
rk3399-usb-friendlycore-lite-focal-4.19-arm64-YYYYMMDD.img.zip | 精简版64位FriendlyCore系统固件,基于Ubuntu core 20.04构建,内核版本 4.19.y |
FriendlyWrt系统 | |
rk3399-usb-friendlywrt-21.02-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 5.15.y |
rk3399-usb-friendlywrt-21.02-docker-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建, 预装Docker,内核版本 5.15.y |
rk3399-usb-friendlywrt-22.03-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 22.03构建,内核版本 5.15.y |
rk3399-usb-friendlywrt-22.03-docker-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 22.03构建, 预装Docker,内核版本 5.15.y |
rk3399-usb-friendlywrt-kernel4-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 4.19.y |
Flash Utility: | |
DriverAssitant_v4.5.tgz | Rockchip提供的Windows下的USB驱动,使用AndroidTool烧写系统时需要安装此驱动 |
视频教程:
https://www.bilibili.com/video/av38052562/
详细操作步骤如下:
- 初次使用时,请先下载压缩包 DriverAssitant_v4.5.tgz,解压后,安装USB驱动;
- 根据自己的需要下载系统固件并解压,固件目录下已内置 AndroidTools.exe 线刷工具和配置文件(config.cfg);
- 以管理员身份运行AdnroidTools.exe;
- 连接好电源及HDMI显示设备,连接Type-C数据线到PC,按住Recovery键再长按(1.5秒以上)Power键开机,AndroidTool会显示“发现一个LOADER设备”;
- 在AdnroidTools界面上,选择 “升级固件”,点击界面上的固件按钮,选择固件目录下的文件: MiniLoaderAll.bin,然后点击“擦除Flash” (以下情况下,此步骤可以省略:eMMC内的系统与当前要烧写的系统分区布局相同);
- 回到AdnroidTools首页,点击“执行”按钮,即可下载固件到eMMC,请耐心等待,烧写成功结束后将自动重启。
关于loader和maskrom模式的补充说明:
- 如果eMMC没有烧写过系统或eMMC的系统被擦除或损坏则会显示为MASKROM设备;
- 您也可以按住BOOT键再长按Power键开机(保持按下BOOT键5秒以上),将强制进入MASKROM模式;
- 如果显示“没有发现设备”,请先检查是否已成功安装驱动,检查Type-C数据线然后按上述方法重新开机,或按住Recovery键再按Reset键;
- 可通过串口、adb或ssh等方式在终端上执行reboot loader命令让开发板重启,重启后自动进入LOADER模式;
5.2.3 Linux下通过Type-C数据线进行烧写
注: 不支持在Linux下通过Typc-C烧写Android10
Linux_Upgrade_Tool是Rockchip提供的Linux下的命令行工具,用于通过Type-C数据线来升级eMMC中的固件,同时还提供了如擦除eMMC、直接读/写eMMC等功能。
- 安装upgrade_tool: 下载Linux_Upgrade_Tool_1.27.rar后解压即可获得upgrade_tool,然后复制并设置权限
sudo cp upgrade_tool /usr/local/sbin sudo chown root:root /usr/local/sbin/upgrade_tool sudo chmod 0755 /usr/local/sbin/upgrade_tool
- 根据自己的需要下载images-for-eflasher下的系统固件并解压,如Lubuntu的固件文件是lubuntu-desktop-images.tgz
- 参考“使用AndroidTool”,启动板子并进入LOADER或MASKROM模式;
- Linux: 运行以下命令即可烧写Linux系统并重启:
sudo upgrade_tool ul MiniLoaderAll.bin sudo upgrade_tool di -p parameter.txt sudo upgrade_tool di uboot uboot.img sudo upgrade_tool di trust trust.img sudo upgrade_tool di resource resource.img sudo upgrade_tool di kernel kernel.img sudo upgrade_tool di boot boot.img sudo upgrade_tool di rootfs rootfs.img sudo upgrade_tool RD
- Android 7: 运行以下命令即可烧写Android 7系统并重启:
sudo upgrade_tool ul MiniLoaderAll.bin sudo upgrade_tool di -p parameter.txt sudo upgrade_tool di uboot uboot.img sudo upgrade_tool di trust trust.img sudo upgrade_tool di misc misc.img sudo upgrade_tool di resource resource.img sudo upgrade_tool di kernel kernel.img sudo upgrade_tool di boot boot.img sudo upgrade_tool di recovery recovery.img sudo upgrade_tool di system system.img sudo upgrade_tool RD
- Android 8: 运行以下命令即可烧写Android 8系统并重启:
sudo upgrade_tool ul MiniLoaderAll.bin sudo upgrade_tool di -p parameter.txt sudo upgrade_tool di uboot uboot.img sudo upgrade_tool di trust trust.img sudo upgrade_tool di misc misc.img sudo upgrade_tool di resource resource.img sudo upgrade_tool di kernel kernel.img sudo upgrade_tool di boot boot.img sudo upgrade_tool di recovery recovery.img sudo upgrade_tool di system system.img sudo upgrade_tool di vendor vendor.img sudo upgrade_tool di oem oem.img sudo upgrade_tool RD
如果固件中的MiniLoaderAll.bin版本不同,或烧写与eMMC中不同的系统,则可能会遇到无法成功启动的情况,需要擦除eMMC。
先启动板子并进入LOADER,运行以下命令可删除eMMC,如程序显示"Download Boot Start"后超过10s无变化可按Reset键,然后再运行一次以下命令。
sudo upgrade_tool EF MiniLoaderAll.bin
擦除成功结束后将显示"Erase flash ok."
5.3 快速从SD卡启动
首先访问此处的下载地址下载需要的固件文件:
- 您需要准备一张8G或以上容量的SDHC卡,该卡的已有数据将会被破坏,因此请先对SD卡上的数据进行备份。
Image Files | |
rk3399-sd-debian-bullseye-core-4.19-arm64-YYYYMMDD.img.gz | Debian11 精简版固件,没有桌面, 仅命令行,内核版本 4.19.y |
rk3399-sd-debian-buster-desktop-arm64-YYYYMMDD.img.gz | Debian10 系统固件,带LXDE桌面, 支持GPU/VPU硬件加速,内核版本 4.19.y |
rk3399-sd-buildroot-linux-4.19-arm64-YYYYMMDD.img.zip | Buildroot 固件,基于Rockchip Linux SDK,带Qt5-wayland图形界面 |
rk3399-sd-friendlydesktop-bionic-4.4-arm64-YYYYMMDD.img.zip | FriendlyDesktop 桌面版固件,基于Ubuntu 18.04 64位,带LXDE图形桌面 |
rk3399-sd-friendlycore-bionic-4.4-arm64-YYYYMMDD.img.gz | FriendlyCore 系统固件 (内置Qt 5.10.0),基于Ubuntu core 18.04, 内核4.4 |
rk3399-sd-friendlycore-focal-4.19-arm64-YYYYMMDD.img.gz | FriendlyCore 系统固件 (内置Qt 5.10.0),基于Ubuntu core 20.04, 内核4.19 |
rk3399-sd-friendlycore-lite-focal-5.15-arm64-YYYYMMDD.img.gz | 最轻量版FriendlyCore, 没有预装Qt等图形环境软件包, 基于Ubuntu core 20.04, 使用主线内核Kernel 5.15 |
rk3399-sd-lubuntu-desktop-xenial-4.4-armhf-YYYYMMDD.img.zip | Lubuntu桌面版固件,自带X Window图形界面 |
rk3399-sd-android10-YYYYMMDD.img.gz | Android 10 |
rk3399-sd-friendlywrt-21.02-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 5.15.y |
rk3399-sd-friendlywrt-21.02-docker-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建, 预装Docker,内核版本 5.15.y |
rk3399-sd-friendlywrt-22.03-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 22.03构建,内核版本 5.15.y |
rk3399-sd-friendlywrt-22.03-docker-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 22.03构建, 预装Docker,内核版本 5.15.y |
rk3399-sd-friendlywrt-21.02-kernel4-YYYYMMDD.img.gz | FriendlyWrt系统固件,基于OpenWrt 21.02构建,内核版本 4.19.y |
Flash Utility: | |
win32diskimager.rar | Windows utility. Under Linux users can use "dd" |
- 将固件和烧写工具分别解压,在Windows下插入SD卡(限8G及以上的卡),以管理员身份运行 win32diskimager 工具, 在win32diskimager工具的界面上, 选择你的SD卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。
- 当制作完成 SD 卡后,拔出 SD 卡插入卡槽,上电启动即可。
- Android系统不支持从SD卡启动,如果你需要运行Android系统,请购买eMMC配件,然后参考后面的章节内容,将Android系统烧写到eMMC运行。
5.4 串口调试
如果你想查看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 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硬解视频播放。
6.1 帐户与密码
普通用户:
用户名: pi 密码: pi
Root用户:
用户名: root 密码: fa
6.2 设置WiFi无线链接
点击FriendlyDesktop右上角的网络图标,选择你要连接的WiFi热点,按界面提示操作即可。
6.3 设置HDMI/DP屏幕分辨率
进入系统菜单 Perferences -> Monitor Settings界面进行设置即可。
推荐分辨率:1920x1080@60Hz
6.4 调节HDMI边界
打开命令行终端,输入命令进行操作,有几个注意事项:
1) 需要登录桌面才能操作,如果Desktop停留在Login是无法设置的;
2) 如果你是在 ssh 登录的终端,请使用与桌面登录相同的用户名,默认是 pi,不能使用root用户,同时,你需要赋值 DISPLAY 变量:
export DISPLAY=:0.0
6.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
6.4.2 设置分辨率
例如设置为 1920X1080@60Hz:
xrandr --output HDMI-1 --mode 1920x1080 --refresh 60
6.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
6.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
6.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 配置文件。
注意:硬解视频时,视频窗口并不会跟随屏幕旋转。
6.6 测试OpenGL ES性能
在系统菜单 System Tools 中点击 Terminator 打开命令行终端,输入以下命令即可测试:
taskset -c 4-5 glmark2-es2
6.7 如何播放4K视频
6.7.1 使用Qt硬解播放器播放
FriendlyDesktop预装了Qt播放器Qt5-VideoPlayer,该播放器已经适配Rockchip的gstreamer插件,支持4K视频的硬解播放, 播放器启动方法:
在FriendlyDesktop上打开菜单 Sound & Video,点击 Qt5-VideoPlayer。
在播放器界面上,点击左下角的 Open 按钮加载一个视频文件到右边的播放列表,双击播放列表上的文件开始播放。播放器的界面如下所示,可以设置全屏播放,也可以调节音量:
Qt播放器源代码: https://github.com/friendlyarm/rk-player-qt
6.7.2 命令行播放
打开命令行终端,输入以下命令即可测试:
gst-player.sh
默认音频会输出到耳机孔, 可以使用 which gst-player.sh 找到这个脚本的位置,自已定制其播放的行为。
6.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
6.9 如何通过蓝牙传输文件
在FriendlyDesktop上打开菜单 Preferences,启动 Bluetooth Manager,在界面上点 Search 即可搜索周边的蓝牙设备, 点击你的设备进行配对,配对后即可发送文件,如下图所示:
6.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
6.11 开发Qt程序
FriendlyDesktop下提供了重新编译的 Qt 5.10.0,支持RK3399的OpenGL ES和Gstreamer 1.0的硬件加速,同时集成了 QtCreator IDE,已配置好可以直接在开发板上编译并运行程序,如下所示:
运行Qt程序时,需要指定platform参数为xcb,如下所示:
./HelloQt --platform xcb
6.12 访问GPIO/I2C/串口等硬件资源
请参考下面的文档:
6.13 切换音频默认输出设备
6.13.1 查看当前默认的输出设备
在普通用户的终端上,输入以下命令:
pactl info -vvv
显示的信息包含以下内容,表示当前音频输出到耳机:
Default Sink: alsa_output.platform-rt5651-sound.stereo-fallback
显示的信息包含以下内容,表示当前音频输出到HDMI:
Default Sink: alsa_output.platform-hdmi-sound.stereo-fallback
6.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%
6.13.3 设置默认的音频输出设备为HDMI
在普通用户的终端上,输入以下命令:
pactl set-default-sink alsa_output.platform-hdmi-sound.stereo-fallback
6.13.4 查看设置是否已生效
cat /var/lib/pulse/*-default-sink
6.13.5 播放时临时切换
这种方法仅对当前的播放进程有效:
打开菜单 "Sound & Video" -> "PulseAudio Volume Control", 在界面上点击 "Built-in Audio Stereo" 按钮切换不同的输出设备,比如在HDMI与耳机接口之间切换。
6.14 播放网络流媒体(或网络摄像头)
打开命令行终端,输入以下命令:
gst-launch-1.0 rtspsrc location="rtsp://admin:12345@192.168.1.120:554/live/main" ! rtph264depay ! decodebin ! rkximagesink
请将 rtsp:// 后面的地址改成真实的地址。
6.15 Chromium网页浏览器
系统预装的Chromium网页浏览器已经默认启用硬件加速,支持WebGL,可以通过输入网址 chrome://gpu 了解硬件加速情况,如下图所示:
6.16 屏幕保护与自动休眠相关设置
屏幕保护与自动休眠的配置文件是 /etc/xdg/autostart/xset_command.desktop,默认出厂的设置是屏幕保护和DPMS都是关闭的,你可以通过修改这个文件来更改配置,具体可以了解一下Linux下 xset 命令的用法。
6.17 安装Scratch
用以下命令安装:
sudo apt-get install scratch:arm64
6.18 安装Arduino IDE
用以下命令安装:
sudo apt-get install arduino:arm64
6.19 开机自动启动程序
把要开机启动的程序的desktop文件放入~/.config/autostart/目录即可,例如:
cp /usr/share/applications/org.qt-project.qtcreator.desktop ~/.config/autostart/
6.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
6.21 FriendlyDesktop下使用NVME SSD
请参考: Linux-Using-NVME-SSD
7 FriendlyCore的使用
7.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等相关软件包
7.2 运行FriendlyCore
- 对于有HDMI接口的板子,如果要在电视上进行操作,您需要连接USB鼠标和键盘。
- 如果您需要进行内核开发,最好选购一个串口配件,连接了串口,则可以通过串口终端对开发板进行操作。
SOM-RK3399需要使用USB转串口模块,连接方法如下图所示:
- FriendlyCore默认帐户:
普通用户:
用户名: pi 密码: pi
Root用户:
用户名: root 密码: fa
默认会以 pi 用户自动登录,你可以使用 sudo npi-config 命令取消自动登录。
- 更新软件包:
$ sudo apt-get update
7.3 开发Qt应用
请参考 How to Build and Install Qt Application for FriendlyELEC Boards/zh
7.4 开机自动运行Qt示例程序
使用npi-config工具进行开启:
sudo npi-config
进入Boot Options -> Autologin -> Qt/Embedded,选择Enable然后重启即可。
7.5 扩展TF卡文件系统
第一次启动FriendlyCore系统时,系统会自动扩展文件系统分区,请耐心等待,TF卡/eMMC的容量越大,需要等待的时间越长,进入系统后执行下列命令查看文件系统分区大小:
df -h
7.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
7.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目录下。
7.8 连接以太网
默认插上网线开机,会自动连接并通过DHCP获取IP地址,如需要配置静态IP地址,请参考 NetworkManager 的相关文档: Use NetworkManager to configure network settings。
7.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
7.10 修改时区
例如更改为Shanghai时区:
sudo rm /etc/localtime sudo ln -ls /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
7.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命令的结果为准。
7.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
7.13 运行X11程序
FriendlyCore系统集成了轻量级的Xorg,虽然没有窗口管理器,但是你仍然可以运行单一的X-Windows程序,例如要运行的程序是~/YourX11App,使用以下命令:
. /usr/bin/setqt5env-xcb startx ~/YourX11App -geometry 1280x800
注意 “.” 与 /usr/bin/setqt5env-xcb 之间有一个空格,另外,-geometry后面的分辨率请更改为你的屏幕的实际分辨率。
7.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
8 同时适用于FriendlyDesktop与FriendlyCore系统的功能特性
8.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: 停止预览
8.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。
8.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下测试。
8.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
8.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
8.1.5 摄像头应用教程: 推流至直播平台
请查看这篇文档: How to setup RTMP server on NanoPC-T4/zh
8.1.6 参考资源
http://blog.iotwrt.com/media/2017/10/01/camera/ http://www.360doc.com/content/16/1019/17/496343_599664458.shtml
8.2 Docker的安装与使用
8.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
8.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
8.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。
9 初始化NVME固态硬盘和USB移动硬盘
9.1 检查是否检测到了硬盘
安装好硬盘后, 上电开机, 在终端上输入以下命令:
cat /proc/partitions
看到有 nvme0n1 设备的节点,说明NVME固态硬盘已经成功被识别到了:
major minor #blocks name 1 0 4096 ram0 259 0 125034840 nvme0n1
看到有 sda 设备的节点,说明USB移动硬盘已经成功被识别到了:
179 105 30646767 mmcblk0p9 8 0 3907018584 sda 8 1 3907017543 sda1
9.2 给硬盘重新分区并格式化为ext4格式
为了简化操作, 我们会将硬盘整个空间分成一个分区, 如果你用的是NVME固态硬盘, 输入以下命令进行操作:
(echo g; echo n; echo p; echo 1; echo ""; echo ""; echo w; echo q) | fdisk /dev/nvme0n1 mkfs.ext4 /dev/nvme0n1p1
如果要对USB移动硬盘进行操作, 输入以下命令:
(echo g; echo n; echo p; echo 1; echo ""; echo ""; echo w; echo q) | fdisk /dev/sda mkfs.ext4 /dev/sda1
9.3 硬盘的自动挂载
9.3.1 在FriendlyWrt系统下挂载
在FriendlyWrt菜单中, 点击"系统"->"挂载点"界面, 在页面底部的"挂载点"的区域中, 点击"新增"按钮, 在UUID一栏中,选择你的硬盘分区, NVME固态硬盘选择 /dev/nvme0n1p1, 如果是USB移动硬盘, 则选择 /dev/sda1, 然后钩选"已启动“, 填写挂载硬盘的目标位置, 本例中选择将 NVME固态硬盘 挂载到 /mnt 目录, 如下图所示:
点击"Save"按钮保存设置, 挂载完成后界面会列出所挂载的硬盘, 如下图所示:
9.3.2 在FriendlyCore系统下挂载
首先,我们需要了解分区的Block ID,用blkid查看, NVME固态硬盘输入如下命令查看:
blkid /dev/nvme0n1p1
USB移动固态硬盘输入如下命令查看:
blkid /dev/sda1
输入信息如下所示, 我们需要的是UUID:
/dev/sda1: UUID="de29e869-f442-414a-8dc4-9c47c05b229f" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="b026f952-01"
然后需要把 UUID 添加到 /etc/fstab 文件中去,为了挂载本例中使用的硬盘,/etc/fstab内容如下所示:
UUID=de29e869-f442-414a-8dc4-9c47c05b229f /media/mydisk ext4 defaults 0 0
硬盘将挂载到 /media/mydisk 目录,这个目录默认是不存在的,我们用以下命令手动创建它,并设置为普通用户可以读写:
mkdir -p /media/mydisk chmod 777 /media/mydisk
接下来就可以输入mount命令,测试一下是否能正常挂载了:
mount /media/mydisk
如果成功挂载, 接下来我们关机测试一下,看下次开机是否会自动挂载:
reboot
9.4 为硬盘设置网络共享
9.4.1 提升硬件挂载目录的权限
为了方便普通用户的读取, 进入终端, 输入以下命令先提升硬件挂载目录的权限:
chmod 777 /mnt
9.4.2 FriendlyWrt下设置网络共享
进入 “服务” -> "网络共享" 菜单, 在页面底部的 “共享目录” 区域, 点击 “新增” 按钮, 分别填写 "名称" 与 "路径" 为 mnt 和 /mnt, 其他默认, 点击 "保存并应用" 即可.
9.4.3 在电脑上访问共享
在Windows电脑上输入以下地址访问共享目录:
\\192.168.2.1\mnt
在Ubuntu/Mac电脑上使用以下地址访问共享目录:
smb://192.168.2.1/mnt
在询问身份验证时, 输入如下信息:
连接方式: 已注册用户
用户名: root
域: WORKGROUP
密码: password
9.5 本机上进行硬盘速度测试
9.5.1 NVME固态硬盘速度测试
9.5.1.1 写入速度
测试命令:
dd if=/dev/zero of=/mnt/deleteme.dat bs=32M count=64 oflag=direct,nonblock
结果如下:
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 6.74925 s, 318 MB/s
9.5.1.2 读取速度
测试命令:
dd if=/mnt/deleteme.dat of=/dev/null bs=32M count=64 iflag=direct,nonblock
结果如下:
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 5.18329 s, 414 MB/s
9.5.2 USB移动机械硬盘速度测试
9.5.2.1 写入速度
测试命令:
dd if=/dev/zero of=/mnt/deleteme.dat bs=32M count=64 oflag=direct,nonblock
结果如下:
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 20.3973 s, 105 MB/s
9.5.2.2 读取速度
测试命令:
dd if=/mnt/deleteme.dat of=/dev/null bs=32M count=64 iflag=direct,nonblock
结果如下:
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 18.9168 s, 114 MB/s
9.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
9.7 Linux下使用4G EC20模块
请参考: How to use 4G Module on NanoPC-T4/zh
10 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 for RK3399
11 Lubuntu 系统的使用
看这里: Lubuntu desktop 16.04 for RK3399/zh
Lubuntu下使用NVME SSD: Linux-Using-NVME-SSD
12 Android8.1 系统的使用
我们为 SOM-RK3399 提供了完善的Android8.1 BSP,代码使用 gitlab.com 平台管理,完全开源,支持GPU加速和VPU硬件加速。
12.1 使用MIPI摄像头进行拍照和录像
SOM-RK3399在Android系统下,可以搭配 MIPI摄像头CAM1320 进行拍照和录像,操作比较简单,连接摄像头到SOM-RK3399的MIPI接口,开机进入 Android 系统,用系统自带的 Camera 应用即可完成拍照和录像,操作跟 Android 手机是一样的。
12.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的某些参数
12.3 切换系统语言
Android系统默认的系统语言是英文,比如我们要设置为中文,步骤如下:
1) 进入 Android 设置:Settings -> System -> Languages & Input -> Languages;
2)点击"Add a language", 在列表中选择 "简体中文",再选择 "中国";
3) 这时列表中会有中文和英文两种语言,拖动中文那一项到列表的最上面即可,注意,如果你使用的是鼠标,拖动的方法是:将鼠标指针放在列表项右边的图标上,然后按下鼠标中键来拖动;
12.4 Android8.1 硬件访问
开发者可以通过FriendlyThings SDK在Android App中访问和控制主板上的各种硬件资源,比如Uart, SPI, I2C, GPIO等接口,详情可参考以下两份文档:
12.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源代码]
12.6 如何使用adb(Android Debug Bridge)
12.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
12.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
12.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/
12.6.4 注意事项
部分电脑USB端口可能供电不足,如使用NanoPi M4系列请使用PSU Module供电
12.7 HDMI分辨率、边界调节
如果连接了HDMI显示设备,可进入 Android 的 Settings -> Display -> Advanced -> HDMI & Rotation 进行设置。
HDMI Resolution 缺省为 Auto,可手动设置显示分辨率,最高可支持 4K 分辨率 Screen Zoom 用户可观察红色边框的显示,点击中间的4个箭头按钮来进行缩放调节 Display Rotation 可进行横竖屏切换
12.8 屏幕旋转
使用HDMI与LCD作为显示设备时,如果需要旋转屏幕,可进入 Android 的 Settings -> Display -> Advanced -> HDMI & Rotation -> Display Rotation 进行设置。
在 adb shell 用命令来测试屏幕旋转 (不会保存设置):
wm rotation 90
进入设置界面 Settings -> Accessibility,启用 Immersive Mode,然后再打开你的 Android应用,例如 Lightning,你会发现它将处于全屏状态。
12.10 切换音频输出通道
可以配置音频输出到HDMI或者耳机接口,设置入口:Android 的 Settings -> Accessibility -> Force audio output。 如果 Force audio output菜单项是灰色的,即处于不可选择的状态,说明你所用的硬件会自动检测耳机插拨状态,并自动切换音频通道,无需设置。
12.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源代码并测试。
12.12 定制开关机界面与动画
12.12.1 开启与关闭
将 device/rockchip/common/BoardConfig.mk 文件的
BOOT_SHUTDOWN_ANIMATION_RINGING := false
改为
BOOT_SHUTDOWN_ANIMATION_RINGING := true
来打开编译时将文件打包进固件的功能
12.12.2 开机动画
创建或替换Android源代码目录下的如下文件:
kernel/logo.bmp
kernel/logo_kernel.bmp
device/rockchip/common/bootshutdown/bootanimation.zip
12.12.3 关机动画
创建或替换Android源代码目录下的如下文件:
device/rockchip/common/bootshutdown/shutdownanimation.zip
12.12.4 动画制作方法
请参考:http://blog.sina.com.cn/s/blog_4960586c0100vu5v.html
12.13 移除Google框架
如果不需要使用google服务,可以删除Google框架以节约系统资源,方法是删除Android源代码中的以下目录,然后重新编译Android:
vendor/google
12.14 用摇控器操作Android
SOM-RK3399在Android下完美支持 FriendlyARM RC-100 红外遥控器,更方便SOM-RK3399在接电视的场景下使用,遥控器按键功能丰富:
按键定义与功能如下表所示:
按键 功能 上 导航键-上 下 导航键-下 左 导航键-左 右 导航键-右 OK 确认 - 音量- + 音量+ 静音 静音 菜单 Android菜单键 首页 Android Home键 返回 Android 返回键 F1 下拉Android 通知栏 F2 Android 截屏 F3 切换操作模式,在鼠标模式与按钮模式之间切换
12.15 使用USB摄像头进行拍照和录像
Android系统同时支持USB摄像头拍照和录像,使用系统自带的 Camera 应用即可,有两点需要注意的地方:
1)需要根据摄像头规格,选择合适的录像分辨率,可以先选择较低的CIF分辨率,测试OK之后再尝试更高的分辨率,设置界面如下所示:
;
2)USB摄像头不能与MIPI摄像头同时使用,也不能热拨插,插入摄像头后需要重新开机才能识别;
我们测试过的USB摄像头型号如下:罗技C270,罗技C922 PRO,
实测罗技C922 PRO录像和拍照可以达到1080P分辨率。
12.16 Android下使用4G模块EC20
12.16.1 连接方法
连接时,需要通过USB to miniPCIe转接板转接EC20,再连接到主板的USB Host端口,如下图所示:
连接后无需额外的配置,启动Android后就可以使用4G上网了,跟Android手机类拟。
12.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。
12.17 Android下使用NVME SSD高速固态硬盘
12.17.1 第一步:格式化SSD为单分区ext4格式
此操作可以在电脑上进行,也可以在开发板的 linux 系统里进行。
为了方便操作,请在终端上先用以下命令切换为 root 用户:
su -
root用户的默认密码是fa。
12.17.1.1 检查是否检测到了SSD
root@FriendlyELEC:~# cat /proc/partitions major minor #blocks name 1 0 4096 ram0 259 0 125034840 nvme0n1
看到有 nvme0n1 设备的节点,说明SSD已经成功被识别到了。
12.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的文档来操作。
12.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
12.17.2 第二步:Android开机自动挂载
只要SSD已经被正确地格式化,Android就会自动挂载SSD为外置存储设备,无需额外的设置,打开Android内置的Files应用,可以看到SSD设备已经挂载:
第三方的软件可以正常识别SSD,如下图中的迅雷下载软件,可以设置将文件默认下载到SSD上:
12.18 设置调速散热风扇
散热风扇使用PWM来实现自动调速,会根据当前的CPU温度来决定风扇的开关,以及风扇的转速,如果当前的CPU温度不高,风扇会被关闭或者以较低转速旋转 (减少不必要的环境噪声),如果你想改变风扇的调速行为,请修改Android bsp源代码中的以下文件:
device/rockchip/rk3399/nanopc-t4/pwm_fan.sh
需要禁止开机自动启动风扇(比如你需要连接其他的PWM设备),请修改Android bsp源代码中的以下文件:
device/rockchip/rk3399/init.rk3399.rc
对源代码做了修改后,需要重新编译Android。
13 Android7.1 系统的使用
看这里: Android7
13.1 编译 Openwrt/Friendlywrt
13.1.1 下载源代码
FriendlyWrt有两个版本, 请根据需要进行选择.
13.1.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
13.1.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
13.1.2 首次编译
下面的命令是编译不带docker的版本, 如需要编译带docker的版本, 请将rk3399.mk替换为rk3399-docker.mk:
./build.sh rk3399.mk
会编译所有组件(包含u-boot, kernel 和 friendlywrt)并生成sd卡镜像文件,再执行以下命令,可生成用于安装系统到emmc运行的镜像文件(eflahser固件):
./build.sh emmc-img
对项目进行过修改后, 需要重新打包sd卡镜像, 可执行如下命令:
./build.sh sd-img
13.1.3 二次编译
cd friendlywrt make menuconfig #改动FriendlyWrt的配置 rm -rf ./tmp make -j${nproc} cd ../ ./build.sh sd-img ./build.sh emmc-img
13.1.4 单独编译u-boot
./build.sh uboot
13.1.5 单独编译kernel
./build.sh kernel
13.1.6 单独编译friendlywrt
./build.sh friendlywrt
或者进入friendlywrt目录, 按标准openwrt的命令操作, 上面的命令出现错误时, 可尝试使用以下命令单线程编译:
cd friendlywrt make -j1 V=s
13.2 编译Buildroot
请参考: Buildroot
13.3 其他Linux系统编译
13.3.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可查看各系统的分区布局(配置文件)
13.3.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与内核
13.3.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与内核
13.3.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与内核
13.3.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与内核
13.3.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与内核
13.3.7 应用新编译的uboot与内核
13.3.7.1 安装到目标板
13.3.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
13.3.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。
13.3.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 |
13.3.7.3 线刷
注:不支持内核v4.4.y的固件
13.3.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以上版本。
13.4 使用脚本进行编译
13.4.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
13.4.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
13.4.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
13.4.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
13.4.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
13.5 Android系统编译
13.5.1 电脑的软硬件要求
- 至少配置16G以上内存+300G磁盘空间,建议使用32G内存+大容量高速SSD的机器,不建议使用虚拟机;
- 如遇到编译错误,可能是编译环境问题,推荐使用如下Docker容器进行编译:docker-cross-compiler-novnc;
13.5.2 编译Android10
13.5.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
13.5.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
13.5.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)。
13.5.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 。
13.5.3 编译Android8.1
13.5.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
13.5.3.2 编译并生成Image文件
使用以下命令编译:
cd rk3399-android-8.1 ./build-nanopc-t4.sh -F -M
13.5.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
13.5.4 编译Android7源代码
13.5.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
13.5.4.2 编译并生成Image文件
使用以下命令编译:
cd rk3399-nougat ./build-nanopc-t4.sh -F -M
13.5.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
14 硬件资源访问
14.1 串口访问
如下表所示,仅 UART4 可供应用程序开发使用:
串口设备 串口资源占用情况 UART0 已被蓝牙占用 UART1 已被千兆以太网占用 UART2 已被作为调试串口 UART3 已被千兆以太网占用 UART4 空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM)
15 源代码下载地址汇总
SOM-RK3399源代码下载地址 Android 8.1 Uboot源代码下载地址 https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/u-boot
Android 8.1 Linux-4.4.y 内核源代码下载地址 https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/kernel
Android 8.1 BSP源代码下载地址 https://gitlab.com/friendlyelec/rk3399-android-8.1
网盘路径: sources/rk3399-android-8.1.git-YYYYMMDD.tgzAndroid 7.1.2 Uboot源代码下载地址 https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/u-boot
Android 7.1.2 Linux-4.4.y 内核源代码下载地址 https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/kernel
Android 7.1.2 BSP源代码下载地址 https://gitlab.com/friendlyelec/rk3399-nougat
网盘路径: sources/rk3399-android-7.git-YYYYMMDD.tgzFriendlyCore/FriendlyDesktop/Lubuntu Uboot源代码下载地址 https://gitlab.com/friendlyelec/rk3399-android-8.1/tree/master/u-boot
FriendlyCore/FriendlyDesktop/Lubuntu Linux-4.4.y 内核源代码下载地址
16 更多OS
16.1 DietPi_NanoPCT4-ARMv8-Stretch
DietPi身轻如燕,镜像文件最小只有345M 字节。系统存储操作及进程对资源的占用非常少,并且预装DietPi-RAMlog工具。这些特性使得用户能最大程度地发挥设备本身的性能。
仅提供给进阶爱好者交流使用,不对该系统提供专业技术支持。
详细操作步骤如下:
- 初次使用时,请先下载DriverAssitant_v4.5.tgz,解压后安装USB驱动;
- 下载系统固件DietPi_NanoPCT4-ARMv8-Stretch点击下载DietPi_NanoPCT4-ARMv8-Stretch
- 解压,进入Image_and_Tools,以管理员身份运行AndroidTool.exe
- 默认已经导入分区配置,即固件中的parameter.txt,并已经指定各分区的烧写文件路径,如下图所示:
- 连接好12V/2A的DC接口电源及HDMI显示设备,连接Type-C数据线到PC,按住Recovery键再长按(1.5秒以上)Power键开机,AndroidTool会显示“发现一个LOADER设备”
a) 如果eMMC没有烧写过系统或eMMC的系统被擦除或损坏则会显示为MASKROM设备;
b) 您也可以按住BOOT键再长按Power键开机,同时持续按住BOOT键5秒以上强制进入MASKROM模式;
c) 如果显示“没有发现设备”,请先检查是否已成功安装驱动,检查Type-C数据线然后按上述方法重新开机,或按住Recovery键再按Reset键;
d) 另外,如果已成功启动系统,可通过串口、adb或ssh等方式在板子上运行reboot loader重启板子并进入LOADER模式。 - 点击“Run”即可下载固件到eMMC,请耐心等待,烧写成功结束后将自动重启。
登录账号:root
登录密码:dietpi
16.2 使用wifi
系统默认没有使能wifi,请执行dietpi-config配置。 dietpi-config
--> Network Options:Adapters --> WiFi Change Wireless Network Settings --> Scan Scan and Connect
17 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
18 原理图, PCB图
- 核心板原理图: SOM-RK3399_1904_Schematic.pdf
- 核心板PCB CAD 文件:SOM-RK3399_1904_dxf.zip
- 底板原理图:SOM-RK3399_Dev_Kit_1904_Schematic.pdf
- 底板PCB CAD 文件:SOM-RK3399_Dev_Kit_1904_dxf.zip
19 更新日志
19.1 2024-04-21
19.1.1 OpenMediaVault
- 更新到 7.0.5-1
- 更新到 Debian12
19.2 2024-03-15
19.2.1 Ubuntu focal desktop
- 修正蓝牙无法使用的问题
19.3 2024-01-31
19.3.1 Debian/Ubuntu/FriendlyCore/Buildroot
- 增加adb支持
19.4 2023-12-01
19.4.1 FriendlyWrt
- 更新到 6.1.63 内核
- 更新到 OpenWrt 23.05.2
19.5 2023-10-31
19.5.1 增加新系统
- 增加NAS系统 OpenMediaVault,基于Debian11构建,使用6.1内核
19.5.2 Debian Core/FriendlyCore-Lite-Core
- 更新到 6.1 内核
19.5.3 FriendlyWrt
- 更新到 6.1 内核
- 更新到 openwrt-23.05
19.6 2023-07-01
19.6.1 Debian11
- 更新到Rockchip sdk版本最新版本, 升级gpu与xserver驱动等,提升UI与媒体播放性能
- 修正已知问题
19.7 2023-05-26
19.7.1 FriendlyWrt更新
- 更新 v22.03 到新版本 openwrt-22.03.5
- 更新 v21.02 到新版本 openwrt-21.02.7
19.8 2023-05-21
19.8.1 Debian11:
- 更新到Rockchip sdk版本linux-5.10-gen-rkr4
- 为了流畅性,将桌面切换至LXDE
19.9 2023-04-26
19.9.1 FriendlyWrt:
- 更新 v22.03 到新版本 openwrt-22.03.4
- 更新 v21.02 到新版本 openwrt-21.02.6
19.10 2023-02-10
19.10.1 新增 Debian11
分为以下三个版本:
- Debian11 Core: 仅命令行
- Debian11 Minimal: LXDE桌面,精简版
- Debian11 Desktop: LXDE桌面,完整版
19.11 2023-01-09
19.11.1 FriendlyCore更新说明:
- 优化了开机服务
19.12 2022-12-04
19.12.1 FriendlyWrt:
- 修正存储空间某些情况下无法扩展的问题
- 加强eMMC刷机工具的刷机稳定性
19.13 2022-09-06
19.13.1 FriendlyWrt更新说明:
- 提升了NanoPi-R4SE的eMMC读取性能
- 增加Fullcone NAT支持 (默认开启)
- 版本升级到 22.03.0 正式版
- 修复NanoPC-T4在FriendlyWrt下的eMMC稳定性问题
19.14 2022-08-19
19.14.1 Lubuntu/Android8/FriendlyDesktop更新说明:
- 增加7寸屏HD703E的支持
- 修正FriendlyDesktop eMMC启动问题
19.14.2 Buildroot更新说明:
- 修正在Som-RK3399下未自动加载WiFi模块的问题
19.15 2022-08-03
19.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版本一致
19.16 2022-07-27
19.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
19.17 2022-07-04
19.17.1 Debian 10(buster) Desktop (首次发布)
- 桌面环境采用 LXDE, 多种主题可选, 简洁美观, 占用资源少
- 提供基于 Mali GPU 的 OpenGL 支持
- 支持Rockhip MPP视频硬编和硬解码
- 预装基于mpv的Kodi, SMPlayer播放器, 支持4K视频硬解码
- 预装Chromium浏览器, 支持vpu/gpu硬件加速 (视频硬解限h264/mp4格式)
- 支持安装Plex Server, wps等应用, 玩法丰富
19.18 2021-12-02
- 修正某些sd卡会导致reboot命令和看门狗无法正常工作的问题 (更新了uboot v2017.09)
19.19 2021-10-29
19.19.1 FriendlyWrt更新说明:
- FriendlyWrt更新至官方稳定版本 21.02.1,特性与19.07.5基本保持一致,支持docker、usb wifi等
19.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会出错的问题
19.20 2021-08-31
19.20.1 FriendlyWrt更新说明:
- FriendlyWrt的内核更新到 5.10.60
- 新增一款高速5G USB WiFi的支持,网卡型号为 Comfast CF-WU782AC V2,芯片型号为 MediaTek MT7662
- 改进了USB WiFi的兼容性
- 改进了PWM风扇的支持,风扇由内核驱动控制,支持温控(详情请在R4S的WiKi页面搜索 PWM风扇)
- 改进了首次启动的稳定性 (之前的版本,首次启动时,某些情况下会出现bpfilter错误)
19.21 2021-03-11
19.21.1 FriendlyWrt更新说明:
- FriendlyWrt内核更新到5.10
19.22 2020-12-24
19.22.1 FriendlyWrt更新说明:
- FriendlyWrt更新至官方稳定版本 19.07.5
19.23 2020-12-17
19.23.1 FriendlyWrt更新说明:
19.24 2020-12-17
19.24.1 FriendlyWrt更新说明:
1) FriendlyWrt提供两个版本,使用4.19内核与5.4内核,其中5.4用于R4S,其他型号请使用4.19版本
2) 提高了软件包的兼容性,方便用 opkg 命令安装软件包
19.24.2 FriendlyCore/FriendlyDesktop更新说明:
更新wiringPi,支持更多引脚
19.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支持
19.26 2020-09-27
19.26.1 Android 10更新说明:
- 增加A/B(无缝)系统更新的支持
- 为演示新特性,此次发布的Rom,可检查到一个更新
19.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/ 目录权限某些情况下被修改成只读的问题
19.28 日期 2020-08-17
1) 修正 typc-c 烧写的稳定性和易用性,为每个系统的压缩包预置了AndroidTool以及配置文件,无需手动加载文件 (注:改变EMMC中的OS类型时,仍需先擦除Flash再烧写新的OS);
2) 修正 FriendlyWrt 串口无法登录的问题;
19.29 日期 2020-07-10
- Android 10 更新:
1) SOM-RK3399缺省启用HDMI IN音频输入与耳机口音频输出
2) 增加支持2个USB摄像头协同工作,Camera应用可切换前/后摄像头预览
3) 集成了浏览器Chrome和输入法Gboard
19.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更新如下:
增加自动隐藏导航栏的设置
19.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) 内核稳定性方面的优化
19.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界面现在可以配置标题,隐藏界面菜单与按钮
19.33 日期 2019-09-26
- FriendlyCore/FriendlyDesktop小修正:
修正 Qt5 demo在某些LCD下无法触摸的问题
19.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) 增加使能开机后自动加载蓝牙固件
19.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的支持
19.36 日期 2019-06-25
Linux(Ubuntu 16.04/18.04) 全面采用 OverlayFS,以增强文件系统的稳定性.
19.37 日期 2019-05-23
- Ubuntu 18.04(FriendlyCore, FriendlyDesktop)更新:
1) 修正 Pulseaudio 服务没法启动的问题
2) 修正 Bluetooth 服务的问题
19.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)
19.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摄像头的稳定性问题
19.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设置,默认关闭自动休眠
19.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会有较大幅度的性能提升
19.42 日期 2018-09-21
- 增加一款eDP屏的支持
- Linux启用了PCI-E转Sata 功能 (AHCI SATA support)
- Linux下的SquashFS启用了LZO/XZ/ZSTD压缩支持
19.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
19.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.friendlyarm.com/nanopct4
19.45 2018-08-02
- 增加可以直接从SD卡启动的FriendlyCore和Lubuntu固件
19.46 2018-07-28
- 修正FriendlyCore中的一处可能会影响CPU降频的问题
19.47 2018-07-27
- Android增加UART4支持并集成了串口demo,内核增加常见USB串口支持
19.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备份与还原功能
19.49 2018-06-20
- Android 支持HDMI与LCD屏幕旋转
- Android 增加 摇控器支持
- Lubuntu 内核默认启用 UART4,应用程序可通过设备名 ttyS4 访问
- 改进了 HDMI 与 eDP屏的用户体验