这里提供两种编译方案,如果要直接编译就选方案一,如果想用docker编译就选方案二。
注意事项:
1. SDK 采用交叉编译,所以要在 X86_64 电脑上使用 SDK,不要将 SDK 下载到板子上。
2. 编译环境请使用 Ubuntu20.04(真机或 docker 容器),如果使用其他版本可能导致编译出错。
3. 不要在虚拟机共享文件夹以及非英文目录存放、解压SDK。
4. 获取、编译 SDK 请全程使用普通用户,不允许也不需要使用 root 权限(除非需要 apt 安装软件)
编译 Android 对机器的配置要求较高:
如果使用的是16g物理内存,要完成编译Android13源,需要再增加16G的交换内存,以下是增加交换内存步骤。
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon --show
sudo vim /etc/fstab
## 增加以下内容
/swapfile swap swap defaults 0 0
从以下的百度网盘下载源码压缩包。
解压源码步骤:
# v2版本
cat R1_Android13_SourceV3.tar.gz* | tar -zxvf -
.repo/repo/repo sync -l
# v3版本
mkdir r1_sdk
cat r1_android13_release_v3.0_20241002_sdk.tar.gz* | tar -zxvf - -C r1_sdk
cd r1_sdk
.repo/repo/repo sync -l
mkdir -p out/target/product/rk3588s_t/
mv obj* out/target/product/rk3588s_t/
在编译源码前需要安装一系列环境依赖。
sudo apt-get update
sudo apt-get install git gnupg flex bison gperf libsdl1.2-dev \
libesd-java libwxgtk3.0-dev squashfs-tools build-essential zip curl \
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils \
xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev \
lib32readline-dev gcc-multilib libswitch-perl libssl-dev unzip zip device-tree-compiler \
liblz4-tool python-pyelftools python3-pyelftools -y
完整编译是将一系列分区固件如uboot、boot分区固件合并成一个完整的固件,烧录完整固件相比于分区烧录操作简单。
source build/envsetup.sh
lunch rk3588s_t-userdebug
./build.sh -UKAu
分区编译是将各个分区源码单独编译成分区固件,分区固件体积相比于完整固件小很多,在驱动调试中,单独烧写对应的分区固件,无须烧录其他分区。大大提高烧录固件速度,以及调试速度。
source build/envsetup.sh
lunch rk3588s_t-userdebug
uboot
cd u-boot
./make.sh rk3588
kernel
cd kernel
make CROSS_COMPILE=../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- ARCH=arm64 rockchip_linux_defconfig rk3588_linux.config
make CROSS_COMPILE=../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- ARCH=arm64 rk3588s-yyt.img
android
source build/envsetup.sh
lunch youyeetooR1-userdebug
make installclean
make -j8
./mkimage.sh
./build.sh -u
在编译源码前需要安装一系列环境依赖。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
sudo groupadd docker
sudo usermod -aG docker $USER
sudo reboot
sudo systemctl status docker
完整编译是将一系列分区固件如uboot、boot分区固件合并成一个完整的固件,烧录完整固件相比于分区烧录操作简单。
./docker/docker-rm.sh
./docker/docker-start.sh
source build/envsetup.sh
lunch rk3588s_t-userdebug
./build.sh -UKAu
分区编译是将各个分区源码单独编译成分区固件,分区固件体积相比于完整固件小很多,在驱动调试中,单独烧写对应的分区固件,无须烧录其他分区。大大提高烧录固件速度,以及调试速度。
./docker/docker-rm.sh
./docker/docker-start.sh
uboot
cd u-boot
./make.sh rk3588
kernel
cd kernel
make ARCH=arm64 CROSS_COMPILE=../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- rockchip_linux_defconfig rk3588_linux.config
make ARCH=arm64 CROSS_COMPILE=../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- rk3588s-yyt.img
android
source build/envsetup.sh
lunch rk3588s_t-userdebug
make installclean
make -j8
./mkimage.sh
./build.sh -u