Buildroot for RK3399

From FriendlyARM WiKi
Jump to: navigation, search


1 Introduction to Buildroot

Buildroot is a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation. It contains a boot-loader, kernel, rootfs, various libraries and utilities(e.g. qt, gstreamer, busybox etc).

FriendlyELEC's Buildroot is based on Rockchip's version which is made with linux-sdk and maintained with git. FriendlyELEC's version is synced with Rockchip's version;

Here is what Buildroot for RK3399 looks like

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

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

2 Download Images of Trial Version

Visit Download LinkDownload:

Image Files OS image booting from SD card Image used to flash to eMMC

After extract the file you can use either dd or the win32image utility to flash the image to an SD card.

3 User Name and Password

User name: root
Password: rockchip

4 Obtain Source Code

4.1 Install repo Utility

Install the repo utility:

git clone
cp repo/repo /usr/bin/

4.2 Download Source Code

You can retrieve a project's source code in either of the following two ways. The first works better with Mainland Chinese users:

4.2.1 1: Retrieve Repo Package from Cloud Storage

Download link: Click to enter
File location: sources/linuxsdk-friendlyelec-YYYYMMDD.tar (YYYYMMDD stands for the data when the package is generated)
After you get a tar package, untar it and run the following command to extract it:

tar xvf /path/to/netdisk/sources/linuxsdk-friendlyelec-YYYYMMDD.tar
cd linuxsdk-friendlyelec
repo sync -l

If you want to get the latest official source code you can run the following commands:

cd linuxsdk-friendlyelec
repo sync

4.2.2 2: Retrive Repo Package from Github

mkdir linuxsdk-friendlyelec
cd linuxsdk-friendlyelec
repo init -u -b master -m rk3399_linux_release.xml --repo-url=
repo sync -c

4.2.3 Get Latest Version with Sync

cd linuxsdk-friendlyelec
repo sync -c

If your network connection is broken during sync you can run the following script to do it:

#! /bin/bash
repo sync -c
while [ $? -ne 0 ]; 
    repo sync -c

5 Compile Source Code

5.1 Setup Compilation Environment

Under Ubuntu on a host PC run the following command:

sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-
compiler gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python-linaro-image-
tools linaro-image-tools autoconf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make
binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget
libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-
client subversion asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev texinfo
liblz4-tool genext2fs lib32stdc++6

5.2 Auto Compilation


5.3 Compile Partial Code

5.3.1 kernel

./ kernel

5.3.2 u-boot

./ uboot

5.3.3 rootfs

./ rootfs

5.4 Generate Image for SD Card

sudo ./ sd-img

Flash an image to an SD card:

./friendlyelec/rk3399/sd-fuse_rk3399/ /dev/sdX buildroot

The "/dev/sdX" needs to be replaced with your actual SD card device name.

5.5 Generate Image for EMMC(Eflasher)

sudo ./ emmc-img

5.6 Check Help Info

# ./ help
====USAGE: modules====
uboot              -build uboot
kernel             -build kernel
rootfs             -build default rootfs, currently build buildroot as default
buildroot          -build buildroot rootfs
ramboot            -build ramboot image
yocto              -build yocto rootfs, currently build ros as default
ros                -build ros rootfs
debian             -build debian rootfs
pcba               -build pcba
recovery           -build recovery
all                -build uboot, kernel, rootfs, recovery image
cleanall           -clean uboot, kernel, rootfs, recovery
firmware           -pack all the image we need to boot up system
updateimg          -pack update image
sd-img             -pack sd-card image, used to create bootable SD card
emmc-img           -pack sd-card image, used to install buildroot to emmc
save               -save images, patches, commands used to debug
default            -build all module

Comments on popular parameters:
uboot -compile uboot only
kernel -compile kernel only
rootfs -compile buildroot only
buildroot -compile buildroot only
sdimg -generate an image which can be flashed to an SD card with the "dd" command and to eMMC with eFlasher

6 Customize Buildroot

6.1 Structure of Directories

├── linuxsdk-friendlyelec
│   ├── app
│   ├── buildroot buildroot's root directory
│   ├── -> device/rockchip/common/ script for auto-compilation
│   ├── device configuration files
│   ├── distro debian's root directory
│   ├── docs documents
│   ├── -> buildroot/build/
│   ├── external
│   ├── friendlyelec configuration files for FriendlyElec's RK3399 
│   ├── kernel kernel
│   ├── Makefile -> buildroot/build/Makefile
│   ├── -> device/rockchip/common/ script to update rockdev 
│   ├── prebuilts
│   ├── rkbin 
│   ├── -> device/rockchip/common/ flashing script
│   ├── rootfs directory of debian's root file system
│   ├── tools tools and utilities for flashing and packaging
│   └── u-boot u-boot

6.1.1 Update Buildroot Configurations

  • List Available Configurations
cd buildroot
make list-defconfigs

Here is what you would get:
rockchip_rk3399_defconfig - Build for rockchip_rk3399

  • Update Configurations Using menuconfig
make rockchip_rk3399_defconfig
make menuconfig
make savedefconfig
diff .defconfig configs/rockchip_rk3399_defconfig 
cp .defconfig configs/rockchip_rk3399_defconfig
  • Recompile
cd ../
./ rootfs

6.2 Customize File System

Put your files in the friendlyelec/rk3399/fs-overlay-64 directory and recompile "rootfs"

6.3 Update U-boot and Kernel

You can do it by directly updating the files in the u-boot and kernel directories.

6.4 Use Cross Compiler in SDK

export PATH=$PWD/buildroot/output/rockchip_rk3399/host/bin/:$PATH
aarch64-buildroot-linux-gnu-g++ -v

Version information:
gcc version 6.4.0 (Buildroot 2018.02-rc3-g4f000a0797)

6.5 Cross Compile Qt Program

git clone
cd QtE-Demo

You can auto-run your Qt program on system boot. For example you want to auto-run a QtE-Demo program. Firstly you can copy the QtE-Demo to your board, open and edit the S50launcher file under the "/etc/init.d/" directory, replace "/usr/local/QLauncher/QLauncher &" with the full path of your QtE-Demo program.

7 Q&A

7.1 Generate Image File for Flashing with USB Type-C

After you run the " emmc-img" command a "buildroot" directory will be generated under the "friendlyelec/rk3399/sd-fuse_rk3399" directory. You can use the android_tools to load all the files under this "buildroot" directory.

8 Update Log

8.1 May-16-2019

  • Released English version