高通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源码兼容不同项目编译环境的主要内容,如果未能解决你的问题,请参考以下文章
系统这些机子可以第一时间刷入Android9.0,有你的吗?