在T527项目开发中,遇到编译错误,通过分析发现androiddevicesoftwinnersaturn目录下的PRODUCT_BOARD值需对应longan的编译路径。解决方法是设置LICHEE_BOARD环境变量,并在device-common.mk中将其赋值给PRODUCT_BOARD,实现自动对应。
原文链接:https://blog.youkuaiyun.com/qq503393230/article/details/134932184
前言
在开发T527项目的时候,我们在android\device\softwinner\saturn下创建了自己的device目录以及在android\longan\device\config\chips\t527\configs下创建了自己的底层配置目录,如:android\longan\device\config\chips\t527\configs\xxx_lvds,但是会发现编译的时候会有如下报错:
FAILED: ninja: 'longan/out/t527/XXX/android/bImage', needed by 'out/target/product/t527-xxxx/kernel', missing and no known rule to make it
分析
根据log提示“longan/out/t527/XXXX/android/bImage”,我们找到这个路径是位于android\device\softwinner\saturn\下的项目目录下的,如项目名称为t527-demo,则项目目录下的device-common.mk有如下配置:
TARGET_BOARD_IC := t527
PRODUCT_BRAND := Allwinner
PRODUCT_BOARD := demo
PRODUCT_MODEL := T527 DEMO
PRODUCT_MANUFACTURER := Allwinner
PRODUCT_PREBUILT_PATH := longan/out/$(TARGET_BOARD_IC)/$(PRODUCT_BOARD)/android
PRODUCT_DEVICE_PATH := $(PRODUCT_PLATFORM_PATH)/$(PRODUCT_DEVICE)
CONFIG_SUPPORT_GMS := false
PRODUCT_COPY_FILES += $(PRODUCT_PREBUILT_PATH)/bImage:kernel
PRODUCT_HAS_UVC_CAMERA := true
USE_CAMERA_HAL_3_4 := true
# AI
log中的那个路径是跟PRODUCT_COPY_FILES += $(PRODUCT_PREBUILT_PATH)/bImage:kernel这句相关联的。
PRODUCT_PREBUILT_PATH的值是longan/out/$(TARGET_BOARD_IC)/$(PRODUCT_BOARD)/android决定的。
PRODUCT_BOARD的值是demo。
终上所述,android\device\softwinner\saturn\项目目录下的PRODUCT_BOARD值对应了项目编译时longan的编译生成路径。而longan的编译生成路径又是对应了android\longan\device\config\chips\t527\configs\下的项目名。
即如果longan项目路径为android\longan\device\config\chips\t527\configs\demo_car,那么longan的编译生成路径为:android\longan\out\t527\demo_car。那么要让android编译的时候能够正确对应到这个路径,PRODUCT_BOARD值就必须为demo_car。
自动对应方法
如果要让logan的项目名和PRODUCT_BOARD值自动对应起来,需要怎么办呢?查看编译的相关脚本后,我这边找到如下修改解决方法。
1.获取longan/.buildconfig的相关项目信息,然后在build/make/envsetup.sh中设置环境变量,我选择设置LICHEE_BOARD,这个值就是longan的编译项目名。
--- a/build/make/envsetup.sh
+++ b/build/make/envsetup.sh
@@ -696,7 +696,8 @@ function print_lunch_menu()
function lunch()
{
local answer
-
+ set_lichee
+
if [[ $# -gt 1 ]]; then
echo "usage: lunch [target]" >&2
return 1
@@ -1835,9 +1836,16 @@ function mmma()
function make()
{
+ set_lichee
_wrap_build $(get_make_command "$@") "$@"
}
+function set_lichee()
+{
+ LONGAN_BUILD_CONFIG=$(pwd)/longan/.buildconfig
+ `sed -n '/LICHEE_BOARD=/p' $LONGAN_BUILD_CONFIG|tail -n 1|awk -F : '{print $1}'`
+}
+
function provision()
{
if [ ! "$ANDROID_PRODUCT_OUT" ]; then
2.修改android\device\softwinner\saturn下的项目的device-common.mk文件,将LICHEE_BOARD赋值给PRODUCT_BOARD即可:
TARGET_BOARD_IC := t527
PRODUCT_BRAND := Allwinner
-PRODUCT_BOARD := demo
+PRODUCT_BOARD := $(LICHEE_BOARD)
这样修改后,就会在编译的时候自动将logan项目的路径对应起来了。