栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

如何在高通hal 层添加项目宏控android.mk 和android.bp

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在高通hal 层添加项目宏控android.mk 和android.bp

如何在高通平台hal 层添加宏控 一:找到cpp文件编译时会用到的mk,在 mk文件添加 调试sar sensor 的时候需要在hal 层做判断,基于项目宏控。 vendorqcomproprietarysensors-seesensors-hal-2.0Android.mk ifeq ($(TARGET_PRODUCT), pnc560) #添加编译信息,方便在编译结果里面确认,c和c++不同,建议看一下平台怎么写的 $(warning pxs_pnc560 sar debug!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!) LOCAL_CFLAGS += -DPNC560_SAR             (c) LOCAL_CPPFLAGS += -DPNC560_SAR      (c++) endif 二:在对应的 cpp文件添加,可以添加xxx 编译错误,这样在编译的时候直接可以看到具体走的哪个判断,加速定位。 1: #if defined(PNC560_SAR)    xxx1111 (编译提示错误方便分析) coding..... #else    xxx2222 (编译提示错误方便分析) coding..... #endif 2: #ifdef PNC560_SAR #else #endif 3:错误写法 #ifdefined (PNC560_SAR)    #else #endif vendor/qcom/proprietary/sensors-see/sensors-hal-2.0/sensors/sar.cpp:39:2: error: invalid preprocessing directive #ifdefined (PNC560_SAR) ^ vendor/qcom/proprietary/sensors-see/sensors-hal-2.0/sensors/sar.cpp:41:1: error: unknown type name 'xxxx1111' xxxx1111 三:编译我们的文件,需要看一下代码结构,首先找到 sar.cpp 是哪个mk/bp 文件来确认是否编译到代码的。 vendorqcomproprietarysensors-seesensors-hal-2.0Android.mk vendorqcomproprietarysensors-seesensors-hal-2.0Android.bp vendorqcomproprietarysensors-seeAndroid.mk vendorqcomproprietarysensors-seeAndroid.bp vendorqcomproprietarysensors-seebuild_configsns_vendor_board.mk vendorqcomproprietarysensors-seesensors-hal-2.0Android.bp cc_library_shared {     srcs: [         "framework/sensor.cpp",         "framework/ssc_sensor.cpp",         "framework/sensors_hw_module.cpp",         "sensors     sensor_factory::register_sensor(SENSOR_TYPE_PPG,         ssc_sensor::get_available_sensors);     sensor_factory::request_datatype(SSC_DATATYPE_PPG);     return true; #else     return false; #endif } vendor/qcom/proprietary/sensors-see$ grep SNS_WEARABLES_TARGET * -nR Android.bp:83:                "-DSNS_WEARABLES_TARGET",          //编译标志位使能的地方终于找到了 Android.bp:95:                "-DSNS_WEARABLES_TARGET_BG", sensordaemon/src/sensordaemon.cpp:43:#ifdef SNS_WEARABLES_TARGET_BG sensordaemon/src/sensordaemon.cpp:571:#ifdef SNS_WEARABLES_TARGET_BG sensordaemon/src/wrist_orientation_update.cpp:9:#ifdef SNS_WEARABLES_TARGET_BG sensordaemon/src/wrist_orientation_update.h:9:#ifdef SNS_WEARABLES_TARGET_BG sensors-hal-2.0/sensors/ppg.cpp:39:#ifdef SNS_WEARABLES_TARGET test/hal_tests/sns_espplus_testapp.c:281:#ifdef SNS_WEARABLES_TARGET wrist-ssr/wrist_trigger_ssr.cpp:9:#ifdef SNS_WEARABLES_TARGET_BG vendorqcomproprietarysensors-seeAndroid.bp soong_config_module_type {     name: "sns_cc_defaults",     module_type: "cc_defaults",     config_namespace: "snsconfig",     bool_variables: [            //bool变量需要用到     "isWearableTarget",    //搜索此变量看一下此变量合适能够编译进来     "isPNC560",     ],     properties: ["shared_libs", "cflags"], } sns_cc_defaults {     name: "sns_wearable_target ",  //最初忘记了这个名称是如何使能的,这里是根据名称匹配最终的bp 文件     soong_config_variables: {          isWearableTarget : {             cflags: [                 "-DSNS_WEARABLES_TARGET ",    // 终于找到了!参考案例做一个即可。             ],         },     }, } sns_cc_defaults {     name: "pnc560_sar_target",     soong_config_variables: {         isPNC560: {             cflags: [                 "-DPNC560_SAR",             ],         },     }, } vendorqcomproprietarysensors-seesensors-hal-2.0Android.bp cc_library_shared {     name: "sensors.ssc",     defaults: [         "sns_wearable_target ",  //根据名字匹配     "pnc560_sar_target",       // 咱们也写一个     ], } PNC560_SAR  生效了吗?还没有,哪些需要编译进来,在如下部分要置为true. vendorqcomproprietarysensors-seebuild_configsns_vendor_board.mk ifeq ($(call is-board-platform-in-list,msm8937), true) $(call add_soong_config_var_value,snsconfig, isWearableTarget,true) endif ifeq ($(TARGET_PRODUCT ), pnc560) $(warning pxs_pnc560 sar debug!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!) //依旧需要打印调试log $(call add_soong_config_var_value,snsconfig,isPNC560 ,true ) endif 这样一来,高通hal 部分编译宏控就搞定了,TARGET_PRODUCT 在编译中可以看到是项目名称。 五:参考如下第三种案例,用 property_get  也可以做。 vendorqcomproprietarysensors-seesensors-hal-2.0sensorsaccelerometer.cpp static bool accelerometer_module_init() {          sensor_factory::register_sensor(SENSOR_TYPE_ACCELEROMETER,                                     get_available_accel_calibrated);     sensor_factory::register_sensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED,                                     get_available_accel_uncalibrated);     sensor_factory::request_datatype(SSC_DATATYPE_ACCEL, false);     char debug_prop[PROPERTY_VALUE_MAX];     int enable_accel_cal = 0;     int len;     len = property_get("persist.vendor.sensors.accel_cal", debug_prop, "0");     if (len > 0) {         enable_accel_cal = atoi(debug_prop);     }     if (enable_accel_cal)     {       sensor_factory::request_datatype(SSC_DATATYPE_ACCELCAL, false);     }     return true; } 六:最后回顾一下。

#if、#ifdef、#if defined之间的区别

#if的使用说明 #if的后面接的是表达式 #if (MAX==10)||(MAX==20) code... #endif 它的作用是:如果(MAX==10)||(MAX==20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去(注意:是编译进去,不是执行!!)

#if defined的使用 #if后面接的是一个宏。 #if defined (x) ...code... #endif 这个#if defined它不管里面的“x”的逻辑是“真”还是“假”它只管这个程序的前面的宏定义里面有没有定义“x”这个宏,如果定义了x这个宏,那么,编译器会编译中间的…code…否则不直接忽视中间的…code…代码。 另外 #if defined(x)也可以取反,也就用 #if !defined(x)

#ifdef的使用 #ifdef的使用和#if defined()的用法一致 #ifndef又和#if !defined()的用法一致。 最后强调两点: 第一:这几个宏定义只是决定代码块是否被编译! 第二:别忘了#endif

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/343473.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号