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 -- h
USAGE: [-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-user2. PX30_Android12-userdebug3. aosp_arm-eng4. aosp_arm64-eng5. aosp_blueline-userdebug6. aosp_blueline_car-userdebug7. aosp_bonito-userdebug8. aosp_bonito_car-userdebug9. aosp_bramble_car-userdebug10. aosp_cf_arm64_auto-userdebug11. aosp_cf_arm64_phone-userdebug12. aosp_cf_x86_64_foldable-userdebug13. aosp_cf_x86_64_pc-userdebug14. aosp_cf_x86_64_phone-userdebug15. aosp_cf_x86_64_tv-userdebug16. aosp_cf_x86_auto-userdebug17. aosp_cf_x86_phone-userdebug18. aosp_cf_x86_tv-userdebug19. aosp_coral_car-userdebug20. aosp_crosshatch-userdebug21. aosp_crosshatch_car-userdebug22. aosp_crosshatch_vf-userdebug23. aosp_flame_car-userdebug24. aosp_oriole_car-userdebug25. aosp_raven_car-userdebug26. aosp_redfin_car-userdebug27. aosp_sargo-userdebug28. aosp_sargo_car-userdebug29. aosp_slider-userdebug30. aosp_sunfish_car-userdebug31. aosp_whitefin-userdebug32. aosp_x86-eng33. aosp_x86_64-eng34. arm_krait-eng35. arm_v7_v8-eng36. armv8-eng37. armv8_cortex_a55-eng38. armv8_kryo385-eng39. beagle_x15-userdebug40. beagle_x15_auto-userdebug41. fuchsia_arm64-eng42. fuchsia_x86_64-eng43. hikey-userdebug44. hikey64_only-userdebug45. hikey960-userdebug46. hikey960_tv-userdebug47. hikey_tv-userdebug48. qemu_trusty_arm64-userdebug49. rk3326_pie-user50. rk3326_pie-userdebug51. rk3326_q-user52. rk3326_q-userdebug53. rk3326_r-user54. rk3326_r-userdebug55. rk3326_s-user56. rk3326_s-userdebug57. rk3326_sgo-user58. rk3326_sgo-userdebug59. rk3368_Android12-user60. rk3368_Android12-userdebug61. rk3368_pie-user62. rk3368_pie-userdebug63. rk3399_Android10-user64. rk3399_Android10-userdebug65. rk3399_Android11-user66. rk3399_Android11-userdebug67. rk3399_Android12-user68. rk3399_Android12-userdebug69. rk3399_mid-user70. rk3399_mid-userdebug71. rk3566_32bit-user72. rk3566_32bit-userdebug73. rk3566_eink-user74. rk3566_eink-userdebug75. rk3566_einkw6-user76. rk3566_einkw6-userdebug77. rk3566_r-user78. rk3566_r-userdebug79. rk3566_s-user80. rk3566_s-userdebug81. rk3566_sgo-user82. rk3566_sgo-userdebug83. rk3568_s-user84. rk3568_s-userdebug85. rk3588_box-user86. rk3588_box-userdebug87. rk3588_s-user88. rk3588_s-userdebug89. rk3588_s_evb2-user90. rk3588_s_evb2-userdebug91. rk3588_s_evb7-user92. rk3588_s_evb7-userdebug93. rk3588_xr-user94. rk3588_xr-userdebug95. rk3588s_s-user96. rk3588s_s-userdebug97. sdk_car_arm-userdebug98. sdk_car_arm64-userdebug99. sdk_car_portrait_x86_64-userdebug100. sdk_car_x86-userdebug101. sdk_car_x86_64-userdebug102. silvermont-eng103. uml-userdebug104. yukawa-userdebug105. 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.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'
  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时需要先在工具上更新机器里面的分区信息,然后在烧写,避免烧错分区导致无法开机。

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

Rockchip RK3588 Android SDK编译方法相关推荐

  1. Rockchip RK3588 Android平台固件烧写工具汇总

    Rockchip RK3588 Android平台固件烧写工具汇总 文章目录 Rockchip RK3588 Android平台固件烧写工具汇总 开发工具AndroidTool桌面版 适用场景 功能列 ...

  2. Rockchip RK3588 Android+Linux双系统方案的实现

    Rockchip RK3588 Android+Linux双系统方案的实现 文章目录 Rockchip RK3588 Android+Linux双系统方案的实现 概述 硬件环境 软件环境 要求 代码修 ...

  3. 基于Rockchip RK3588 Android12 SDK搭建自己的repo 仓库服务器

    基于Rockchip RK3588 Android12 SDK搭建自己的repo 仓库服务器 文章目录 基于Rockchip RK3588 Android12 SDK搭建自己的repo 仓库服务器 搭 ...

  4. ubuntu系统安装安卓模拟器(Android SDK)的方法

    ubuntu或者别的linux系统安装安卓模拟器(Android SDK)的方法跟Windows差不多,今天安卓部落就教大家怎么样在ubuntu环境下安装安卓模拟器. 首先下载Android SDK ...

  5. 全志 android 编译,全志Android SDK编译详解(二)

    注意要确定安装了jdk) 第一步: cd  lichee; ./build.sh  -p sun5i_elite -k 3.0  (apt-get install uboot-mkimage需要安装m ...

  6. Android SDK在线更新方法

    虽然国内google被墙了,但仍可利用国内的某些镜像网站实现Android SDK在线更新,使用方法如下: 1.启动 Android SDK Manager ,打开主界面,依次选择『Tools』.『O ...

  7. linux系统 安卓系统安装教程,Linux系统下安装android sdk的方法步骤

    本文阐述的是如何在Linux系统中安装Android SDK 环境,下面话不多说,来看看详细的介绍吧. 直接下载解压: wget http://dl.google.com/android/androi ...

  8. twitter官方Android sdk部署方法

    推特推出了自家的sdk,不过是放在fabric这个插件里一起发布的,所以多数人并不知道有这么个东西.而且这个fabric在Android Studio中很方便使用,但是在eclipse里就需要手动去配 ...

  9. Android反编译方法

    Google Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构, ...

最新文章

  1. linux超级基础系列——shell变量(本地变量和环境变量)
  2. 前端学习 -- Css -- 伪元素
  3. springboot 问题总结
  4. 上海交通大学出版社python答案_线性代数答案上海交通大学出版社
  5. 第5章 Python 数字图像处理(DIP) - 图像复原与重建8 - 估计噪声参数
  6. nginx header参数丢失_某Nginx后门分析与重现
  7. java asynchronize_Java 中synchronize函数的实例详解
  8. 串口输出换行_stm32初学者必会操作----usart串口调试工具
  9. python之旅-day2(较基础阶段)
  10. 如何使用nginx配置SSL证书?
  11. 36氪首发|一年完成三轮融资,STEAM 教育内容供应商「唯科乐」获 Pre-A 轮融资...
  12. c语言教程求反符号,c语言“或”符号
  13. 农银电商项目学习笔记(一)
  14. 统计数据库表中记录数
  15. MAC和夜神模拟器配置adb适配报错
  16. word通配符,查找与替换
  17. 桥接模式和装饰器模式
  18. 小白程序员的学习路线
  19. Node.js的卸载
  20. 汉诺塔(河内塔)问题

热门文章

  1. IBM转型认知计算和云平台
  2. SDK接入(2)之Android Google Play内支付(in-app Billing)接入
  3. leaflet中文API说明
  4. 硕士如何打造一份靓丽的简历
  5. Kylin集群部署及基本架构简介
  6. Django-simpleUi项目开发流程
  7. Android easeui 3.0 即时通讯 我踩过的坑---小米
  8. CC00006.elasticsearch——|HadoopElasticSearch.V06|——|ELK.v06|集群|ElasticSearch集群部署.V1|
  9. 3DS Max、Maya、SoftImage、houdini对比
  10. [原创] 网站联盟 账号通行证 一次登陆,畅通www