3. 编译 Android12.0 固件

3.1. 下载 Android12.0 SDK

SDK 源码与 bundle 压缩包均存放在云盘中。

3.1.1. 下载 SDK

  • SDK通过邮件的方式获取,把订单号发送到sales@t-firefly.com邮箱并注明需要的SDK名称firefly_rk3588_android12.0_git_20220311

  • 下载完成后,在解压前先校验下 MD5 码:

    $ md5sum /path/to/firefly_rk3588_android12.0_git_20220311.7z.001
    $ md5sum /path/to/firefly_rk3588_android12.0_git_20220311.7z.002
    $ md5sum /path/to/firefly_rk3588_android12.0_git_20220311.7z.003
    $ md5sum /path/to/firefly_rk3588_android12.0_git_20220311.7z.004
    $ md5sum /path/to/firefly_rk3588_android12.0_git_20220311.7z.005
    $ md5sum /path/to/firefly_rk3588_android12.0_git_20220311.7z.006
    
    8f48ca82f247426d0a7111b851d65f0f  firefly_rk3588_android12.0_git_20220311.7z.001
    e99d68485860b86c2ec5b67aeda7249d  firefly_rk3588_android12.0_git_20220311.7z.002
    cb45fc9e39848b459398467c08acd6f1  firefly_rk3588_android12.0_git_20220311.7z.003
    7774a64cc73dbf4381c100ad1d703fa9  firefly_rk3588_android12.0_git_20220311.7z.004
    cd53c8c752a5162a0638da1cf9a0ed8f  firefly_rk3588_android12.0_git_20220311.7z.005
    fd7744c8098791a8f1dd62527fcac32c  firefly_rk3588_android12.0_git_20220311.7z.006
    
  • 然后解压:

    cd ~/proj/
    7z x ./firefly_rk3588_android12.0_git_20220311.7z.001 -oRK3588_Android12.0
    cd ./RK3588_Android12.0
    git reset --hard
    

注意:不要在共享文件夹、挂载文件夹以及非英文目录解压SDK,避免产生不必要的错误

3.1.2. 更新 SDK

下载 SDK 后,从 gitlab 处更新代码的方法:

#1. 进入 SDK 根目录
cd ~/proj/RK3588_Android12.0

#2. 下载远程 bundle 仓库
git clone https://gitlab.com/T-Firefly/rk3588-android12.0-bundle.git .bundle

#3. bundle仓库会随着更新的资源越多而会越来越大,如果bundle仓库下载速度缓慢或若下载失败,
#   请在资源下载界面选择对应的机器bundle文件进行下载并解压到SDK根目录,解压指令如下:

7z x rk3588-android12.0-bundle.7z  -r -o. && mv rk3588-android12.0-bundle .bundle

#4. 更新 SDK,并且后续更新不需要再次拉取远程仓库,直接执行以下命令即可
.bundle/update

#5. 按照提示已经更新内容到 FETCH_HEAD,同步 FETCH_HEAD 到 firefly 分支
git rebase FETCH_HEAD

下载页面选择云盘下载 Android12.0 Bundle

3.2. Core-3588J 产品编译方法

3.2.1. 整体编译

3.2.1.1. HDMI 固件编译

./FFTools/make.sh -d rk3588-firefly-itx-3588j -j8 -l rk3588_firefly_itx_3588j-userdebug
./FFTools/mkupdate/mkupdate.sh -l rk3588_firefly_itx_3588j-userdebug

3.2.1.2. 显示屏 DM-M10R800 V2 固件编译:

./FFTools/make.sh -d rk3588-firefly-itx-3588j-mipi101-M101014-BE45-A1 -j8 -l rk3588_firefly_itx_3588j_mipi-userdebug
./FFTools/mkupdate/mkupdate.sh -l rk3588_firefly_itx_3588j_mipi-userdebug

3.2.2. 分步编译

  • 编译 kernel:

cd ~/path/to/sdk/kernel-5.10
export PATH=../prebuilts/clang/host/linux-x86/clang-r416183b/bin:$PATH
alias msk='make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1'
msk ARCH=arm64  firefly_defconfig android-11.config pcie_wifi.config
msk ARCH=arm64   BOOT_IMG=../rockdev/Image-rk3588_firefly_itx_3588j/boot.img rk3588-firefly-itx-3588j.img -j8
  • 编译 uboot:

cd ~/path/to/sdk/u-boot/
./make.sh rk3588
  • 编译 Android:

cd ~/path/to/sdk/
source build/envsetup.sh
lunch rk3588_firefly_itx_3588j-userdebug
make installclean
make -j8
./mkimage.sh

3.2.3. 打包成统一固件 update.img

编译完可以用Firefly官方的脚本打包成统一固件,执行如下命令:

./FFTools/mkupdate/mkupdate.sh -l rk3588_firefly_itx_3588j-userdebug

打包完成后将在rockdev/Image-XXX/ 目录下生成统一固件: product名XXX_XXX_日期XXX.img

在 Windows 下打包统一固件 update.img 也很简单,将编译生成的文件拷贝到 AndroidTool 的 rockdev\Image 目录中,然后运行 rockdev 目录下的 mkupdate.bat 批处理文件即可创建 update.img 并存放到 rockdev\Image 目录里。

3.3. OTA 编译

3.3.1. Firefly 完整OTA编译和升级

3.3.1.1. 添加-o 参数进行OTA全局编译

./FFTools/make.sh -d rk3588-firefly-itx-3588j -j8 -l rk3588_firefly_itx_3588j-userdebug -o

3.3.1.2. 生成完整包路径

out/target/product/rk3588_firefly_itx_3588j/rk3588_firefly_itx_3588j-ota-eng.xxx.zip 

3.3.1.3. 生成基础素材包路径

out/target/product/rk3588_firefly_itx_3588j/obj/PACKAGING/target_files_intermediates/rk3588_firefly_itx_3588j-target_files-eng.xxx.zip

拷贝基础素材包并重新命名,主要用在差分包升级。

cp out/target/product/rk3588_firefly_itx_3588j/obj/PACKAGING/target_files_intermediates/rk3588_firefly_itx_3588j-target_files-eng.xxx.zip ~/ota/v1.zip 

3.3.1.4. 打包编译的固件和升级

./FFTools/mkupdate/mkupdate.sh -l rk3588_firefly_itx_3588j-userdebug

rockdev/Image-rk3588_firefly_itx_3588j/ 目录下,找到对应的固件烧录到机器,此后机器就可以进行全量包升级和差分包升级, 把刚刚编译的完整包命名rk3588_firefly_itx_3588j-ota-eng.xxx.zip 为update.zip 放到/sdcard/目录下重启,并按照提示进行全量包升级。

3.3.2. OTA 差分包生成

3.3.2.1. 生成新的基础素材包

如上已经制作了v1.zip的基础素材包,需要再做一个v2.zip的素材包才能生成差分包,需修改内核dts相关代码或android的代码,然后重新执行命令

./FFTools/make.sh -d rk3588-firefly-itx-3588j -j8 -l rk3588_firefly_itx_3588j-userdebug -o

重新生成新的基础素材包我们可以进行拷贝

 cp out/target/product/rk3588_firefly_itx_3588j/obj/PACKAGING/target_files_intermediates/rk3588_firefly_itx_3588j-target_files-eng.xxx.zip  ~/ota/v2.zip

3.3.2.2. 生成差分包命令

out/host/linux-x86/bin/ota_from_target_files --block -v -i ~/ota/v1.zip -p out/host/linux-x86/ -k build/target/product/security/testkey ~/ota/v2.zip update.zip

3.3.2.3. 升级OTA差分包

把update.zip 放到机器sdcard目录下重启,就会自动识别到,然后按步骤点击升级即可完成。

3.3.3. OTA 服务器搭建

参考OTA 文档搭建服务器。