当前位置:   article > 正文

Rockchip RK3588 Android SDK编译方法

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可以看到脚本的使用方法

  1. @sys2_206:~/3_Android12_29_debug$ ./build.sh -h
  2. ./build.sh: illegal option -- h
  3. USAGE: [-U] [-CK] [-A] [-p] [-o] [-u] [-v VERSION_NAME]
  4. No ARGS means use default build option
  5. WHERE: -U = build uboot
  6. -C = build kernel with Clang
  7. -K = build kernel
  8. -A = build android
  9. -p = will build packaging in IMAGE
  10. -o = build OTA package
  11. -u = build update.img
  12. -v = build android with 'user' or 'userdebug'
  13. -d = huild kernel dts name
  14. -V = build version
  15. -J = build jobs
  16. -m = build multi dtb

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/311713
推荐阅读
相关标签
  

闽ICP备14008679号