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