NanoPC-T4
Contents
- 1 Introduction
- 2 Hardware Spec
- 3 Software Features
- 4 Diagram, Layout and Dimension
- 5 Get Started
- 6 Access hardware
- 7 Work with FriendlyDesktop=
- 7.1 Account & Password
- 7.2 WiFi Connection
- 7.3 HDMI/DP LCD Resolution
- 7.4 Adjust HDMI overscan
- 7.5 eDP LCD Display Rotation
- 7.6 Test OpenGL ES
- 7.7 4K Video Playing
- 7.8 Work with USB Camera
- 7.9 File Transfer with Bluetooth
- 7.10 Install OpenCV
- 7.11 Develop Qt Applications
- 7.12 WiringPi and Python Wrapper
- 7.13 Switch audio default output device
- 7.14 Play RTSP video stream (or IP Camera)
- 7.15 Chromium web browser
- 7.16 Screen saver and auto sleep related settings
- 7.17 Install Scratch
- 7.18 Install Arduino IDE
- 7.19 Start the program automatically at startup
- 7.20 Login to the desktop as the root user
- 8 Work with FriendlyCore
- 8.1 Introduction
- 8.2 System Login
- 8.3 Configure System with npi-config
- 8.4 Develop Qt Application
- 8.5 Setup Program to AutoRun
- 8.6 Extend TF Card's Section
- 8.7 Transfer files using Bluetooth
- 8.8 WiFi
- 8.9 Ethernet Connection
- 8.10 WiringPi and Python Wrapper
- 8.11 Custom welcome message
- 8.12 Modify timezone
- 8.13 Select the system default audio device
- 8.14 Change the behavior of the PWM fan
- 9 Work with Lubuntu
- 9.1 Introduction to Lubuntu
- 9.2 Lubuntu Default User Account
- 9.3 OpenGL ES
- 9.4 Video Playing with Hardware Decoding
- 9.5 eDP LCD Rotation
- 9.6 Connect USB Camera
- 9.7 5G WiFi
- 9.8 Develop Qt Application
- 9.9 Chromium web browser
- 9.10 Cancel automatic login
- 9.11 Screen saver and auto sleep related settings
- 9.12 Select the system default audio device
- 9.13 Connect NVME SSD High Speed Hard Disk to T4
- 10 Work with Android7.1
- 10.1 Connect MIPI Camera to NanoPC-T4
- 10.2 Set HDMI Display
- 10.3 Rotate Display
- 10.4 Android7 hardware access
- 10.5 Build Openwrt/Friendlywrt
- 10.6 Build Buildroot
- 10.7 Build Other Linux
- 10.8 Build the code using scripts
- 10.9 Building AOSP from source
- 11 Using On-Board Hardware Resources
- 12 More OS Support
- 13 Link to Rockchip Resources
- 14 Schematic, PCB CAD File
- 15 Update Log
1 Introduction
- The NanoPC-T4 is by far the smallest RK3399 based high-performance ARM board with popular ports and interfaces. Its software is fully open source. It is as small as 100 x 64 mm. It has 4GB LPDDR3 RAM, 16GB eMMC flash, onboard 2.4G & 5G dual-band WiFi module and a full standard M.2 PCIe interface which supports an NVME SSD high-speed hard drive. The NanoPC-T4 supports GPU and VPU acceleration and works with Android 7.1 and Lubuntu Desktop.
- The NanoPC-T4 has a MIPI-CSI dual camera interface, a MIPI-DSI and an eDP display interfaces, and an HDMI 2.0 interface. It has Type-C/DP, USB 3.0, USB2.0, MicroSD, Gbps Ethernet port, 3.5mm audio jack, infrared receiver, AD input, serial debug interface and a 40Pin RPi compatible connector.
- The RK3399 SoC has an internal Mali-T860 GPU which has powerful capabilities of processing 3D and HD H.265/H2.64 video streams. It supports dual camera inputs, dual ISP interface capable of doing image processing up to 13MPix/s. The NanoPC-T4 is a perfect platform for AI and deep learning applications. It can be widely used in advertisement machines, game machines, video conference applications, surveillance systems, clusters, VR/AR applications, machine vision applications and etc.
2 Hardware Spec
- SoC: Rockchip RK3399
- CPU: big.LITTLE,Dual-Core Cortex-A72(up to 2.0GHz) + Quad-Core Cortex-A53(up to 1.5GHz)
- GPU: Mali-T864 GPU,supports OpenGL ES1.1/2.0/3.0/3.1, OpenVG1.1, OpenCL, DX11, and AFBC
- VPU: 4K VP9 and 4K 10bits H265/H264 60fps decoding, Dual VOP, etc
- PMU: RK808-D PMIC, cooperated with independent DC/DC, enabling DVFS, solfware power-down, RTC wake-up, system sleep mode
- RAM: Dual-Channel 4GB LPDDR3-1866
- Flash: 16GB eMMC 5.1 Flash
- Ethernet: Native Gigabit Ethernet
- Wi-Fi/BT: 802.11a/b/g/n/ac, Bluetooth 4.1, Wi-Fi and Bluetooth combo module, dual antenna interface
- Video Input: one or two 4-Lane MIPI-CSI, dual ISP, up to 13MPix/s,supports simultaneous input of dual camera data
- Video output
- HDMI: HDMI 2.0a, supports 4K@60Hz,HDCP 1.4/2.2
- DP on Type-C: DisplayPort 1.2 Alt Mode on USB Type-C
- LCD Interface: one eDP 1.3(4-Lane,10.8Gbps), one or two 4-Lane MIPI-DSI
- Audio Out: 3.5mm Dual channel headphone jack, or HDMI
- Audio In: Onboard microphone
- USB 2.0: 2 independent native USB 2.0 Host A interfaces
- USB 3.0: 1 native USB 3.0 Host A type interface
- USB Type-C: Supports USB3.0 Type-C and DisplayPort 1.2 Alt Mode on USB Type-C
- PCIe: One M.2 M-Key PCIe x4 socket, compatible with PCIe 2.1, Dual operation mode; Onboard M3 PCB nut for mounting M.2 2280 module
- microSD Slot x 1
- 40Pin GPIO Extension ports:
- 3 X 3V/1.8V I2C, up to 1 x 3V UART, 1 X 3V SPI, 1 x SPDIF_TX, up to 8 x 3V GPIOs
- 1 x 1.8V I2S, 3 x 1.8V GPIOs
- ADC: 3 x 1.8V ADC inputs, 5 Pin 2.54mm header
- Debug: one Debug UART, 4 Pin 2.54mm header, 3V level, 1500000bps
- Keys: PowerKey, Reset, MASKROM(BOOT), Recovery
- LED: 1 x power LED and 1 x GPIO Controlled LED
- IR reciver: Onboard IR reciver, Acceptes 38KHz carrier frequency
- RTC Battery: 2 Pin 1.27/1.25mm RTC battery input connector
- Cooling: two 2.5mm PCB nuts for mounting heat sink; 3 Pin 12V cooling fan interface with PWM
- Power supply: DC 12V/2A
- PCB: Ten Layer, 100 mm x 64 mm
- Ambient Operating Temperature: 0℃ to 80℃
3 Software Features
4 Diagram, Layout and Dimension
4.1 Layout
- 40 Pin GPIO Pin Spec
Pin# Assignment Pin# Assignment 1 VCC3V3_SYS 2 VCC5V0_SYS 3 I2C2_SDA(3V) 4 VCC5V0_SYS 5 I2C2_SCL(3V) 6 GND 7 GPIO1_A0(3V) 8 GPIO4_C1/I2C3_SCL(3V) 9 GND 10 GPIO4_C0/I2C3_SDA(3V) 11 GPIO1_A1(3V) 12 GPIO1_C2(3V) 13 GPIO1_A3(3V) 14 GND 15 GPIO1_A4(3V) 16 GPIO1_C6(3V) 17 VCC3V3_SYS 18 GPIO1_C7(3V) 19 SPI1_TXD/UART4_TX(3V) 20 GND 21 SPI1_RXD/UART4_RX(3V) 22 GPIO1_D0(3V) 23 SPI1_CLK(3V) 24 SPI1_CSn0(3V) 25 GND 26 GPIO4_C5/SPDIF_TX(3V) 27 I2C2_SDA(1.8V) 28 I2C2_SCL(1.8V) 29 I2S1_LRCK_RX(1.8V) 30 GND 31 I2S1_LRCK_TX(1.8V) 32 I2S_CLK(1.8V) 33 I2S1_SCLK(1.8V) 34 GND 35 I2S1_SDI0(1.8V) 36 I2S1_SDO0(1.8V) 37 GPIO3_D4(1.8V) 38 GPIO3_D5(1.8V) 39 GND 40 GPIO3_D6(1.8V)
- eDP Interface Pin Spec
- Connector P/N: I-PEX-20455-030E
Pin# Assignment Description 1 GND Signal ground 2 EDP_TX3N eDP data lane 3 negative output 3 EDP_TX3P eDP data lane 3 positive output 4 GND Signal ground 5 EDP_TX2N eDP data lane 2 negative output 6 EDP_TX2P eDP data lane 2 positive output 7 GND Signal ground 8 EDP_TX1N eDP data lane 1 negative output 9 EDP_TX1P eDP data lane 1 positive output 10 GND Signal ground 11 EDP_TX0N eDP data lane 0 negative output 12 EDP_TX0P eDP data lane 0 positive output 13 GND Signal ground 14 EDPAUXP eDP CH-AUX positive differential output 15 EDPAUXN eDP CH-AUX negative differential output 16 GND Signal ground 17 VCC3V3_SYS 3.3V Power output for logic 18 VCC3V3_SYS 3.3V Power output for logic 19 I2C4_SDA 3V I2C data signal, Connect to touch panel 20 I2C4_SCL 3V I2C clock signal, Connect to touch panel 21 GPIO1_C4_TP_INT 3V interrupt input, Connect to the interrupt output of touch panel 22 GPIO1_B5_TP_RST 3V output for reseting touch panel, Connect to the reset input of touch panel 23 PWM0_BL 3V PWM output, for LCD backlight dimming. pull up to VCC3V3_SYS on LCD side. 24 GPIO4_D5_LCD_BL_EN 3V output for turning on/off the LCD backlight 25 GND Backlight ground 26 GND Backlight ground 27 GND Backlight ground 28 VCC12V0_SYS 12V Power output for Backlight Power 29 VCC12V0_SYS 12V Power output for Backlight Power 30 VCC12V0_SYS 12V Power output for Backlight Power
- MIPI-DSI Interface Pin Spec
- 0.5mm FPC connector
Pin# Assignment Description 1, 2, 3 VCC5V0_SYS 5V power output 4 GND Return current path 5 I2C4_SDA 3V I2C data signal, Connect to touch panel 6 I2C4_SCL 3V I2C clock signal, Connect to touch panel 7 GND Return current path 8 GPIO1_C4_TP_INT 3V interrupt input, Connect to the interrupt output of touch panel 9 GND Return current path 10 PWM0_BL 3V PWM output, for LCD backlight dimming 11 GND Return current path 12 GPIO4_D5_LCD_BL_EN 3V output for turning on/off the LCD backlight 13 GPIO4_D6_LCD_RST_H 3V output for reseting the LCD module 14 GPIO1_B5_TP_RST 3V output for reseting touch panel, Connect to the reset input of touch panel 15 GND Return current path 16 MIPI_TX0_D3N MIPI DSI negative differential data line transceiver output 17 MIPI_TX0_D3P MIPI DSI positive differential data line transceiver output 18 GND Return current path 19 MIPI_TX0_D2N MIPI DSI negative differential data line transceiver output 20 MIPI_TX0_D2P MIPI DSI positive differential data line transceiver output 21 GND Return current path 22 MIPI_TX0_D1N MIPI DSI negative differential data line transceiver output 23 MIPI_TX0_D1P MIPI DSI positive differential data line transceiver output 24 GND Return current path 25 MIPI_TX0_D0N MIPI DSI negative differential data line transceiver output 26 MIPI_TX0_D0P MIPI DSI positive differential data line transceiver output 27 GND Return current path 28 MIPI_TX0_CLKN MIPI DSI negative differential clock line transceiver output 29 MIPI_TX0_CLKP MIPI DSI positive differential clock line transceiver output 30 GND Return current path
- MIPI-CSI Interface Pin Spec
- 0.5mm FPC Connector
- MIPI-CSI2 can be configured to MIPI-DSI
Pin# MIPI-CSI1 MIPI-CSI2 Description 1 VCC5V0_SYS VCC5V0_SYS 5V Power ouput 2 VCC5V0_SYS VCC5V0_SYS 5V Power ouput 3 GND GND Return current path 4 VCC_CSI_AF2.8V VCC_CSI_AF2.8V 2.8V Power for VCM 5 VCC_CSI_1.2V VCC_CSI_1.2V 1.2V Power for image sensor core circuit 6 VCC1V8_CAM VCC1V8_CAM 1.8V power for I/O circuit 7 VCC_CSI_2.8V VCC_CSI_2.8V 2.8V power for image sensor analog circuit 8 VCC_CSI_1.0V VCC_CSI_1.0V 1.0V Power for image sensor core circuit 9 I2C1_SCL I2C2_SCL 1.8V I2C clock signal 10 I2C1_SDA I2C2_SDA 1.8V I2C data signal 11 MIPI_CSI0_RST MIPI_CSI1_RST reset camera module 12 MIPI_CSI0_PWN MIPI_CSI1_PWN Power down camera module 13 GND GND Return current path 14 GPIO2_B3_CIF_CLKOUTA GPIO2_B3_CIF_CLKOUTA MCLK to camera module 15 GND GND Return current path 16 MIPI_RX0_D3P MIPI_TX1/RX1_D3P MIPI CSI positive differential data line transceiver output 17 MIPI_RX0_D3N MIPI_TX1/RX1_D3N MIPI CSI negative differential data line transceiver output 18 GND GND Return current path 19 MIPI_RX0_D2P MIPI_TX1/RX1_D2P MIPI CSI positive differential data line transceiver output 20 MIPI_RX0_D2N MIPI_TX1/RX1_D2N MIPI CSI negative differential data line transceiver output 21 GND GND Return current path 22 MIPI_RX0_D1P MIPI_TX1/RX1_D1P MIPI CSI positive differential data line transceiver output 23 MIPI_RX0_D1N MIPI_TX1/RX1_D1N MIPI CSI negative differential data line transceiver output 24 GND GND Return current path 25 MIPI_RX0_CLKP MIPI_TX1/RX1_CLKP MIPI CSI positive differential clock line transceiver output 26 MIPI_RX0_CLKN MIPI_TX1/RX1_CLKN MIPI CSI negative differential clock line transceiver output 27 GND GND Return current path 28 MIPI_RX0_D0P MIPI_TX1/RX1_D0P MIPI CSI positive differential data line transceiver output 29 MIPI_RX0_D0N MIPI_TX1/RX1_D0N MIPI CSI negative differential data line transceiver output 30 GND GND Return current path
- M.2 PCIe Pin Spec
- PCIe Gen 2.1 x4
- M.2 Key M Connector for Socket 2/Socket 3 PCIe-based Module, such as PCIe SSD
- Connector P/N: MDT-420-M-01002
Pin# Assignment Description Pin# Assignment Description 1 GND Return current path 2 VCC3V3_SYS 3.3V Power output 3 GND Return current path 4 VCC3V3_SYS 3.3V Power output 5 PCIE_RX3_N PCIe differential data input signals 6 N/C no connection 7 PCIE_RX3_P PCIe differential data input signals 8 N/C no connection 9 GND Return current path 10 N/C no connection 11 PCIE_TX3N PCIe differential data output signals 12 VCC3V3_SYS 3.3V Power output 13 PCIE_TX3P PCIe differential data output signals 14 VCC3V3_SYS 3.3V Power output 15 GND Return current path 16 VCC3V3_SYS 3.3V Power output 17 PCIE_RX2_N PCIe differential data input signals 18 VCC3V3_SYS 3.3V Power output 19 PCIE_RX2_P PCIe differential data input signals 20 N/C no connection 21 GND Return current path 22 N/C no connection 23 PCIE_TX2N PCIe differential data output signals 24 N/C no connection 25 PCIE_TX2P PCIe differential data output signals 26 N/C no connection 27 GND Return current path 28 N/C no connection 29 PCIE_RX1_N PCIe differential data input signals 30 N/C no connection 31 PCIE_RX1_P PCIe differential data input signals 32 N/C no connection 33 GND Return current path 34 N/C no connection 35 PCIE_TX1N PCIe differential data output signals 36 N/C no connection 37 PCIE_TX1P PCIe differential data output signals 38 DEVSLP/NC internal pull up to VCC3V3_SYS with 10K 39 GND Return current path 40 I2C2_SCL 1.8V I2C clock signal 41 PCIE_RX0_N PCIe differential data input signals 42 I2C2_SDA 1.8V I2C data signal 43 PCIE_RX0_P PCIe differential data input signals 44 GPIO2_A2_PCIE_ALERT# 1.8V GPIO signal 45 GND Return current path 46 N/C no connection 47 PCIE_TX0N PCIe differential data output signals 48 N/C no connection 49 PCIE_TX0P PCIe differential data output signals 50 GPIO2_A4_PCIE_RESET# 1.8V GPIO signal 51 GND Return current path 52 CLKREQ#/NC internal pull down to GND with 0R 53 PCIE_REF_CLKN differential reference clock out for PCIe peripheral 54 GPIO2_A3_PCIE_WAKE# 1.8V GPIO signal 55 PCIE_REF_CLKP differential reference clock out for PCIe peripheral 56 N/C no connection 57 GND Return current path 58 N/C no connection 59 Connector Key Connector Key 60 Connector Key Connector Key 60 Connector Key Connector Key 61 Connector Key Connector Key 62 Connector Key Connector Key 63 Connector Key Connector Key 64 Connector Key Connector Key 65 Connector Key Connector Key 66 Connector Key Connector Key 67 N/C no connection 68 RTC_CLKO_SOC 1.8V 32.768KHz clock output 69 N/C no connection 70 VCC3V3_SYS 3.3V Power output 71 GND Return current path 72 VCC3V3_SYS 3.3V Power output 73 GND Return current path 74 VCC3V3_SYS 3.3V Power output 75 GND Return current path
- ADC interface Pin Spec
- ADC input rang : 0~1.8V
Pin# Assignment 1 GND 2 VCC_1V8 3 ADC_IN0 4 ADC_IN2 5 ADC_IN3
- Cooling Fan interface Pin Spec
- Connector P/N: BM03B-GHS-TBT
Pin# Assignment Description 1 GND 0V 2 12V 12V output ,controlled by GPIO4_C6/PWM1 3 GPIO2_A6_FAN_TACH connect to tachometer output signal , or float
- Debug UART Pin Spec
- 3V level signals, 1500000bps
Pin# Assignment Description 1 GND 0V 2 VCC5V0_SYS 5V power output 3 UART2DBG_TX output 4 UART2DBG_RX intput
- Power Jack
- Power Key
- Plug in 12V power at power jack, then press the Power Key ( > 0.5s ) to boot NanoPC-T4.
- USB Port
- USB Type-C port has 2A overcurrent protection.
- USB 3.0 port has 2A overcurrent protection.
- Two USB 2.0 host port share 2A overcurrent protection.
- BOOT Key
- Press BOOT key to prevent the board from eMMC booting, making the board enter MASKROM mode.
- RTC
- RTC backup current is 27uA.
- Connector P/N: Molex 53398-0271
- Notes
- The Power Jack is the only power input port. All power pins at other ports are output.
- How to make T4 start automatically when power is plugged in
- For more details refer to the document: NanoPC-T4-1802-Schematic.pdf
4.2 Board Dimension
- For more details refer to the CAD document: NanoPC-T4_1802_Drawing(dxf).zip
5 Get Started
5.1 Essentials You Need
Before starting to use your NanoPC-T4 get the following items ready
- NanoPC-T4
- Type-C cable
- TF Card: Class 10 or Above, minimum 8GB SDHC
- USB to serial adapter(optinal, for debugging or access from PC host)
- A DC 12V/2A power is a must
- HDMI monitor or LCD
- USB keyboard, mouse and possible a USB hub(or a TTL to serial board)
- A host computer running Ubuntu 18.04 64-bit system
6 Access hardware
6.1 Access Serial Interface
For now only UART4 is available for users:
Serial Interface Serial Device UART0 Used by Bluetooth UART1 Used by Gbps Ethernet UART2 Used by Serial Debug Port UART3 Used by Gbps Ethernet UART4 Available, device name is /dev/ttyS4 (note: this is only applicable for ROM released after 20180618)
6.2 Flash Image to eMMC
NanoPC-T4 there are three ways to flash an image to eMMC:
- Use EFlasher to make a bootable SD card and flash an image to eMMC with this card
- Use a Windows' utility "AndroidTool_Release_v2.54" provided by Rockchip to flash an image to eMMC with a Type-C cable
- Use a Linux utility Linux_Upgrade_Tool_1.27 provided by Rockchip to flash an image to eMMC with a Type-C cable
If you are not familiar with the two utilities provided by Rockchip or you don't have a Type-C cable we suggest you try the first method.
6.2.1 Download Image and Utilities
Visit download link to download image files and utilities.
Android OS | |
rk3399-eflasher-android10-YYYYMMDD.img.zip | Android10 image file |
rk3399-eflasher-android8-YYYYMMDD.img.zip | Android8.1 image file |
rk3399-eflasher-android7-YYYYMMDD.img.zip | Android7.1.2 image file |
Linux OS | |
rk3399-eflasher-debian-bullseye-core-4.19-arm64-YYYYMMDD.img.gz | Debian 11(Bullseye) Core No desktop environment, command line only Kernel version 4.19.y |
rk3399-eflasher-debian-buster-desktop-arm64-YYYYMMDD.img.gz | Debian 10(buster) Desktop, Uses LXDE as default desktop, Supports hardware acceleration, Kernel version 4.19.y |
rk3399-eflasher-buildroot-4.19-arm64-YYYYMMDD.img.gz | Buildroot image file with Qt5-wayland (base on Rockchip Linux SDK) |
rk3399-eflasher-friendlydesktop-bionic-4.4-arm64-YYYYMMDD.img.zip | 64-bit FriendlyDesktop image file based on Ubuntu desktop 18.04 64bit |
rk3399-eflasher-friendlycore-focal-4.19-arm64-YYYYMMDD.img.gz | 64-bit FriendlyCore image file(Qt 5.10.0) based on Ubuntu core 20.04 64bit |
rk3399-eflasher-friendlycore-bionic-4.4-arm64-YYYYMMDD.img.gz | 64-bit FriendlyCore image file(Qt 5.10.0) based on Ubuntu core 18.04 64bit |
rk3399-eflasher-lubuntu-desktop-xenial-4.4-armhf-YYYYMMDD.img.zip | Lubuntu Desktop(with Qt 5.10.0) |
Linux Lite OS | |
rk3399-eflasher-friendlycore-lite-focal-5.10-arm64-20211029.img.zip | 64-bit FriendlyCore Lite image file based on Ubuntu core 20.04 64bit, kernel version 5.15.y |
rk3399-eflasher-friendlycore-lite-focal-4.19-arm64-20211029.img.zip | 64-bit FriendlyCore Lite image file based on Ubuntu core 20.04 64bit, kernel version 4.19.y |
FriendlyWrt | |
rk3399-eflasher-friendlywrt-21.02-YYYYMMDD.img.gz | FriendlyWrt image file, based on OpenWrt 21.02, kernel version 5.15.y |
rk3399-eflasher-friendlywrt-21.02-docker-YYYYMMDD.img.gz | FriendlyWrt image file,based on OpenWrt 21.02, Pre-installed Docker,kernel version 5.15.y |
rk3399-eflasher-friendlywrt-22.03-YYYYMMDD.img.gz | FriendlyWrt image file,based on OpenWrt 22.03,kernel version 5.15.y |
rk3399-eflasher-friendlywrt-22.03-docker-YYYYMMDD.img.gz | FriendlyWrt image file,based on OpenWrt 22.03, Pre-installed Docker,kernel version 5.15.y |
rk3399-eflasher-friendlywrt-kernel4-YYYYMMDD.img.zip | FriendlyWrt image file, based on OpenWrt 21.02, kernel version 4.19.y |
Flash Utility: | |
win32diskimager.rar | Windows utility. Under Linux users can use "dd" |
6.2.2 Flash Image to eMMC with eflasher and SD card
- Get an 8G SDHC card and backup its data if necessary;
- Download and extract the rk3399-eflasher-OSNAME-YYYYMMDD.img.zip and win32diskimager;
- Run the win32diskimager utility under Windows as administrator. On the utility's main window select your SD card's drive, the wanted image file EFlasher and click on "write" to start flashing the SD card. Under Linux run "dd" to flash the rk3399-eflasher-OSNAME-YYYYMMDD.img file to your SD card;
- Take out the SD and insert it to NanoPC-T4's microSD card slot;
- Press and hold NanoPC-T4's Power button and wait until the PWR LED is on which indicates the system is booted from the SD card and the EFlasher utility will be automatically launched. You can work with the EFlasher in multiple ways:
1: Connect an LCD or HDMI monitor to your board and work with EFlasher's GUI. If the LCD doesn't support touch functions you need to connect a USB mouse to your board and proceed;
2: Connect your board to a LAN, login onto the board with SSH and type "eflasher" in a commandline utility and proceed with prompts;(Note: when you login with SSH the username is root and the password is fa. Your board's IP address can be found by checking the router's system)
3: Login onto your board via a serial terminal and type "eflasher" to proceed;
4: Connect a lcd2usb to NanoPC-T4, press the K1 button on the LCD2USB board to select your wanted OS and press the K2 button to confirm. The installation process will be shown on lcd2usb;
- After installation is done press the Power button to turn off the board and take out the SD card from NanoPC-T4;
- Press and hold the Power button to turn on your board and it will be booted from eMMC;
Template:RK3399-BootFromSDCard/
7 Work with FriendlyDesktop=
FriendlyDesktop is a light-weighted Ubuntu desktop system. It is based on LXDE and has the following features:
Latest Version - Based on Ubuntu 18.04 64
Various Development Utilities - It is compatible with FriendlyCore and has integrated an optimized Qt5.10, QtCreator and Arduino IDE.
Light-weighted - it consumes relatively less CPU resources than a common desktop system. When a system's RAM is sufficient it can achieve much better performance.
Less Power Consumption - it consumes relatively less power or resources than a common desktop system to achieve the same performance.
Compact and Neat - its desktop is based on GTK+ 2 and it supports multiple languages.
Easy to Use - its GUI looks similar to MS Windows'.
Customizable - Users can customize LXDE's GUI.
Compatible - it is compatible with freedesktop.org.
FriendlyELEC has optimized support for Mali GPU and VPU in FriendlyDesktop for RK3399 and integrated drivers for X.org. FriendlyDesktop supports Hardware Cursor, OpenGL graphic acceleration, 4K video playing with hardware decoding.
7.1 Account & Password
Regular Account:
User Name: pi Password: pi
Root:
User Name: root Password: fa
7.2 WiFi Connection
Click on the icon on the top right in the FriendlyDesktop's main window, select your wanted WiFi hotspot and proceed with prompts
7.3 HDMI/DP LCD Resolution
Open the system's menu and go to Perferences -> Monitor Settings to customize your settings.
Recommended resolution: 1920x1080@60Hz
7.4 Adjust HDMI overscan
Open the command line terminal and enter the command to operate, Note:
1) You need to login to the desktop;
2) If you are using ssh terminal, please use the same username as the desktop login. The default is pi. You cannot use the root user. you also need to assign the DISPLAY variable:
export DISPLAY=:0.0
7.4.1 Query which resolutions the display supports
xrandr -q
7.4.2 Set resolution
For example set to 1920X1080@60Hz:
xrandr --output HDMI-1 --mode 1920x1080 --refresh 60
7.4.3 Adjust the HDMI overscan
For example, the transformation scaling horizontal coordinates by 0.8, vertical coordinates by 1.04 and moving the screen by 35 pixels right and 19 pixels down:
xrandr --output HDMI-1 --transform 0.80,0,-35,0,1.04,-19,0,0,1
7.4.4 Automatic adjustment at boot
Edit ~/.config/autostart/lxrandr-autostart.desktop,Write the full xrandr command to the key at the beginning of "Exec= as shown below:
[Desktop Entry] Type=Application Name=LXRandR autostart Comment=Start xrandr with settings done in LXRandR Exec=sh -c 'xrandr --output HDMI-1 --mode 1920x1080 --refresh 50 --transform 1.04,0,-35,0,1.05,-30,0,0,1' OnlyShowIn=LXDE
7.5 eDP LCD Display Rotation
If you want to rotate an eDP LCD's display you can do it by commanding "xrotate.sh" to rotate its display to 90/180/270 degrees. You can rotate display clockwise by 90 degrees by running the following command as root. This command calls lightdm to make your change effective immediately:
sudo xrotate.sh -m CW -r
For more details about its options you can run "xrotate -h".
Note: this command doesn't support HDMI display's rotation. If you want to rorate an HDMI's display you need to refer to X11's tech documents and make changes in "/etc/X11/xorg.conf".
Note: when you play a video with hardware decoding your player's display window doesn't rotate with your LCD's display
7.6 Test OpenGL ES
You can test it by clicking on the Terminator icon to start a commandline utility in the System Tools and run the following commands:
taskset -c 4-5 glmark2-es2
7.7 4K Video Playing
7.7.1 Play with Qt Player with Hardware Decoding
FriendlyDesktop has integrated a Qt5-VideoPlayer utility. This utility has support for Rockchip's gstreamer plug-in and supports 4K video playing with hardware decoding. You can start it by following the steps below:
On FriendlyDesktop's main window open "Sound & Video" and click on "Qt5-VideoPlayer".
On the player's main window click on the bottom left's "Open" button to load a video file and double-click on its name on the file list to start video playing. Here is how it looks like. You can set the display window to full screen and adjust the volume:
Qt5-VideoPlayer source code: https://github.com/friendlyarm/rk-player-qt
7.7.2 Play with Linux Command
You can play it by running the following command in a commandline utility:
gst-player.sh
By default its voice will be output to audio jack. You can locate this script by commanding "which gst-player.sh". You can customize its behavior by making changes in this script.
7.8 Work with USB Camera
Insert the USB camera (such as Logitech C270/C920) into the development board. Double click the "USB Camera" icon on desktop will pop up the luvcview gui (need to use the 2019/05/11+ version firmware).
the luvcview tool is an open source software that you can compile yourself:
git clone https://github.com/ksv1986/luvcview cd luvcview make
View the usage of luvcview:
./luvcview -h
Parameter Description:
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
To preview USB camera (640x360@30fps), you can use the following command:
./luvcview -d /dev/video8 -i 30 -s 640x360
As you can see from the output of luvcview, hardware acceleration has been turned on:
pi@NanoPC-T4:/etc/xrdp$ luvcview -d /dev/video8 -i 30 -s 640x360 luvcview version 0.2.1 interval: 30 fps Hardware acceleration available video /dev/video8
7.9 File Transfer with Bluetooth
Click on the "Preferences" in the main window's menu to start Bluetooth Manager and click on "Search" to search surrounding Bluetooth devices. Click on your wanted device, pair the device with your board and you will be able to do file transfer, here is how it looks like:
7.10 Install OpenCV
OpenCV has been pre-installed in FriendlyCore/FriendlyDesktop (Version after 201905) and does not require manual installation.
Please refre this link: https://github.com/friendlyarm/install-opencv-on-friendlycore/blob/rk3399/README.md
7.11 Develop Qt Applications
FriendlyDesktop has a Qt 5.10.0 which supports RK3399's OpenGL ES and Gstreamer 1.0 hardware acceleration and a QtCreator IDE which is ready and can be used to compile and run applications. Here is how it looks like:
When running the Qt app, you need to specify the platform parameter to xcb as follows:
./HelloQt --platform xcb
7.12 WiringPi and Python Wrapper
7.13 Switch audio default output device
7.13.1 View the current default output device
On the terminal of the non-root user, enter the following command:
pactl info -vvv
The information displayed contains the following, indicating that the current audio output is directed to the headset:
Default Sink: alsa_output.platform-rt5651-sound.stereo-fallback
The information displayed contains the following, indicating that the current audio output is to HDMI:
Default Sink: alsa_output.platform-hdmi-sound.stereo-fallback
7.13.2 Set headphone jack as the default output device
On the terminal of the non-root user, enter the following command:
pactl set-default-sink alsa_output.platform-rt5651-sound.stereo-fallback
Set default volume to 20%:
pactl -- set-sink-volume alsa_output.platform-rt5651-sound.stereo-fallback 20%
7.13.3 Set hdmi as the default output device
On the terminal of the non-root user, enter the following command:
pactl set-default-sink alsa_output.platform-hdmi-sound.stereo-fallback
7.13.4 View settings have taken effect
cat /var/lib/pulse/*-default-sink
7.13.5 Temporary switching during playback
This method is only valid for the current playback process:
Open the menu "Sound & Video" -> "PulseAudio Volume Control", click the "Built-in Audio Stereo" button on the interface to switch between different output devices, such as switching between HDMI and headphone jack.
7.14 Play RTSP video stream (or IP Camera)
Open a command line terminal and enter the following command:
gst-launch-1.0 rtspsrc location="rtsp://admin:12345@192.168.1.120:554/live/main" ! rtph264depay ! decodebin ! rkximagesink
Change the address after rtsp:// to the real address.
7.15 Chromium web browser
Chromium web browser has enabled hardware acceleration by default, supports WebGL, and can view hardware acceleration details by entering the URL chrome://gpu, as shown below:
The screen saver configuration file is /etc/xdg/autostart/xset_command.desktop. The default factory settings are that the screen saver and DPMS are both closed. You can change the configuration by modifying this file.
7.17 Install Scratch
enter the following command:
sudo apt-get install scratch:arm64
7.18 Install Arduino IDE
enter the following command:
sudo apt-get install arduino:arm64
7.19 Start the program automatically at startup
Put the desktop file in the ~/.config/autostart/ directory, for example:
cp /usr/share/applications/org.qt-project.qtcreator.desktop ~/.config/autostart/
7.20 Login to the desktop as the root user
Edit the /root/.profile file:
sudo vim /root/.profile
Replace with the following:
if [ -n "$BASH_VERSION" ]; then if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi
Run the following command to modify the lightdm configuration file and change the automatically logged-in user name to root:
sudo sed -i 's/autologin-user=pi/autologin-user=root/g' /usr/share/lightdm/lightdm.conf.d/20-defaultsession.conf
Run the reboot command to restart:
sudo reboot
If you want to log in, the desktop icons and configuration are the same as the pi user, you can copy the relevant directory from the /home/pi directory:
sudo rm -rf /root/Desktop /root/Pictures /root/.config sudo cp -af /home/pi/Desktop /home/pi/Pictures /home/pi/.config /root/ sudo chown root:root /root/Desktop /root/Pictures /root/.config
8 Work with FriendlyCore
8.1 Introduction
FriendlyCore is a Ubuntu core based OS which doesn't have X Desktop. Its current version is 18.04
FriendlyCore targets enterprise users and is customized for industrial applications. FriendlyCore and Ubuntu base target different users. FriendlyCore has both a commandline utility and a two GUI utilities:
1)Qt 5.10.0 cuustomized for ROCKCHIP3399. It supports GPU and VPU acceleration and has modules like: QtQuick/QtWebEngine/QtMultimedia/WebGL and three display plug-ins:KMS, EGLFS and XCB;
2) Xorg system. It can run X11 applications and supports hardware acceleration;
FriendlyCore for RK3399 has the following features:
- supports FriendlyElec's 7"LCD with capacitive touch - HD702. If a board is connected to both an LCD and an HDMI monitor the LCD and the HDMI monitor can be set to display either differently or the same;
- supports Gstreamer 1.0 multi-media framework;
- supports hard encoding video playing with either commandline utility or Qt player;
- supports Qt5 WebGL;
- supports Qt5 VNC and runs a Qt application as a VNC Server allowing remote control;
- supports bluetooth. It has preinstalled bluez packages;
8.2 System Login
- If your board is connected to an HDMI monitor you need to use a USB mouse and keyboard.
- If you want to do kernel development you need to use a serial communication board, ie a PSU-ONECOM board, which will
You can use a USB to Serial on NanoPC-T4:
- FriendlyCore User Accounts:
Non-root User:
User Name: pi Password: pi
Root:
User Name: root Password: fa
The system is automatically logged in as "pi". You can do "sudo npi-config" to disable auto login.
- Update packages
$ sudo apt-get update
8.3 Configure System with npi-config
The npi-config is a commandline utility which can be used to initialize system configurations such as user password, system language, time zone, Hostname, SSH switch , Auto login and etc. Type the following command to run this utility.
$ sudo npi-config
Here is how npi-config's GUI looks like:
8.4 Develop Qt Application
The Qt 5.10.0 FriendlyELEC ported for RK3399 supports the following plug-ins:KMS, EGLFS and XCB. All these three plug-ins support OpenGL ES and GPU hardware acceleration but in different ways:
- KMS - it calls Linux kernel's DRM interface to display
- EGLFS - it calls OpenGL ES interface to display
- XCB - it runs on X11 server and is integrated in X11 windows system
Three plug-ins support different Qt features and here is a table:
Plug-in OpenGL ES QtWebEngine QtMultimedia Video Playing with Hardware Decoding Different Display KMS Yes No Yes No Yes EGLFS Yes No Yes No No XCB Yes Yes Yes Yes Yes
We recommend to use KMS or XCB.
FriendlyCore has four scripts for setting Qt environmental variables for users and here is a table:
Script Comment /usr/bin/setqt5env-kms set kms' environmental variables /usr/bin/setqt5env-eglfs set eglfs' environmental variables /usr/bin/setqt5env-xcb set xcb's environmental variables /usr/bin/setqt5env-nogui set environmental variables for a system without a Qt GUI
For instance, if you want to use KMS to display you can run the following commands:
. setqt5env-kms
./apps
(Note:there is a space between '.' and 's')
8.4.1 Setup Qt Development Envronment
FriendlyELEC developed two methods for RK3399 to cross-compile a Qt program:
- 1:Use Docker. For more details you can refer to github :http://github.com/friendlyarm/friendlyelec-ubuntu18-docker
- 2:Setup a local cross-compiler. You need to run a Ubuntu 18.04 64-bit OS and you can refer to :How to Build and Install Qt Application for FriendlyELEC Boards/zh
8.4.2 Qt Demo
FriendlyCore has several Qt demo programs:
- Qt QML: CinematicExperience
CinematicExperience is a utility for selecting a video file and it is developed with Qt QML.
This demo uses Qt QML's various features and runs very smoothly on RK3399. This performance is achieved by hardware and software optimization.
You can start it in a commandline utility by running the following commands:
cd /opt/Qt5_CinematicExperience ./run.sh
- QQt WebEngine: web browser
Qt WebEngine uses Chromium and supports HTML5.
You can start it by running the following commands:
cd /opt/qt5-brower ./run.sh
Note:Qt WebEngine depends on the Xcb plug-in.
- Qt Different Display
This demo shows that when a board is connected to an HDMI monitor and an eDP LCD these two devices display differently. You can start it by running the following commands:
cd /opt/qt5-multi-screen-demo ./run.sh
- Qt Multimedia: qt5-player with hard decoding
The qt5-player works with Rockchip's gstreamer plug-in and supports 4K video playing. Since Rockchip's plug-in only supports output images to an X11 window the qt5-player needs to use XCB for display.
You can start the demo by running the following commands:
cd /opt/qt5-player ./run.sh
Here is what it looks like. You can set it to display in full-screen and adjust the voice's volume:
- Qt WebGL demo: nmapper
Qt WebGL allows you to remotely access a Qt program running on your board.
Before you run the demo you need to connect your board to the internet and run the following commands:
cd /opt/qt5-nmapper ./run-with-webgl.sh
You can open a browser on another device, type the IP address of your board on the browser's address bar, enter and you will be able to see a Qt GUI. Here is what it looks like:
- Qt VNC demo: Smart home applicance GUI
Qt VNC allows you to run a program as a VNC Server on your board and you can access the program from a VNC client on another device. This program can be developed with either QtWidgets or QML.
You can start it by running the following commands:
cd /opt/qt5-smarthome ./run-with-vnc.sh
Start a VNC viewer on a smart phone or mobile device and type your board's IP address and port number 5900. For instance if your board's IP address is 192.168.1.100 you can type "192.168.1.100:5900", enter and you will see the following GUI:
8.4.3 Play with Dual Cameras under Qt
This sample shows how to connect dual cameras to the board and play with them. Before run the sample make sure you connect dual cameras and an LCD to your board. In general popular UVC cameras should work however we suggest users use the following modules which we have tested:
Index Model 1 Logitech C270 2 Logitech C270i 3 Logitech C922 Pro
Run the following commands:
cd /opt/dual-camera ./run.sh
Here is what you expect to observe:
8.5 Setup Program to AutoRun
You can setup a program to autorun on system boot with npi-config:
sudo npi-config
Go to Boot Options -> Autologin -> Qt/Embedded, select Enable and reboot.
8.6 Extend TF Card's Section
When FriendlyCore is loaded the TF card's section will be automatically extended.You can check the section's size by running the following command:
$ df -h
8.7 Transfer files using Bluetooth
Take the example of transferring files to the mobile phone. First, set your mobile phone Bluetooth to detectable status, then execute the following command to start Bluetooth search.:
hcitool scan
Search results look like:
Scanning ... 2C:8A:72:1D:46:02 HTC6525LVW
This means that a mobile phone named HTC6525LVW is searched. We write down the MAC address in front of the phone name, and then use the sdptool command to view the Bluetooth service supported by the phone:
sdptool browser 2C:8A:72:1D:46:02
Note: Please replace the MAC address in the above command with the actual Bluetooth MAC address of the mobile phone.
This command will detail the protocols supported by Bluetooth for mobile phones. What we need to care about is a file transfer service called OBEX Object Push. Take the HTC6525LVW mobile phone as an example. The results are as follows:
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
As can be seen from the above information, the channel used by the OBEX Object Push service of this mobile phone is 12, we need to pass it to the obexftp command, and finally the command to initiate the file transfer request is as follows:
obexftp --nopath --noconn --uuid none --bluetooth -b 2C:8A:72:1D:46:02 -B 12 -put example.jpg
Note: Please replace the MAC address, channel and file name in the above command with the actual one.
After executing the above commands, please pay attention to the screen of the mobile phone. The mobile phone will pop up a prompt for pairing and receiving files. After confirming, the file transfer will start.
Bluetooth FAQ:
1) Bluetooth device not found on the development board, try to open Bluetooth with the following command:
rfkill unblock 0
2) Prompt can not find the relevant command, you can try to install related software with the following command:
apt-get install bluetooth bluez obexftp openobex-apps python-gobject ussp-push
8.8 WiFi
For either an SD WiFi or a USB WiFi you can connect it to your board in the same way. The APXX series WiFi chips are SD WiFi chips. By default FriendlyElec's system supports most popular USB WiFi modules. Here is a list of the USB WiFi modules we tested:
Index Model 1 RTL8188CUS/8188EU 802.11n WLAN Adapter 2 RT2070 Wireless Adapter 3 RT2870/RT3070 Wireless Adapter 4 RTL8192CU Wireless Adapter 5 mi WiFi mt7601 6 5G USB WiFi RTL8821CU 7 5G USB WiFi RTL8812AU
You can use the NetworkManager utility to manage network. You can run "nmcli" in the commandline utility to start it. Here are the commands to start a WiFi connection:
- Change to root
$ su root
- Check device list
$ nmcli dev
Note: if the status of a device is "unmanaged" it means that device cannot be accessed by NetworkManager. To make it accessed you need to clear the settings under "/etc/network/interfaces" and reboot your system.
- Start WiFi
$ nmcli r wifi on
- Scan Surrounding WiFi Sources
$ nmcli dev wifi
- Connect to a WiFi Source
$ nmcli dev wifi connect "SSID" password "PASSWORD" ifname wlan0
The "SSID" and "PASSWORD" need to be replaced with your actual SSID and password.If you have multiple WiFi devices you need to specify the one you want to connect to a WiFi source with iface
If a connection succeeds it will be automatically setup on next system reboot.
For more details about NetworkManager refer to this link: Use NetworkManager to configure network settings
If your USB WiFi module doesn't work most likely your system doesn't have its driver. For a Debian system you can get a driver from Debian-WiFi and install it on your system. For a Ubuntu system you can install a driver by running the following commands:
$ apt-get install linux-firmware
In general all WiFi drivers are located at the "/lib/firmware" directory.
8.9 Ethernet Connection
If a board is connected to a network via Ethernet before it is powered on it will automatically obtain an IP with DHCP activated after it is powered up. If you want to set up a static IP refer to: Use NetworkManager to configure network settings。
8.10 WiringPi and Python Wrapper
8.11 Custom welcome message
The welcome message is printed from the script in this directory:
/etc/update-motd.d/
For example, to change the FriendlyELEC LOGO, you can change the file /etc/update-motd.d/10-header. For example, to change the LOGO to HELLO, you can change the following line:
TERM=linux toilet -f standard -F metal $BOARD_VENDOR
To:
TERM=linux toilet -f standard -F metal HELLO
8.12 Modify timezone
For exampe, change to Shanghai timezone:
sudo rm /etc/localtime sudo ln -ls /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
8.13 Select the system default audio device
You can set the system default audio device by following the steps below.
Use the following command to view all the sound card devices in the system (Note: different development boards will have different results):
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
As you can see, the following sound card devices are available on the hardware:
Sound card device Sound card number Description realtekrt5651co 0 Realtek sound card's default output interface (through 3.5mm jack interface) rockchiphdmi 1 HDMI ROCKCHIPSPDIF 2 SPDIF (Note: temporarily unavailable, because the hardware is not exported)...
To configure the audio output to the 3.5mm jack, modify the configuration file /etc/asound.conf and modify it to the following:
defaults.pcm.card 0 defaults.pcm.device 0
To configure to output audio to HDMI, change the defaults.pcm.card above to 1.
Note that some boards do not have a Realtek sound card (no 3.5mm jack interface), so the card number of the HDMI device will be 0, so the configuration should be based on the result of the aplay -l command.
8.14 Change the behavior of the PWM fan
By default, the speed of the fan is dynamically adjusted according to the CPU temperature. If you need to let the fan run, you can modify the script /usr/bin/start-rk3399-pwm-fan.sh to the following:
#!/bin/bash echo 0 > /sys/class/pwm/pwmchip1/export sleep 1 echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable echo 50000 > /sys/class/pwm/pwmchip1/pwm0/period echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable echo 45000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
9 Work with Lubuntu
9.1 Introduction to Lubuntu
LUbuntu is a light-weighted Ubuntu desktop system. It is based on LXDE and has the following features:
Light-weighted - it consumes relatively less CPU resources than a common desktop system. When a system's RAM is sufficient it can achieve much better performance.
Less power consumption - it consumes relatively less power or resources than a common desktop system to achieve the same performance.
Compact & neat - its desktop is based on GTK+ 2 and supports multiple languages.
Easy to use - its GUI looks similar to MS Windows'.
Customizable - Users can customize LXDE's GUI.
Compatible - it is compatible with freedesktop.org.
The Lubuntu Desktop has been optimized for adopting Mali GPU. It has driver support for X.org and supports Hardware Cursor, OpenGL acceleration and etc.
9.2 Lubuntu Default User Account
Non-root User:
User Name: pi Password: pi
Root:
User Name: root Password: fa
9.3 OpenGL ES
Open a command line utility and run the following command:
glmark2-es2
9.4 Video Playing with Hardware Decoding
9.4.1 Video Playing with Qt Player
Lubuntu is preinstalled with Qt5-Player which has Rockchip's gstreamer plug-in and supports playing 4K video stream. Here are the steps to start it:
On Lubuntu's main window open "Other" and click on Qt5-Player
Here is how this player looks like. It can display in full screen. You can adjust its volume:
9.4.2 Video Playing with Commandline Utility
Open a commandline utility and type the following command:
gst-player.sh
Your selected video file will be played in Overlay and its voice will be output to the earphone. You can use "which gst-player.sh" to locate this script and customize it.
9.5 eDP LCD Rotation
If your board is connected to an eDP LCD and you want to rotate its display by 90/180/270 degrees you can do it with "xrotate.sh". You can run the following command as root to rotate its display by 90 degrees clockwise. It will start the lightdm service to make it effective:
sudo xrotate.sh -m CW -r
You can get more details by running "xrotate -h".
However this command cannot rotate HDMI display. If you want to rotate HDMI display you may need to make changes in "/etc/X11/xorg.conf"
9.6 Connect USB Camera
Connect a USB camera (e.g. Logitech C270) to NanoPC-T4, run the following commands:
++export DISPLAY=:0.0 +guvcview -d /dev/video10 +
9.7 5G WiFi
Click on the network icon on top right of the Lubuntu GUI, select a WiFi hotspot and proceed with prompts.
9.8 Develop Qt Application
Lubuntu has Qt 5.10.0 which can be used to develop an X11 application. For details about SDK download and compilation refer to :How to Build and Install Qt Application for FriendlyELEC Boards
When running the Qt app, you need to specify the platform parameter to xcb as follows:
./HelloQt --platform xcb
9.9 Chromium web browser
Chromium web browser has enabled hardware acceleration by default, supports WebGL, and can view hardware acceleration details by entering the URL chrome://gpu, as shown below:
9.10 Cancel automatic login
Edit the file /usr/share/lightdm/lightdm.conf.d/20-lubuntu.conf and delete the line "autologin-user=pi"
The screen saver configuration file is /etc/xdg/autostart/xset_command.desktop. The default factory settings are that the screen saver and DPMS are both closed. You can change the configuration by modifying this file.
9.12 Select the system default audio device
You can set the system default audio device by following the steps below.
Use the following command to view all the sound card devices in the system (Note: different development boards will have different results):
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
As you can see, the following sound card devices are available on the hardware:
Sound card device Sound card number Description realtekrt5651co 0 Realtek sound card's default output interface (through 3.5mm jack interface) rockchiphdmi 1 HDMI ROCKCHIPSPDIF 2 SPDIF (Note: temporarily unavailable, because the hardware is not exported)...
To configure the audio output to the 3.5mm jack, modify the configuration file /etc/asound.conf and modify it to the following:
defaults.pcm.card 0 defaults.pcm.device 0
To configure to output audio to HDMI, change the defaults.pcm.card above to 1.
Note that some boards do not have a Realtek sound card (no 3.5mm jack interface), so the card number of the HDMI device will be 0, so the configuration should be based on the result of the aplay -l command.
9.13 Connect NVME SSD High Speed Hard Disk to T4
Connect a NVME SSD hard disk to NanoPC-T4's M.2 interface, initialize and automatically mount the SSD by running the following commands. Before proceed turn off your T4 and connect an SSD to your T4. Power on your T4 and open a command line utility(go to top left of the GUI and enter System Tools -> LXTerminal) or SSH to your T4.
We suggest you switch to "root" by running the following command:
su -
The password for "root" is "fa".
9.13.1 Detection of SSD
root@FriendlyELEC:~# cat /proc/partitions major minor #blocks name 1 0 4096 ram0 259 0 125034840 nvme0n1
If there is a nvme0n1 device node it means an SSD is recognized by T4.
9.13.2 Partition of SSD
To mount an SSD under Linux we re-partition it as one section by running the following command:
(echo o; echo n; echo p; echo 1; echo ""; echo ""; echo w; echo q) | fdisk /dev/nvme0n1
If you want to re-partition it to multiple sections you can run "fdisk /dev/nvme0n1". For more detail about this command refer to the fdisk's manual.
9.13.3 Format Section to EXT4
After an SSD is successfully partitioned you can check its sections by running "cat /proc/partitions". The image provided treats a PCIe nvme device's sections as an eMMC's sections you will find that an SSD has some small sections.
We can check the "blocks" column and the biggest section is available for users. The /dev/nvme0n1p7 section is used to store data:
root@FriendlyELEC:~# cat /proc/partitions major minor #blocks name 1 0 4096 ram0 259 0 125034840 nvme0n1 259 1 4096 nvme0n1p1 259 2 4096 nvme0n1p2 259 3 4096 nvme0n1p3 259 4 12288 nvme0n1p4 259 5 32768 nvme0n1p5 259 6 32768 nvme0n1p6 259 7 124932440 nvme0n1p7
The following command formats a section to ext4:
mkfs.ext4 /dev/nvme0n1p7
9.13.4 Auto Mount SSD on System Startup
Before we mount an SSD's section you need to know its Block ID. You can check it by running "blkid":
blkid /dev/nvme0n1p7 /dev/nvme0n1p7: UUID="13fb682e-ef40-4c71-b98b-3d17403e1205" TYPE=“ext4"
Add a "Block ID" to "/etc/fstab" and here is what it looks like
UUID=<Block ID> /media/nvme ext4 defaults 0 0
You need to replace <Block ID> with the UUID obtained by running "blkid". To mount the SSD in our example we made the "/etc/fstab" file as follows:
UUID=13fb682e-ef40-4c71-b98b-3d17403e1205 /media/nvme ext4 defaults 0 0
We want to mount an SSD to "/media/nvme" but this directory doesn't exist. Therefore we create it and change its access right by running the following commands:
mkdir /media/nvme chmod 777 /media/nvme
Run "mount" to check if the SSD is mounted successfully:
mount /media/nvme
You can reboot your T4 to check if your SSD will be automatically mounted:
poweroff
Reboot your T4, if you can see the following screen your SSD is mounted successfully:
9.13.5 SSD Read & Write
You can test SSD read and write speed. In our test we used a LITEON T10 120GB SSD. Different SSDs may have different results.
Write to SSD:
# dd if=/dev/zero of=/media/nvme/deleteme.dat bs=32M count=128 128+0 records in 128+0 records out 4294967296 bytes (4.3 GB, 4.0 GiB) copied, 12.5671 s, 342 MB/s
Read from SSD:
# dd if=/media/nvme/deleteme.dat of=/dev/zero bs=32M count=128 128+0 records in 128+0 records out 4294967296 bytes (4.3 GB, 4.0 GiB) copied, 6.72943 s, 638 MB/s
10 Work with Android7.1
FriendlyElec provides a full Android7.1 BSP for RK3399 board. The source code is hosted at gitlab.com and is open source. The BSP supports GPU and VPU hardware acceleration.
10.1 Connect MIPI Camera to NanoPC-T4
FriendlyElec developed a MIPI camera CAM1320 for board and it works under Android. You can use this camera to take pictures and record video. The operation is straightforward. You just need to connect the camera at your board's MIPI interface, boot your board to Android and start Android's camera app.
The board has two MIPI interfaces: one front camera and the other rear camera:
MIPI-CSI1 <--> Android rear camera
MIPI-CSI2 <--> Android front camera
How to connect:
10.2 Set HDMI Display
If your board is connected to an HDMI monitor and it runs Android you can go to "Settings -> Display -> HDMI" to make your setting.
HDMI Resolution By default it is "Auto". You can set its resolution up to 4K Screen Zoom There will be four arrows you can click on to zoom in/out HDMI Rotation Set it landscape or portrait.
10.3 Rotate Display
Enter Android's Settings -> Display -> HDMI -> HDMI Rotation. It supports both landscape and portrait.
10.4 Android7 hardware access
You can use the FriendlyThings SDK to access and control hardware resources on the motherboard in the Android App, such as Uart, SPI, I2C, GPIO and other interfaces. For details, please refer to the following two documents.:
10.5 Build Openwrt/Friendlywrt
10.5.1 Download Code
Two versions are available, please choose as required:
10.5.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
10.5.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
10.5.2 First compilation step
./build.sh rk3399.mk # or rk3399-docker.mk
All the components (including u-boot, kernel, and friendlywrt) are compiled and the sd card image will be generated, then execute the following command to generate the image file for installing the system into the emmc:
./build.sh emmc-img
After making changes to the project, the sd card image needs to be repackaged by running the following command:
./build.sh sd-img
10.5.3 Secondary compilation steps
cd friendlywrt make menuconfig rm -rf ./tmp make -j${nproc} cd ../ ./build.sh sd-img ./build.sh emmc-img
10.5.4 Build u-boot only
./build.sh uboot
10.5.5 Build kernel only
./build.sh kernel
10.5.6 Build friendlywrt only
./build.sh friendlywrt
Or go to the friendlywrt directory and follow the standard openwrt commands. If you get an error with the above command, try using the following command to compile in a single thread:
cd friendlywrt make -j1 V=s
10.6 Build Buildroot
please refer to: Buildroot
10.7 Build Other Linux
10.7.1 Kernel and u-boot versions
Operating System | Kernel Version | U-boot version | Cross-compiler | Partition type | Packaging Tool | Kernel branch | Kernel configuration | U-boot branch | U-boot configuration |
---|---|---|---|---|---|---|---|---|---|
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 |
- Kernel git repo:https://github.com/friendlyarm/kernel-rockchip
- U-boot git repo:https://github.com/friendlyarm/uboot-rockchip
- The cross-compile toolchain is located in the path: /opt/FriendlyARM/toolchain/
- The SD-Fuse is a helper script to make bootable SD card image.
- Click on MBR and GPT in the table to view the partition layout (configuration file) for each system.
10.7.2 Build kernel linux-v4.4.y
This section applies to the following operating systems:
lubuntu | eflasher | friendlydesktop-arm64 | friendlycore-arm64 |
Clone the repository to your local drive then build:
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 # Load configuration make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig # Optionally, if you want to change the default kernel config # make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig # Start building kernel make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images -j$(nproc) # Start building kernel modules 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)
After the compilation, the following files will be generated:
kernel.img | resource.img | The kernel modules are located in the out-modules directory |
Run your build:
Please refre to #Running the build
10.7.3 Build u-boot v2014.10
This section applies to the following operating systems:
lubuntu | eflasher | friendlydesktop-arm64 | friendlycore-arm64 |
Clone the repository to your local drive then build:
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-
After the compilation, the following files will be generated:
uboot.img | trust.img | rk3399_loader_v1.22.119.bin (aka MiniLoaderAll.bin) |
Installing the u-boot:
Please refre to #Running the build
10.7.4 Build kernel linux-v4.19.y
This section applies to the following operating systems:
ubuntu-focal-desktop-arm64 | debian-bullseye-desktop-arm64 | debian-bullseye-minimal-arm64 | friendlycore-focal-arm64 | ubuntu-noble-core-arm64 | debian-bookworm-core-arm64 | buildroot |
Clone the repository to your local drive then build:
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 # Configuring the Kernel # Load default configuration make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig # Optionally, load configuration for FriendlyWrt # make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig friendlywrt.config # Optionally, if you want to change the default kernel config # make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig # Start building kernel make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images -j$(nproc) # Start building kernel modules 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)
After the compilation, the following files will be generated:
kernel.img | resource.img | The kernel modules are located in the out-modules directory |
Run your build:
Please refre to #Running the build
10.7.5 Build kernel linux-v6.1.y
This section applies to the following operating systems:
friendlywrt21 | friendlywrt21-docker | friendlywrt23 | friendlywrt23-docker | openmediavault-arm64 |
Clone the repository to your local drive then build:
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 # Configuring the Kernel # Load default configuration make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi4_linux_defconfig # Optionally, load configuration for FriendlyWrt # make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi4_linux_defconfig friendlywrt.config # Optionally, if you want to change the default kernel config # make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig # Start building kernel make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 -j$(nproc) # Start building kernel modules 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)
Pack the kernel.img and 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
After the compilation, the following files will be generated:
kernel.img | resource.img | The kernel modules are located in the out-modules directory |
Run your build:
Please refre to #Running the build
10.7.6 Build u-boot v2017.09
This section applies to the following operating systems:
ubuntu-focal-desktop-arm64 | debian-bullseye-desktop-arm64 | debian-bullseye-minimal-arm64 | friendlycore-focal-arm64 | ubuntu-noble-core-arm64 | debian-bookworm-core-arm64 | buildroot |
Clone the repository to your local drive then build:
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
After the compilation, the following files will be generated:
uboot.img | trust.img | rk3399_loader_v1.24.126.bin (aka MiniLoaderAll.bin) |
Run your build:
Please refre to #Running the build
10.7.7 Running the build
10.7.7.1 Install to target board
10.7.7.1.1 MBR partition
This section applies to the following operating systems:
lubuntu | eflasher | friendlydesktop-arm64 | friendlycore-arm64 |
The MBR partitioning is only used by the Linux v4.4 kernel. You can check the partition layout by clicking on this link: partmap. To write an image file, you can use the dd command. For example, in the parameter.template file, "0x00014000@0x00014000(kernel)" specifies that the kernel partition starts at 0x00014000, which is equivalent to 81920 in decimal. Therefore, the dd command should be as follows:
dd if=kernel.img of=/dev/mmcblk0 seek=81920
10.7.7.1.2 GPT partition
This section applies to the following operating systems:
ubuntu-focal-desktop-arm64 | debian-bookworm-core-arm64 | debian-bullseye-desktop-arm64 | debian-bullseye-minimal-arm64 |
friendlycore-focal-arm64 | ubuntu-noble-core-arm64 | friendlywrt21-kernel4 | buildroot |
friendlywrt21 | friendlywrt21-docker | friendlywrt23 | friendlywrt23-docker |
The OS uses GPT partitions by default which is using the Linux v4.19 and Linux v5.15 kernel, you can use the dd command, but be careful to choose the right output device:
- The SD/TF Card device node: /dev/mmcblk0
- The eMMC device node: /dev/mmcblk2
The following is an example of how to update the kernel to eMMC:
Use the 'parted' command to view the partition layout:
parted /dev/mmcblk2 print
Sample outputs:
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
as shown above, the resource partition is located at 5 and the kernel partition is located at 6. Use the dd command to write the resource.img and kernel.img files to these partitions, the commands are as follows:
dd if=resource.img of=/dev/mmcblk2p5 bs=1M dd if=kernel.img of=/dev/mmcblk2p6 bs=1M
If you want to update u-boot:
dd if=uboot.img of=/dev/mmcblk2p1 bs=1M
To update new driver modules, copy the newly compiled driver modules to the appropriate directory under /lib/modules.
10.7.7.2 Packaging and creating an SD image
To create a new OS image file, you need to use the "sd-fuse" packaging tool.
"sd-fuse" is a collection of scripts that can be used to create bootable SD card images for FriendlyElec boards. Its main features include:
- Creation of root filesystem images from a directory
- Building of bootable SD card images
- Simple compilation of kernel, U-Boot, and third-party drivers
Please click on the following link to find out more:
Kernel version | Packaging Tool |
---|---|
linux v4.4.y | sd-fuse |
linux v4.19.y | sd-fuse_rk3399/kernel-4.19 |
linux v6.1.y | sd-fuse_rk3399/kernel-6.1.y |
10.7.7.3 USB flashing
Note: kernel v4.4.y is not supported
10.7.7.3.1 Linux
Reboot the board and enter loader mode with the following command:
sudo reboot loader
To flash U-Boot and kernel using the "upgrade_tool_v2.17_for_linux" tool, please use the following command:
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
Note: "upgrade_tool" is a command-line tool provided by Rockchip for Linux operating systems (Linux_Upgrade_Tool).
10.8 Build the code using scripts
10.8.1 Download scripts and image files
git clone https://github.com/friendlyarm/sd-fuse_rk3399.git -b kernel-4.19 cd sd-fuse_rk3399 wget http://112.124.9.243/dvdfiles/RK3399/images-for-eflasher/friendlycore-focal-arm64-images.tgz tar xvzf friendlycore-focal-arm64-images.tgz
10.8.2 Compile the kernel
Download the kernel source code and compile it. the relevant image files in the friendlycore-focal-arm64 directory will be automatically updated, including the kernel modules in the file system:
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
10.8.3 Compile the kernel headers
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
10.8.4 Compile the uboot
Download the uboot source code and compile it. the relevant image files in the friendlycore-focal-arm64 directory will be automatically updated:
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
10.8.5 Generate new image
Repackage the image file in the friendlycore-focal-arm64 directory into sd card image:
./mk-sd-image.sh friendlycore-focal-arm64
After the command is completed, the image is in the out directory, you can use the dd command to make the SD boot card, for example:
dd if=out/rk3399-sd-friendlycore-focal-4.19-arm64-YYYYMMDD.img of=/dev/sdX bs=1M
10.9 Building AOSP from source
10.9.1 Hardware and Software Requirements
- Your computer should have at least 16GB of RAM and 300GB of disk space. We recommend using a machine with 32GB of RAM and a large-capacity, high-speed SSD, and we do not recommend using virtual machines.
- If you encounter compilation errors, they may be caused by problems with the compilation environment. We recommend using the following Docker container for compilation: docker-cross-compiler-novnc.
10.9.2 Compile Android10
10.9.2.1 Download Android10 Source Code
There are two ways to download the source code:
- repo archive file on netdisk
Netdisk URL: Click here
File location on netdisk:"07_Source codes/rk3399-android-10.git-YYYYMMDD.tar.xz" (YYYYMMDD means the date of packaging)
After extracting the repo package from the network disk, you need to execute the sync.sh script, which will pull the latest code from gitlab:
tar xf "/path/to/netdisk/07_Source codes/rk3399-android-10.git-YYYYMMDD.tar.xz" cd rk3399-android-10 ./sync.sh
- git clone from gitlab
NanoPC-T4 source code is maintained in gitlab, You can download it by running the following command:
git clone --recursive https://gitlab.com/friendlyelec/rk3399-android-10.git -b main
Note: If the following error "error: unknown option `recurse-submodules'" appears, please upgrade git to v2.0.0 or above.
10.9.2.2 Generate Image File
You can compile an Android source code and generate an image file (non-root user is recommended):
cd rk3399-android-10 ./build-nanopc-t4.sh -F -M
If you need to include google apps, you need to set an environment variable and then compile, as shown below:
cd rk3399-android-10 export INSTALL_GAPPS_FOR_TESTING=yes ./build-nanopc-t4.sh -F -M
10.9.2.3 Make OTA Packages
If you need the support of A/B (Seamless) System Updates, you need to do the following:
a) Build your own update server for http download of update files;
b) Customize the Updater application, the code is located in packages/apps/Updater, let it connect and download file from your server;
c) Use the quick compilation script parameter -O or --ota to compile OTA Packages, as shown below:
cd rk3399-android-10 ./build-nanopc-t4.sh -F -O -M
After the compilation is successfully completed, the OTA update related packages are located in the directory: rockdev/otapackage/ ,Please do not delete this directory.
After you have made some changes, compiling again with the parameter -O will generate ota-update-XXXXXXXX.zip, which is an incremental update package.
OTA Packages decides whether to generate incremental update package according to BUILD_NUMBER, for details, please refer to build-nanopc-t4.sh.
To disable the A/B feature, you can refer to the following to modify device/rockchip/rk3399/nanopc-t4/BoardConfig.mk, and then recompile uboot and android:
BOARD_USES_AB_IMAGE := false
10.9.2.4 Update System with New Image
After compilation is done a new image file will be generated in the "rockdev/Image-nanopc_t4/" directory under Android 10's source code directory. You can follow the steps below to update the OS in NanoPC-T4:
1) Insert an SD card which is processed with EFlasher to an SD card reader and insert this reader to a PC running Ubuntu. The SD card's partitions will be automatically mounted;
2) Copy all the files under the "rockdev/Image-nanopc_t4/" directory to the SD card's android10 directory in the "FRIENDLYARM" partition;
3) Insert this SD card to NanoPC-T4 and reflash Android
When flashing Android 10, EFlasher requires v1.3 or above. When flashing with Type-C, please use the tool AndroidTool v2.71 or Linux_Upgrade_Tool v1.49 provided by Rockchip.
10.9.3 Compile Android8.1
10.9.3.1 Download Android8.1 Source Code
There are two ways to download the source code:
- repo archive file on netdisk
Netdisk URL: Click here
File location on netdisk:sources/rk3399-android-8.1.git-YYYYMMDD.tgz (YYYYMMDD means the date of packaging)
After extracting the repo package from the network disk, you need to execute the sync.sh script, which will pull the latest code from gitlab:
tar xvzf /path/to/netdisk/sources/rk3399-android-8.1.git-YYYYMMDD.tgz cd rk3399-android-8.1 ./sync.sh
- git clone from gitlab
NanoPC-T4 source code is maintained in gitlab, You can download it by running the following command:
git clone https://gitlab.com/friendlyelec/rk3399-android-8.1 --depth 1 -b master
10.9.3.2 Generate Image File
You can compile an Android source code and generate an image file:
cd rk3399-android-8.1 ./build-nanopc-t4.sh -F -M
10.9.3.3 Update System with New Image
After compilation is done a new image file will be generated in the "rockdev/Image-nanopc_t4/" directory under Android 8.1's source code directory. You can follow the steps below to update the OS in NanoPC-T4:
1) Insert an SD card which is processed with EFlasher to an SD card reader and insert this reader to a PC running Ubuntu. The SD card's partitions will be automatically mounted;
2) Copy all the files under the "rockdev/Image-nanopc_t4/" directory to the SD card's android8 directory in the "FRIENDLYARM" partition;
3) Insert this SD card to NanoPC-T4 and reflash Android
Here is an alternative guide to update OS: sd-fuse_rk3399
10.9.4 Compile Android7
10.9.4.1 Download Android7 Source Code
There are two ways to download the source code:
- repo archive file on netdisk
Netdisk URL: Click here
File location on netdisk:sources/rk3399-android-7.git-YYYYMMDD.tgz (YYYYMMDD means the date of packaging)
After extracting the repo package from the network disk, you need to execute the sync.sh script, which will pull the latest code from gitlab:
tar xvzf /path/to/netdisk/sources/rk3399-android-7.git-YYYYMMDD.tgz cd rk3399-nougat ./sync.sh
- git clone from gitlab
NanoPC-T4 source code is maintained in gitlab, You can download it by running the following command:
git clone https://gitlab.com/friendlyelec/rk3399-nougat --depth 1 -b nanopc-t4-nougat
10.9.4.2 Generate Image File
You can compile an Android7 source code and generate an image file:
cd rk3399-nougat ./build-nanopc-t4.sh -F -M
10.9.4.3 Update System with New Image
After compilation is done a new image file will be generated in the "rockdev/Image-nanopc_t4/" directory under Android7's source code directory. You can follow the steps below to update the OS in NanoPC-T4:
1) Insert an SD card which is processed with EFlasher to an SD card reader and insert this reader to a PC running Ubuntu. The SD card's partitions will be automatically mounted;
2) Copy all the files under the "rockdev/Image-nanopc_t4/" directory to the SD card's android8 directory in the "FRIENDLYARM" partition;
3) Insert this SD card to NanoPC-T4 and reflash Android
Here is an alternative guide to update OS: sd-fuse_rk3399
11 Using On-Board Hardware Resources
11.1 Access Serial Interface
For now only UART4 is available for users:
Serial Interface Serial Device UART0 Used by Bluetooth UART1 Used by Gbps Ethernet UART2 Used by Serial Debug Port UART3 Used by Gbps Ethernet UART4 Available, device name is /dev/ttyS4 (note: this is only applicable for ROM released after 20180618)
12 More OS Support
12.1 DietPi_NanoPCT4-ARMv8-Stretch
DietPi is a light-weighted system. Its image file can be as small as 345M bytes. It takes much less resources. It has a DietPi-RAMlog utility. These features allow users to exploit its huge potentials.
FriendlyElec doesn't provide technical support for DietPi.
Here are some steps to boot a DietPi:
- Download DriverAssitant_v4.5.tgz, extract it and install it on a Windows PC;
- Download DietPi_NanoPCT4-ARMv8-Stretch DietPi_NanoPCT4-ARMv8-Stretch, extract it, enter "Image_and_Tools" and run "AndroidTool.exe" as administrator
- It is assumed that the section configuration(parameter.txt) is imported and here is a table:
- Connect a 12V/2A DC power cord and an HDMI monitor to your T4, connect your T4 to a PC with a Type-C cable. Press and hold the Recovery button and the Power button for at least 1.5 seconds AndroidTools will prompt that a LOADER device is found
a)If eMMC hasn't been flashed with an image or the image inside is removed or damaged this eMMC will be recognized as a MASKROM device;
b)You can hold both the BOOT button and the Power button for at least 5 seconds to force the board to enter the MASKROM mode;
c)If your system shows "no device is found" you need to check if you have installed a driver or if your Type-C cable works and then try it again;
d)If your system is booted successfully you can run "reboot loader" on your board via adb or SSH and force your board to enter the LOADER mode.
- Click on "Run" to download your wanted image to eMMC. A while later after the image is flashed successfully your board will be rebooted automatically.
Login User Name:root
Password:dietpi
12.2 WiFi
By default WiFi is not enabled. You can enable WiFi by running "dietpi-config". dietpi-config
--> Network Options:Adapters --> WiFi Change Wireless Network Settings --> Scan Scan and Connect
Select a WiFi hotspot, type its password and connect
13 Link to Rockchip Resources
- Link to Rockchip's resources: https://gitlab.com/friendlyelec/rk3399-nougat/tree/nanopc-t4-nougat/RKDocs
- RK3399 datasheet V1.6
- RK3399TRM V1.4
14 Schematic, PCB CAD File
- Schematic: NanoPC-T4-1802-Schematic.pdf
- PCB CAD File:NanoPC-T4_1802_Drawing(dxf).zip
15 Update Log
15.1 June-19-2018
- Released English version
15.2 July-5-2018
- Updated section 5.3
- Added sections 7, 9.2 and 10
15.3 July-27-2018
- Updated section 5.3
- Added sections 9.5 and 9.8
15.4 July-29-2018
- Updated section 6.2
- Added sections 7.4, 8.4 and 9.4