Ubuntu System Compilation

Hardware Configuration

Recommended hardware configuration for compiling Ubuntu development environment:

  • 64-bit CPU

  • Ubuntu 20.04, do not use Windows Subsystem (WSL)

  • 16GB of RAM

  • 250GB free space for compiling

  • Normal user to compile, do not use root user to compile

Software Configuration

Installation 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

Get SDK

Email support@neardi.com for development materials

After downloading, check the MD5 code and Neardi-3588-SDK-Linux-${Version}.tar.gz.md5sum for consistency before unzipping:

$ md5sum Neardi-3588-SDK-Linux-${Version}.tar.gz
******************************** Neardi-3588-SDK-Linux-${Version}tar.gz

Unzip:

** Please use the current Ubuntu system user to unzip the file directly, avoid unzipping it in Windows and then copying it to Ubuntu. Doing so ensures that the file attributes and permissions are correct and avoids potential compatibility issues **

tar zxvf Neardi-3588-SDK-Linux-${Version}.tar.gz

Extract:

cd Neardi-3588-SDK-Linux-${Version}

# Be sure to execute it, otherwise there will only be a .git directory and no source code.
git reset --hard

Compile the SDK

Select the configuration

boardConfig explain
BoardConfig-rk3588-neardi-linux-lpa3588-f0.mk AHDx8x1080p + HDMIIN + HDMI1 + HDMI2 + HDMI3 + DP
BoardConfig-rk3588-neardi-linux-lpa3588-f2.mk AHDx8x1080p + EV101WXM 10.1inc + HDMIIN + HDMI1 + HDMI2 + HDMI3 + DP
./build.sh lunch
Default selection: BoardConfig-rk3588-neardi-linux-lpa3588-f0.mk

Fully automatic compilation

The first time you compile the SDK, make sure you compile it all at once, otherwise the package will be wrong.

Full auto-compile will perform all the compilation to generate u-boot, kernel and buildroot.

./build.sh

Compile Ubuntu

20.04 system (main maintenance)

./build.sh focal

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:

Path:device/rockchip/rk3588/parameter.txt

FIRMWARE_VER: 1.0
MACHINE_MODEL: RK3588
MACHINE_ID: 007
MANUFACTURER: RK3588
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),0x00040000@0x00028000(recovery),0x00010000@0x00068000(backup),-@0x00078000(rootfs:grow)
uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
uuid:boot=7A3F0000-0000-446A-8000-702F00006273

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/rk3588-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
backup          RESERVED

FAQ

How to compile separately

  • Compile u-boot

./build.sh uboot
  • Compile kernel

./build.sh kernel
  • Compile recovery

./build.sh recovery

How to compile the 22.04 system (not maintained yet)

./build.sh jammy

Compilation Errors

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