高通Android9.0源码兼容不同项目编译环境

Posted bobuddy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高通Android9.0源码兼容不同项目编译环境相关的知识,希望对你有一定的参考价值。

一、envsetup中添加项目的选项

build/make/envsetup.sh
 
PRODUCT_CHOICES=(chenqw_test)     #产品选择列表 这里只有chenqw_test这个项目
# check to see if the supplied variant is valid
function check_develop_product()

    for v in $PRODUCT_CHOICES[@]
    do
        if [ "$v" = "$1" ]
        then
            return 0
        fi
    done
    return 1

 
#添加产品选择 函数
function choose_develop_product()

    echo $1
    T=$(gettop)
    echo "product choices are:"
    local index=1
    local v
 
    for v in $PRODUCT_CHOICES[@]
    do
        # The product name is the name of the directory containing
        # the makefile we found, above.
        echo "     $index. $v"
        index=$(($index+1))
    done
 
    local default_value=evb
    local ANSWER
 
    export DEVELOP_PRODUCT=                   #export成全局变量
    while [ -z "$DEVELOP_PRODUCT" ]
    do
        echo -n "Which would you like? [$default_value] "
 
        if [ -z "$1" ] ; then
            read ANSWER
        else
            echo $1
            ANSWER=$1
        fi
 
        if [ -z "$ANSWER" ] ; then
            export DEVELOP_PRODUCT=$default_value
        elif (echo -n $ANSWER | grep -q -e "^[0-9][0-9]*$") ; then
 
            if [ "$ANSWER" -le "$#PRODUCT_CHOICES[@]" ] ; then
                export DEVELOP_PRODUCT=$PRODUCT_CHOICES[$(($ANSWER-1))]
            fi
        else
 
            if check_develop_product $ANSWER
            then
                export DEVELOP_PRODUCT=$ANSWER
            else
                echo "** Not a valid product: $ANSWER"
            fi
 
        fi
        if [ -n "$1" ] ; then
            break
        fi
    done
 

 
 
 
function lunch()

    local answer
 
.......................
    choose_develop_product     #在lunch的最前面添加选择的项目并export成全局变量
 
......................
 

二、androidBoard.mk文件中根据实际的项目选择对应的kernel config
对于Android的kernel编译控制基本都是在AndroidBoard.mk 中决定,也可以从编译过程的log可以看出

1、配置kerne的config 跟随项目走

device/qcom/msm8953_64/AndroidBoard.mk
 
     else ifneq ($(wildcard kernel/msm-4.9),)
         ifeq ($(TARGET_BUILD_VARIANT),user)
-          KERNEL_DEFCONFIG := msm8953-perf_defconfig            #删掉之前的默认config
+          KERNEL_DEFCONFIG := msm8953-$(DEVELOP_PRODUCT)-perf_defconfig  #添加跟随项目的config
         else
 
-          KERNEL_DEFCONFIG := msm8953_defconfig                   #删掉之前的默认config
+          KERNEL_DEFCONFIG := msm8953-$(DEVELOP_PRODUCT)_defconfig #添加跟随项目的config
         endif
     endif
2、配置自定义的DT_OVERLAY宏,该宏会控制哪些dts使用

ifeq ($(TARGET_KERNEL_VERSION), 4.9)
DTC := $(HOST_OUT_EXECUTABLES)/dtc$(HOST_EXECUTABLE_SUFFIX)
 
TARGET_KERNEL_MAKE_ENV := DTC_EXT=dtc$(HOST_EXECUTABLE_SUFFIX)
TARGET_KERNEL_MAKE_ENV += CONFIG_BUILD_ARM64_DT_OVERLAY=y
TARGET_KERNEL_MAKE_ENV += CONFIG_BUILD_ARM64_DT_OVERLAY_TEST=y  #自定义dts控制宏
endif
3、使用第2步的控制宏,根据项目选择相应的dts文件

kernel/msm-4.9/arch/arm64/boot/dts/qcom/Makefile
.......................
ifeq ($(CONFIG_BUILD_ARM64_DT_OVERLAY),y)
ifeq ($(CONFIG_BUILD_ARM64_DT_OVERLAY_TEST),y)            #如果使用自定义宏
dts-dirs += $(DEVELOP_PRODUCT)                            #则加载对应目录的dts
else
.......................
 
#把相关的dts放到test目录下,如果不知道要加哪些,可以把整个qcom的拷贝过去
kernel/msm-4.9/arch/arm64/boot/dts/qcom/test/
 
#然后修改test下面的Makefile,把一些没必要的dts去掉
kernel/msm-4.9/arch/arm64/boot/dts/qcom/test/Makefile  #文件内容如下,可以从编译或者开机log知道哪个是主的dts
 
dtbo-$(CONFIG_ARCH_MSM8953) += msm8953-mtp-overlay.dtbo \\
    msm8953-no-pmi-overlay.dtbo
 
dtbo-$(CONFIG_ARCH_SDM450) += msm8953-mtp-overlay.dtbo \\
    sdm450-no-pmi-overlay.dtbo
 
msm8953-mtp-overlay.dtbo-base := sdm450.dtb \\
    msm8953.dtb 
    
msm8953-no-pmi-overlay.dtbo-base := msm8953-no-pmi.dtb    
sdm450-no-pmi-overlay.dtbo-base := sdm450-no-pmi.dtb
always        := $(dtb-y)
subdir-y    := $(dts-dirs)
clean-files := *.dtb
4、添加Android部分的项目兼容选项

与kernel中的AndroidBoard.mk类似,Android层也有个重要的控制mk文件 device/qcom/msm8953_64/msm8953_64.mk,整个文件控制了相当多的控制命令,以下是我们根据项目做定制化的时候,增加自己的可控mk文件

在msm8953_64.mk添加自己的mk
device/qcom/msm8953_64/msm8953_64.mk
 
+include device/qcom/msm8953_64/product_$(DEVELOP_PRODUCT)/$(DEVELOP_PRODUCT).mk
 
 
添加新的mk文件
 
device/qcom/msm8953_64/product_test/test.mk
 
+PRODUCT_INTERNAL_MODEL := TEST
+PRODUCT_VERSION :=1.0.0
+PRODUCT_MODEL := TEST
三、总结

将android和kernel跟项目相关的区分开,在编译阶段选择相应的项目,就可以生成对应项目的定制内核,特别是同一套代码的客户定制和产品定义差异大的时候,可以方便代码的维护,主要记得两个重要的控制编译mk文件就好
 

以上是关于高通Android9.0源码兼容不同项目编译环境的主要内容,如果未能解决你的问题,请参考以下文章

SpUtil多样加密存储,兼容android9.0

在高通平台Android环境下编译内核模块

系统这些机子可以第一时间刷入Android9.0,有你的吗?

用Visual studio可以开发非托管代码(即本地代码)吗?即不是将源码编译为IL,而是直接编译成为汇编。

Android9.0 Camera2 横屏问题修改记录

团队环境搭建:MTK平台,Android 9.0内销TV编译服务器配置