高通R、S、T高版本AOSP源码编译指南

高通R、S、T高版本AOSP源码编译指南

做过AOSP源码开发的都知道,只需要经过下面简单的2步即可完成编译环境的引导和初始化。

$ source build/envsetup.sh
$ lunch aosp-eng

如果不清楚自己想要lunch的项目,可以直接执行lunch命令,然后从lunch出来的项目列表中选择需要项目的索引或者项目名称。

编译类型

AOSP编译类型可分为3类,eng、user-debug及user ,三种类型比较如下:
AOSP编译类型

常用命令

AOSP内置了一些简单好用的命令

另外有make命令族


Android自从Q之后实现了动态分区, 将system和vendor等分区打包到一个super分区中,使得super分区中个子分区更加灵活地划分空间,所以高通编译命令也有了一些变化。

高通在Q之后的版本增加qssi的编译过程,那么什么是qssi呢?

qssi

QSSI 是 Qualcomm Single System Image 的缩写,并且高通平台从Android Q开始支持。并且其编译也和Android原生编译有差别,其差别如下:

qssi编译命令

QSSI特性的固件编译流程与通用版本有一定区别。这里的编译过程分为两种模式:Android标准编译模式和高通提供的编译脚本。

需要注意的是,通用版本的Android仍然可以通过make相关的命令直接进行编译,例如执行make superimage或直接使用make命令进行编译。

使用make命令编译

  1. 运行以下命令设置编译环境:
   source build/envsetup.sh
  1. 编译 system.img:
   lunch qssi-userdebug
   make target-files-package
  1. 编译除 system.img 之外的其他 img:
   lunch xx-userdebug
   make target-files-package

使用高通提供的 build.sh 编译

编译所有 img,包括 system.img 和其他 img:

source build/envsetup.sh
lunch XX-userdebug
./build.sh dist -j32

编译 system.img,产物位于 qssi 目录下:

source build/envsetup.sh
lunch xx-userdebug
./build.sh dist qssi_only -j32

编译 super.img:

扫描二维码关注公众号,回复: 17164594 查看本文章
source build/envsetup.sh
lunch xx-userdebug
./build.sh dist merge_only -j32

编译其他 img,例如 vendorimage。如果不指定,则会编译所有其他 img,产物位于 XX 目录下:

source build/envsetup.sh
lunch xx-userdebug
./build.sh vendorimage dist target_only -j32

非QSSI特性的整体编译流程

非QSSI特性的编译流程与之前的Android版本编译过程变化不大,通常按照以下步骤进行:

  1. 复制以下命令以设置编译环境:
 source build/envsetup.sh
  1. 选择合适的配置:
lunch xx-userdebug
  1. 执行make命令进行编译:
make

动态分区烧写

Android Q版本以及以上将systemvendor分区合并为super分区,无法通过adb reboot bootloader模式单独刷动态分区里面的img,例如systemvendorproductodm,只能刷super.img和其他的,但是fastboot模式下可以单独刷动态分区里面的img,其方法如下:

推荐进入fastboot模式刷机:

adb reboot fastboot
fastboot getvar is-userspace
is-userspace: yes
Finished. Total time: 0.002s
fastboot flash vendor vendor.img
fastboot flash system system.img
fastboot flash vbmeta vbmeta.img
fastboot flash vbmeta_system vbmeta_system.img

fastbootd是用户空间的代码,因为动态的逻辑分区只能在应用空间识别。

如果是在Linux下使用fastboot刷机出现权限问题,需要将fastboot的所有者属性改成root

sudo chown root:root fastboot
sudo chmod +s fastboot

猜你喜欢

转载自blog.csdn.net/u011897062/article/details/134784928
今日推荐