Android 12 system compilation

Hardware configuration

Recommended hardware configuration for compiling Android 12 development environment:

  • 64-bit CPU

  • Ubuntu20.04 system. Don’t use Windows Subsystem (WSL)

  • 16GB RAM

  • 250GB of free space for compilation

  • Compile with normal users, don’t compile with root

In addition, please refer to the official Google documentation for hardware and software configurations:

Software configuration

Install the environment package

sudo apt update
sudo apt-get install git-core gnupg flex bison build-essential zip curl \
  zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev \
  x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip \
  fontconfig liblz4-tool libxml2-utils libssl-dev

Obtain the SDK

Send an email to support@neardi.com to get the relevant development materials

After the download is complete, check whether the MD5 code is the same as that in the LKD3588-SDK-Android-${Version}.tar.gz.md5sum before unzipping:

$ md5sum Neardi-3588-SDK-Android-${Version}-split.tar.gz*
********************************  Neardi-3588-SDK-Android-${Version}-split.tar.gzaa
********************************  Neardi-3588-SDK-Android-${Version}-split.tar.gzab
********************************  Neardi-3588-SDK-Android-${Version}-split.tar.gzac
********************************  Neardi-3588-SDK-Android-${Version}-split.tar.gzad
********************************  Neardi-3588-SDK-Android-${Version}-split.tar.gzae
********************************  Neardi-3588-SDK-Android-${Version}-split.tar.gzaf

Merge and decompress:

Please use the current Ubuntu system user to directly decompress the file to avoid decompressing it in the Windows system and then copying it to the Ubuntu system. Doing this ensures that file attributes and permissions are correct and avoids potential compatibility issues

$ cat Neardi-3588-SDK-Android-${Version}-split.tar.gz* > Neardi-3588-SDK-Android-${Version}.tar.gz
$ tar -zxf Neardi-3588-SDK-Android-${Version}.tar.gz

Extract:

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

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

Fully automatic compilation

Fully automated compilation performs all compilation, packaging, and directly generates RK firmware.

./build.sh -AKUpu

The script will copy the compiled firmware to the rockdev/Image-rk3588_s/ directory, and the specific path is subject to the actual generation. Each compilation will create a new directory to save it, automatically back up the firmware version of the debugging development process, and store all kinds of information about the firmware version. The update.img in this directory can be directly used to download updates from Android development tools and factory programming tools.

Partition image

update.img is a firmware that is released to end users to facilitate the upgrade of the development board. In actual development, it is more common to modify and burn a single partition image file, which greatly saves development time.

Image file list:

  • boot.img: Android’s initramfs image, which contains the underlying file system of the Android root, is responsible for initializing and loading the system partition.

  • system.img: Android file system partition image in ext4 file system format.

  • kernel.img: Kernel image.

  • resource.img: Resource image, containing the boot picture and kernel device tree.

  • misc.img: Misc partition image, which is responsible for switching the boot mode and passing the rescue mode parameters.

  • recovery.img: Recovery mode image.

  • rk3568_loader_xxx.bin: Loader file.

  • uboot.img: U-Boot image file.

  • trust.img: Arm trusted file (ATF) image file.

  • parameter.txt: Partition layout and kernel command line.

Compile the firmware

Compile U-Boot

./build.sh -U

Compile the kernel

./build.sh -K

Compile Android

make installclean
./build.sh -A

Package the firmware

After the compilation is complete, all partition images are packaged into the RK firmware format for burning:

./build.sh -u