Ubuntu系统编译

硬件配置

编译 Ubuntu 开发环境硬件配置建议:

  • 64 位 CPU

  • Ubuntu20.04系统

  • 16GB 内存

  • 250GB 空闲空间用来编译

  • 普通用户编译,不要使用 root 用户编译

软件配置

安装环境包

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获取

发送邮件至 support@neardi.com 获取相关开发资料

下载完成后,在解压前先查看 MD5 码和Neardi-3588-SDK-Linux-${Version}.tar.gz.md5sum中是否一致:

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

解压:

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

提取:

cd Neardi-3588-SDK-Linux-${Version}
git reset --hard

切换分支:

branch explain
LZ16000002 Neardi master branch
git checkout LZ16000002

编译 SDK

选择配置

boardConfig explain
BoardConfig-rk3588-neardi-linux-lpb3588-f0.mk HDMIIN + HDMI1 + HDMI2 + HDMI3 + DP
./build.sh lunch BoardConfig-rk3588-neardi-linux-lpb3588-f0.mk

全自动编译

第一次编译SDK,务必全编一次,否则打包会出错

全自动编译会执行所有编译, 编译生成u-boot、kernel和buildroot。

./build.sh

部分编译

  • 编译 u-boot

./build.sh uboot
  • 编译 kernel

./build.sh kernel
  • 编译 recovery

./build.sh recovery

编译Ubuntu

20.04系统(主要维护)

./build.sh focal

22.04系统(暂不维护)

./build.sh jammy

打包固件

RK 固件,是以 Rockchip 专有格式打包的固件,使用 Rockchip 提供的工具可以烧写到 eMMC 或者 SD 卡中(注:若无特殊说明,WIKI 上提及的固件默认为 RK 固件)。

# 打包 RK 固件
./build.sh updateimg

生成的完整固件会保存到 rockdev/update.img

分区说明

parameter 分区表

parameter.txt 文件中包含了固件的分区信息:

路径: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

CMDLINE 属性是我们关注的地方,以 uboot 为例, 0x00002000@0x00004000(uboot) 中 0x00004000 为uboot 分区的起始位置,0x00002000 为分区的大小,以此类推。

package-file

package-file 文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与 parameter.txt 文件保持一致。

路径: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