> 文档中心 > Rockchip RK3588 Android SDK编译方法

Rockchip RK3588 Android SDK编译方法


Rockchip RK3588 Android SDK编译方法

Rockchip RK3588 Android SDK在原始Android的编译方式的基础上封装了一个编译脚本build.sh,用来简化编译命令,下面介绍build.sh脚本编译的使用

build.sh的源文件路径在device/rockchip/common/build/rockchip/build.sh 在执行repo sync更新SDK的是会自动拷贝到SDK的根目录下。

通过build.sh -h可以看到脚本的使用方法

@sys2_206:~/3_Android12_29_debug$ ./build.sh -h./build.sh: illegal option -- hUSAGE: [-U] [-CK] [-A] [-p] [-o] [-u] [-v VERSION_NAME]  No ARGS means use default build option    WHERE: -U = build uboot     -C = build kernel with Clang-K = build kernel    -A = build android   -p = will build packaging in IMAGE      -o = build OTA package      -u = build update.img-v = build android with 'user' or 'userdebug'    -d = huild kernel dts name    -V = build version    -J = build jobs    -m = build multi dtb 

下面具体介绍使用build.sh编译系统的各个模块 。
在新终端中第一次编译需要先执行环境配置和编译产品的选择,如下:

  1. 配置编译环境
@sys2_206:~/3_Android12_29_debug$ source build/envsetup.sh  
  1. lunch 选择需要编译的产品,这里以rk3588_s产品为例说明
wlq@sys2_206:~/3_Android12_29_debug$ lunch You're building on LinuxLunch menu... pick a combo:     1. PX30_Android12-user     2. PX30_Android12-userdebug     3. aosp_arm-eng     4. aosp_arm64-eng     5. aosp_blueline-userdebug     6. aosp_blueline_car-userdebug     7. aosp_bonito-userdebug     8. aosp_bonito_car-userdebug     9. aosp_bramble_car-userdebug     10. aosp_cf_arm64_auto-userdebug     11. aosp_cf_arm64_phone-userdebug     12. aosp_cf_x86_64_foldable-userdebug     13. aosp_cf_x86_64_pc-userdebug     14. aosp_cf_x86_64_phone-userdebug     15. aosp_cf_x86_64_tv-userdebug     16. aosp_cf_x86_auto-userdebug     17. aosp_cf_x86_phone-userdebug     18. aosp_cf_x86_tv-userdebug     19. aosp_coral_car-userdebug     20. aosp_crosshatch-userdebug     21. aosp_crosshatch_car-userdebug     22. aosp_crosshatch_vf-userdebug     23. aosp_flame_car-userdebug     24. aosp_oriole_car-userdebug     25. aosp_raven_car-userdebug     26. aosp_redfin_car-userdebug     27. aosp_sargo-userdebug     28. aosp_sargo_car-userdebug     29. aosp_slider-userdebug     30. aosp_sunfish_car-userdebug     31. aosp_whitefin-userdebug     32. aosp_x86-eng     33. aosp_x86_64-eng     34. arm_krait-eng     35. arm_v7_v8-eng     36. armv8-eng     37. armv8_cortex_a55-eng     38. armv8_kryo385-eng     39. beagle_x15-userdebug     40. beagle_x15_auto-userdebug     41. fuchsia_arm64-eng     42. fuchsia_x86_64-eng     43. hikey-userdebug     44. hikey64_only-userdebug     45. hikey960-userdebug     46. hikey960_tv-userdebug     47. hikey_tv-userdebug     48. qemu_trusty_arm64-userdebug     49. rk3326_pie-user     50. rk3326_pie-userdebug     51. rk3326_q-user     52. rk3326_q-userdebug     53. rk3326_r-user     54. rk3326_r-userdebug     55. rk3326_s-user     56. rk3326_s-userdebug     57. rk3326_sgo-user     58. rk3326_sgo-userdebug     59. rk3368_Android12-user     60. rk3368_Android12-userdebug     61. rk3368_pie-user     62. rk3368_pie-userdebug     63. rk3399_Android10-user     64. rk3399_Android10-userdebug     65. rk3399_Android11-user     66. rk3399_Android11-userdebug     67. rk3399_Android12-user     68. rk3399_Android12-userdebug     69. rk3399_mid-user     70. rk3399_mid-userdebug     71. rk3566_32bit-user     72. rk3566_32bit-userdebug     73. rk3566_eink-user     74. rk3566_eink-userdebug     75. rk3566_einkw6-user     76. rk3566_einkw6-userdebug     77. rk3566_r-user     78. rk3566_r-userdebug     79. rk3566_s-user     80. rk3566_s-userdebug     81. rk3566_sgo-user     82. rk3566_sgo-userdebug     83. rk3568_s-user     84. rk3568_s-userdebug     85. rk3588_box-user     86. rk3588_box-userdebug     87. rk3588_s-user     88. rk3588_s-userdebug     89. rk3588_s_evb2-user     90. rk3588_s_evb2-userdebug     91. rk3588_s_evb7-user     92. rk3588_s_evb7-userdebug     93. rk3588_xr-user     94. rk3588_xr-userdebug     95. rk3588s_s-user     96. rk3588s_s-userdebug     97. sdk_car_arm-userdebug     98. sdk_car_arm64-userdebug     99. sdk_car_portrait_x86_64-userdebug     100. sdk_car_x86-userdebug     101. sdk_car_x86_64-userdebug     102. silvermont-eng     103. uml-userdebug     104. yukawa-userdebug     105. yukawa_sei510-userdebugWhich would you like? [aosp_arm-eng] rk3588_s-userdebug

uboot编译

build.sh的编译命令:

@sys2_206:~/3_Android12_29_debug$ ./build.sh -U

编译后会在u-boot目录下生成uboot.img和rk3588_spl_loader_v1.07.111.bin(不同版本的SDKv1.07.111这个版本会有差异),同时会将这2个文件拷贝到rockdev/Image-rk3588_s/下面对应的uboot.img和MiniLoaderAll.bin,烧写这两个文件即可。

如果只是调试uboot或者rkbin,则可以在uboot目录直接编译,这样速度更快,如下

@sys2_206:~/3_Android12_29_debug/u-boot$ ./make.sh rk3588

这样编译后会在uboot目录下生成uboot.img和rk3588_spl_loader_v1.07.111.bin(不同版本的SDKv1.07.111这个版本会有差异),但是不会拷贝到rockdev/Image-rk3588_s/下面,所以需要烧写uboot目录下的uboot.img和rk3588_spl_loader_v1.07.111.bin(不同版本的SDKv1.07.111这个版本会有差异)。

kernel编译

build.sh的编译命令:

wlq@sys2_206:~/3_Android12_29_debug$ ./build.sh -CAK -d rk3588-evb1-lp4-v10

编译后会在rockdev/Image-rk3588_s/下生成boot.img,烧写这个boot.img即可。
其中:
C表示用clang编译器编译,如果不带C则使用gcc编译,如果需要过GMS认证的google有要求要用clang编译;
-d rk3588-evb1-lp4-v10 这是指定编译的dts;
因为kernel编译完后需要通过android去打包成boot.img,所以这里需要加上A参数,即编译kernel的时需要一起编译Android才能打包boot.img。
通过以上介绍可以知道单独编译kernel需要同时编译Android,导致编译很耗时,针对这个问题我们提供了单独编译kernel生成boot.img的方法,用于kernel的开发和调试,如下:
编译的原理:在kernel-5.10目录下将编译生成的kernel.imgresource.img替换到旧的boot.img中。
RK3588样机为例,编译时替换对应的boot.img及dts:
其中BOOT_IMG=../rockdev/Image-rk3588_s/boot.img这里指定的是旧的boot.img的路径,命令如下:

  1. 导clang到环境
cd kernel-5.10export PATH=../prebuilts/clang/host/linux-x86/clang-r416183b/bin:$PATHalias msk='make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1'
  1. 编译boot.img
msk ARCH=arm64 rockchip_defconfig android-11.config pcie_wifi.config && msk ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3588_s/boot.img rk3588-evb1-lp4-v10.img

编译后可以直接烧写kernel-5.10目录下的boot.img到机器的boot位置

Android编译

build.sh命令

wlq@sys2_206:~/3_Android12_29_debug$ ./build.sh -A

编译完成后会在rockdev/Image-rk3588_s/下生成super.img,烧写这个super.img即可。

打包update.img

build.sh命令
打包update.img需要在uboot、kernel、android都编译完成的情况下才能打包update.img,所以一般在完整编译的时候使用

wlq@sys2_206:~/3_Android12_29_debug$ ./build.sh -u

编译后会在rockdev/Image-rk3588_s/下生成update.img。

完整编译

完整编译会同时编译Android、kernel、uboot并生成update.img
build.sh命令

wlq@sys2_206:~/3_Android12_29_debug$ ./build.sh -AUCKu -d rk3588-evb1-lp4-v10

编译OTA包

编译OTA的命令参数是o,在完整编译的时候使用。
build.sh命令

wlq@sys2_206:~/3_Android12_29_debug$ ./build.sh -AUCKou -d rk3588-evb1-lp4-v10

编译后会在rockdev/Image-rk3588_s/生成上面提到的所有的img,包括update.img已经用于OTA升级的完整包TARGETPRODUCT−ota−∗.zip,以及用于制作差异包的中间文件TARGET_PRODUCT-ota-*.zip,以及用于制作差异包的中间文件TARGETP​RODUCT−ota−∗.zip,以及用于制作差异包的中间文件TARGET_PRODUCT-target_files-*.zip

** 提示**
在单独烧写某个img时需要先在工具上更新机器里面的分区信息,然后在烧写,避免烧错分区导致无法开机。
b240789f8291490690f6c09cbc9c1bab.png#pic_center

烧写update.img到设备中发现固件没有更新的问题解决办法
这个问题是因为使用Androidtool工具烧写的时候在固件加载会进行校验,此时会将固件缓存到内存中,当重新加载固件的时候没有更新缓存导致实际烧写的固件还是之前缓存的固件。解决办法是AndroidTool工具配置关掉固件加载校验功能,具体修改如下:
打开工具所在的目录中的config.ini文件,将FW_NOT_CHECK改为TRUE,然后重启工具即可。
#当设置FW_NOT_CHECK=TRUE时,固件加载时不进行完整性校验
FW_NOT_CHECK=TRUE

中国大学排行榜