Buildroot Compilation

Buildroot is a framework for building embedded Linux systems on the Linux platform. The entire Buildroot consists of Makefile (*.mk) scripts and Kconfig (Config.in) configuration files. Similar to compiling the Linux kernel, you can configure and modify Buildroot using menuconfig, and compile a complete Linux system software that can be directly flashed onto a machine for execution (including boot, kernel, rootfs, and various libraries and applications within rootfs). For more information on Buildroot development, please refer to the official 《Development Manual》

Hardware Configuration

Recommended hardware configuration for compiling Ubuntu development environment:

  • 64-bit CPU

  • Ubuntu 20.04 system

  • 16GB memory

  • 250GB free space for compilation

  • Compile as a regular user, do not compile as root

Software Configuration

Install environment packages

sudo apt update
sudo apt-get install git ssh make gcc libssl-dev liblz4-tool \
expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib \
unzip device-tree-compiler libncurses-dev

sudo pip install python-pip pyelftools

SDK Acquisition

Send an email to support@neardi.com to obtain related development materials. Before unzipping after downloading, check whether the MD5 code matches with Neardi-3568-SDK-Linux-Version.tar.gz.md5sum:

$ md5sum Neardi-3568-SDK-Linux-Version.tar.gz
******************************** Neardi-3568-SDK-Linux-Version.tar.gz

Unzip:

tar zxvf Neardi-3568-SDK-Linux-Version.tar.gz

Extract:

cd Neardi-3568-SDK-Linux-Version
git reset --hard

Switch branches:

branch explain
LZ12000003 Neardi master branch
git checkout LZ12000003

Compile SDK

Configure Voltage Domains

For the first compilation, you must fill out the following table to ensure that the actual hardware connection and software configuration match. If they do not match, it may cause hardware damage. For details, please refer to the chapter 《Configuring Voltage Domains》.

IO domain Actual Voltage Used Configurable Voltage Voltage Source Remarks
PMUIO2 3.3V 1.8/3.3 LDO6
VCCIO1 3.3V 1.8/3.3 LDO4/VCCIO_ACODEC Group with 809Codec
VCCIO3 3.3V 1.8/3.3 LDO5/VCCIO_SD Group with SD card
VCCIO4 1.8V 1.8/3.3 BUCK5 Group with BT/WIFI
VCCIO5 3.3V 1.8/3.3 VCC3V3_SYS Group with PCIE
VCCIO6 1.8V 1.8/3.3 BUCK5 Group with GMAC
VCCIO7 3.3V 1.8/3.3 VCC3V3_SYS

Select Configuration

boardConfig explain
BoardConfig-rk3568-neardi-linux-lz120-f0.mk HDMI1 + HDMI2 + HDMIIN
BoardConfig-rk3568-neardi-linux-lz120-f1.mk VGA + HDMI2 + HDMIIN
BoardConfig-rk3568-neardi-linux-lz120-f2.mk EV101WXM-N10 10.1inc LVDS + HDMIIN
BoardConfig-rk3568-neardi-linux-lz120-f3.mk HDMI1 + HDMI2 + OV13855
./build.sh lunch BoardConfig-rk3568-neardi-linux-lz120-f0.mk

Note: If theBoardConfig-rk3568-neardi-linux-lz120-f0.mk option is not available, you can select BoardConfig-rk3568-neardi-linux-lc120.mk

Fully Automatic Compilation

For the first compilation of the SDK, it is imperative to compile everything once, otherwise packaging will fail.

Fully automatic compilation will execute all compilations, generating u-boot, kernel, and buildroot.

./build.sh

Partial Compilation

  • Compile u-boot

./build.sh uboot
  • Compile kernel

./build.sh kernel
  • Compile recovery

./build.sh recovery

Compile Buildroot

./build.sh rootfs

Packaging Firmware

RK firmware is packaged in a proprietary format by Rockchip, and can be flashed onto eMMC or SD card using tools provided by Rockchip (Note: Unless specified otherwise, the firmware mentioned on the WIKI by default refers to RK firmware).

# Package RK firmware
./build.sh updateimg

The complete firmware will be saved to  rockdev/update.img

Partition Explanation

Parameter Partition Table

The parameter.txt file contains the partition information of the firmware, taking parameter-buildroot-fit.txt as an example:

Path:device/rockchip/rk356x/parameter-buildroot-fit.txt

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3568
MACHINE_ID: 007
MANUFACTURER: RK3568
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 0xffffffff
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00020000@0x00008000(boot),0x00020000@0x00028000(recovery),0x00010000@0x00048000(backup),-@0x00058000(rootfs:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

The CMDLINE attribute is our focus. Taking uboot as an example, in 0x00002000@0x00004000(uboot), 0x00004000 is the starting position of the uboot partition, and 0x00002000 is the size of the partition, and so on.

package-file

The package-file is used to determine the required partition images and image paths when packaging firmware, and it needs to be consistent with the parameter.txt file.

Path:tools/linux/Linux_Pack_Firmware/rockdev/package-file

# NAME          Relative path
#
#HWDEF          HWDEF
package-file    package-file
bootloader      Image/MiniLoaderAll.bin
parameter       Image/parameter.txt
uboot           Image/uboot.img
misc            Image/misc.img
boot            Image/boot.img
recovery        Image/recovery.img
rootfs          Image/rootfs.img
userdata        RESERVED
backup          RESERVED

FAQ

Compilation Errors

dl File Download Unsuccessful

Please download LKD3568-Buildroot-DL.tar.gz from the following network disk and unzip it to replace the  buildroot/dl  directory:

tar zxvf LKD3568-Buildroot-DL.tar.gz
cp -rf LKD3568-Buildroot-DL/dl LKD3568-SDK-Linux-V1.0/buildroot/

lz4 Error

Incorrect parameters
Usage :
      lz4 [arg] [input] [output]

input   : a filename
          with no FILE, or when FILE is - or stdin, read standard input
Arguments :
 -1     : Fast compression (default) 
 -9     : High compression 
 -d     : decompression (default for .lz4 extension)
 -z     : force compression
 -f     : overwrite output without prompting 
 -h/-H  : display help/long help and exit
arch/arm64/boot/Makefile:31: recipe for target 'arch/arm64/boot/Image.lz4' failed
make[2]: *** [arch/arm64/boot/Image.lz4] Error 1
make[2]: *** Deleting file 'arch/arm64/boot/Image.lz4'
arch/arm64/Makefile:170: recipe for target 'Image.lz4' failed
make[1]: *** [Image.lz4] Error 2
make[1]: *** Waiting for unfinished jobs....

Workaround, re-install LZ4 manually:

git clone https://github.com/lz4/lz4.git
cd lz4
make
sudo make install