SOM-RK3399v2/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 源代码下载地址汇总
- 17 更多OS
- 18 Link to Rockchip Resources
- 19 原理图, PCB图
- 20 更新日志
- 20.1 2024-04-21
- 20.2 2024-03-15
- 20.3 2024-01-31
- 20.4 2023-12-01
- 20.5 2023-10-31
- 20.6 2023-07-01
- 20.7 2023-05-26
- 20.8 2023-05-21
- 20.9 2023-04-26
- 20.10 2023-02-10
- 20.11 2023-01-09
- 20.12 2022-12-04
- 20.13 2022-09-06
- 20.14 2022-08-19
- 20.15 2022-08-03
- 20.16 2022-07-27
- 20.17 2022-07-04
- 20.18 2021-12-02
- 20.19 2021-10-29
- 20.20 2021-08-31
- 20.21 2021-03-11
- 20.22 2020-12-24
- 20.23 2020-12-17
- 20.24 2020-12-17
- 20.25 2020-10-27
- 20.26 2020-09-27
- 20.27 日期 2020-09-16
- 20.28 日期 2020-08-17
- 20.29 日期 2020-07-10
- 20.30 日期 2020-06-23
- 20.31 日期 2020-03-24
- 20.32 日期 2019-12-27
- 20.33 日期 2019-09-26
- 20.34 日期 2019-09-03
- 20.35 日期 2019-07-18
- 20.36 日期 2019-06-25
- 20.37 日期 2019-05-23
- 20.38 日期 2019-05-11
- 20.39 日期 2019-03-08
- 20.40 日期 2018-12-19
- 20.41 日期 2018-11-12
- 20.42 日期 2018-09-21
- 20.43 日期 2018-09-05
- 20.44 2018-08-20
- 20.45 2018-08-02
- 20.46 2018-07-28
- 20.47 2018-07-27
- 20.48 2018-07-19
- 20.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 烧写系统到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
请参考: How to Initialize and Format New SSD And HDD
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
11 Lubuntu 系统的使用
看这里: Lubuntu desktop 16.04 for RK3399/zh
Lubuntu下使用NVME SSD: How to Initialize and Format New SSD And HDD
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
14 如何编译系统
14.1 搭建编译环境
建议使用64位的Ubuntu 18.04系统,需要安装如下软件包:
sudo apt-get -y install bison g++-multilib git gperf libxml2-utils make python-networkx zip sudo apt-get -y install flex curl libncurses5-dev libssl-dev zlib1g-dev gawk minicom sudo apt-get -y install openjdk-8-jdk sudo apt-get -y install exfat-fuse exfat-utils device-tree-compiler liblz4-tool sudo apt-get -y install android-tools-fsutils sudo apt-get -y install swig sudo apt-get -y install python-dev python3-dev
14.2 安装交叉编译器
14.2.1 安装aarch64-linux-gcc 6.4
该编译器可用来编译Linux系统的内核和u-boot,用以下命令下载并安装:
git clone https://github.com/friendlyarm/prebuilts.git -b master --depth 1 cd prebuilts/gcc-x64 cat toolchain-6.4-aarch64.tar.gz* | sudo tar xz -C /
然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin:$PATH export GCC_COLORS=auto
执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:
. ~/.bashrc
这个编译器是64位的,不能在32位的PC Linux系统上运行,安装完成后,用以下命令可以验证是否安装成功:
aarch64-linux-gcc -v Using built-in specs. COLLECT_GCC=aarch64-linux-gcc COLLECT_LTO_WRAPPER=/opt/FriendlyARM/toolchain/6.4-aarch64/libexec/gcc/aarch64-cortexa53-linux-gnu/6.4.0/lto-wrapper Target: aarch64-cortexa53-linux-gnu Configured with: /work/toolchain/build/aarch64-cortexa53-linux-gnu/build/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/6.4-aarch64 --with-sysroot=/opt/FriendlyARM/toolchain/6.4-aarch64/aarch64-cortexa53-linux-gnu/sysroot --enable-languages=c,c++ --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --with-cpu=cortex-a53 ... Thread model: posix gcc version 6.4.0 (ctng-1.23.0-150g-FA)
14.3 编译 Openwrt/Friendlywrt
14.3.1 下载源代码
FriendlyWrt有两个版本, 请根据需要进行选择.
14.3.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
14.3.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
14.3.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
14.3.3 二次编译
cd friendlywrt make menuconfig #改动FriendlyWrt的配置 rm -rf ./tmp make -j${nproc} cd ../ ./build.sh sd-img ./build.sh emmc-img
14.3.4 单独编译u-boot
./build.sh uboot
14.3.5 单独编译kernel
./build.sh kernel
14.3.6 单独编译friendlywrt
./build.sh friendlywrt
或者进入friendlywrt目录, 按标准openwrt的命令操作, 上面的命令出现错误时, 可尝试使用以下命令单线程编译:
cd friendlywrt make -j1 V=s
14.4 编译Buildroot
请参考: Buildroot
14.5 其他Linux系统编译
14.5.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可查看各系统的分区布局(配置文件)
14.5.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与内核
14.5.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与内核
14.5.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与内核
14.5.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与内核
14.5.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与内核
14.5.7 应用新编译的uboot与内核
14.5.7.1 安装到目标板
14.5.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
14.5.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。
14.5.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 |
14.5.7.3 线刷
注:不支持内核v4.4.y的固件
14.5.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以上版本。
14.6 使用脚本进行编译
14.6.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
14.6.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
14.6.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
14.6.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
14.6.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
14.7 Android系统编译
14.7.1 电脑的软硬件要求
- 至少配置16G以上内存+300G磁盘空间,建议使用32G内存+大容量高速SSD的机器,不建议使用虚拟机;
- 如遇到编译错误,可能是编译环境问题,推荐使用如下Docker容器进行编译:docker-cross-compiler-novnc;
14.7.2 编译Android10
14.7.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
14.7.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
14.7.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)。
14.7.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 。
14.7.3 编译Android8.1
14.7.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
14.7.3.2 编译并生成Image文件
使用以下命令编译:
cd rk3399-android-8.1 ./build-nanopc-t4.sh -F -M
14.7.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
14.7.4 编译Android7源代码
14.7.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
14.7.4.2 编译并生成Image文件
使用以下命令编译:
cd rk3399-nougat ./build-nanopc-t4.sh -F -M
14.7.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
15 硬件资源访问
15.1 串口访问
如下表所示,仅 UART4 可供应用程序开发使用:
串口设备 串口资源占用情况 UART0 已被蓝牙占用 UART1 已被千兆以太网占用 UART2 已被作为调试串口 UART3 已被千兆以太网占用 UART4 空闲,设备名称为 /dev/ttyS4 (注:需使用20180618之后的ROM)
16 源代码下载地址汇总
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 内核源代码下载地址
17 更多OS
17.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:
18 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
19 原理图, 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
20 更新日志
20.1 2024-04-21
20.1.1 OpenMediaVault
- 更新到 7.0.5-1
- 更新到 Debian12
20.2 2024-03-15
20.2.1 Ubuntu focal desktop
- 修正蓝牙无法使用的问题
20.3 2024-01-31
20.3.1 Debian/Ubuntu/FriendlyCore/Buildroot
- 增加adb支持
20.4 2023-12-01
20.4.1 FriendlyWrt
- 更新到 6.1.63 内核
- 更新到 OpenWrt 23.05.2
20.5 2023-10-31
20.5.1 增加新系统
- 增加NAS系统 OpenMediaVault,基于Debian11构建,使用6.1内核
20.5.2 Debian Core/FriendlyCore-Lite-Core
- 更新到 6.1 内核
20.5.3 FriendlyWrt
- 更新到 6.1 内核
- 更新到 openwrt-23.05
20.6 2023-07-01
20.6.1 Debian11
- 更新到Rockchip sdk版本最新版本, 升级gpu与xserver驱动等,提升UI与媒体播放性能
- 修正已知问题
20.7 2023-05-26
20.7.1 FriendlyWrt更新
- 更新 v22.03 到新版本 openwrt-22.03.5
- 更新 v21.02 到新版本 openwrt-21.02.7
20.8 2023-05-21
20.8.1 Debian11:
- 更新到Rockchip sdk版本linux-5.10-gen-rkr4
- 为了流畅性,将桌面切换至LXDE
20.9 2023-04-26
20.9.1 FriendlyWrt:
- 更新 v22.03 到新版本 openwrt-22.03.4
- 更新 v21.02 到新版本 openwrt-21.02.6
20.10 2023-02-10
20.10.1 新增 Debian11
分为以下三个版本:
- Debian11 Core: 仅命令行
- Debian11 Minimal: LXDE桌面,精简版
- Debian11 Desktop: LXDE桌面,完整版
20.11 2023-01-09
20.11.1 FriendlyCore更新说明:
- 优化了开机服务
20.12 2022-12-04
20.12.1 FriendlyWrt:
- 修正存储空间某些情况下无法扩展的问题
- 加强eMMC刷机工具的刷机稳定性
20.13 2022-09-06
20.13.1 FriendlyWrt更新说明:
- 提升了NanoPi-R4SE的eMMC读取性能
- 增加Fullcone NAT支持 (默认开启)
- 版本升级到 22.03.0 正式版
- 修复NanoPC-T4在FriendlyWrt下的eMMC稳定性问题
20.14 2022-08-19
20.14.1 Lubuntu/Android8/FriendlyDesktop更新说明:
- 增加7寸屏HD703E的支持
- 修正FriendlyDesktop eMMC启动问题
20.14.2 Buildroot更新说明:
- 修正在Som-RK3399下未自动加载WiFi模块的问题
20.15 2022-08-03
20.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版本一致
20.16 2022-07-27
20.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
20.17 2022-07-04
20.17.1 Debian 10(buster) Desktop (首次发布)
- 桌面环境采用 LXDE, 多种主题可选, 简洁美观, 占用资源少
- 提供基于 Mali GPU 的 OpenGL 支持
- 支持Rockhip MPP视频硬编和硬解码
- 预装基于mpv的Kodi, SMPlayer播放器, 支持4K视频硬解码
- 预装Chromium浏览器, 支持vpu/gpu硬件加速 (视频硬解限h264/mp4格式)
- 支持安装Plex Server, wps等应用, 玩法丰富
20.18 2021-12-02
- 修正某些sd卡会导致reboot命令和看门狗无法正常工作的问题 (更新了uboot v2017.09)
20.19 2021-10-29
20.19.1 FriendlyWrt更新说明:
- FriendlyWrt更新至官方稳定版本 21.02.1,特性与19.07.5基本保持一致,支持docker、usb wifi等
20.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会出错的问题
20.20 2021-08-31
20.20.1 FriendlyWrt更新说明:
- FriendlyWrt的内核更新到 5.10.60
- 新增一款高速5G USB WiFi的支持,网卡型号为 Comfast CF-WU782AC V2,芯片型号为 MediaTek MT7662
- 改进了USB WiFi的兼容性
- 改进了PWM风扇的支持,风扇由内核驱动控制,支持温控(详情请在R4S的WiKi页面搜索 PWM风扇)
- 改进了首次启动的稳定性 (之前的版本,首次启动时,某些情况下会出现bpfilter错误)
20.21 2021-03-11
20.21.1 FriendlyWrt更新说明:
- FriendlyWrt内核更新到5.10
20.22 2020-12-24
20.22.1 FriendlyWrt更新说明:
- FriendlyWrt更新至官方稳定版本 19.07.5
20.23 2020-12-17
20.23.1 FriendlyWrt更新说明:
20.24 2020-12-17
20.24.1 FriendlyWrt更新说明:
1) FriendlyWrt提供两个版本,使用4.19内核与5.4内核,其中5.4用于R4S,其他型号请使用4.19版本
2) 提高了软件包的兼容性,方便用 opkg 命令安装软件包
20.24.2 FriendlyCore/FriendlyDesktop更新说明:
更新wiringPi,支持更多引脚
20.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支持
20.26 2020-09-27
20.26.1 Android 10更新说明:
- 增加A/B(无缝)系统更新的支持
- 为演示新特性,此次发布的Rom,可检查到一个更新
20.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/ 目录权限某些情况下被修改成只读的问题
20.28 日期 2020-08-17
1) 修正 typc-c 烧写的稳定性和易用性,为每个系统的压缩包预置了AndroidTool以及配置文件,无需手动加载文件 (注:改变EMMC中的OS类型时,仍需先擦除Flash再烧写新的OS);
2) 修正 FriendlyWrt 串口无法登录的问题;
20.29 日期 2020-07-10
- Android 10 更新:
1) SOM-RK3399缺省启用HDMI IN音频输入与耳机口音频输出
2) 增加支持2个USB摄像头协同工作,Camera应用可切换前/后摄像头预览
3) 集成了浏览器Chrome和输入法Gboard
20.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更新如下:
增加自动隐藏导航栏的设置
20.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) 内核稳定性方面的优化
20.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界面现在可以配置标题,隐藏界面菜单与按钮
20.33 日期 2019-09-26
- FriendlyCore/FriendlyDesktop小修正:
修正 Qt5 demo在某些LCD下无法触摸的问题
20.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) 增加使能开机后自动加载蓝牙固件
20.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的支持
20.36 日期 2019-06-25
Linux(Ubuntu 16.04/18.04) 全面采用 OverlayFS,以增强文件系统的稳定性.
20.37 日期 2019-05-23
- Ubuntu 18.04(FriendlyCore, FriendlyDesktop)更新:
1) 修正 Pulseaudio 服务没法启动的问题
2) 修正 Bluetooth 服务的问题
20.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)
20.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摄像头的稳定性问题
20.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设置,默认关闭自动休眠
20.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会有较大幅度的性能提升
20.42 日期 2018-09-21
- 增加一款eDP屏的支持
- Linux启用了PCI-E转Sata 功能 (AHCI SATA support)
- Linux下的SquashFS启用了LZO/XZ/ZSTD压缩支持
20.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
20.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
20.45 2018-08-02
- 增加可以直接从SD卡启动的FriendlyCore和Lubuntu固件
20.46 2018-07-28
- 修正FriendlyCore中的一处可能会影响CPU降频的问题
20.47 2018-07-27
- Android增加UART4支持并集成了串口demo,内核增加常见USB串口支持
20.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备份与还原功能
20.49 2018-06-20
- Android 支持HDMI与LCD屏幕旋转
- Android 增加 摇控器支持
- Lubuntu 内核默认启用 UART4,应用程序可通过设备名 ttyS4 访问
- 改进了 HDMI 与 eDP屏的用户体验