[RK3288][Android6.0] 调试笔记 --- 静态库编译覆盖使用方法
来源:互联网 发布:淘宝卖家改价 编辑:程序博客网 时间:2024/06/08 19:05
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
现象:
电池服务模块healthd定期在kernel中打印log: healthd: battery l=1 v=0 t=0.0 h=4 st=3 chg= 2017-01-06 21:48:18.379961678 UTC
由于项目用的是其他电池模块,所以想拿掉这条log,在
BatteryMonitor.cpp
bool BatteryMonitor::update(void) { logthis = !healthd_board_battery_update(&props); if (logthis) { //print log }}
healthd_board_battery_update()在system/core/healthd/Healthd_board_default.cpp
int healthd_board_battery_update(struct android::BatteryProperties*){//Kris, 170119, Don't print log.#if 0 return 0;#else return 1;#endif}
修改之后发现无效,搜索发现对应使用的文件是在device/rockchip/common/health/healthd-rockchip.cpp
因此引出本文想讨论的静态库被覆盖使用的方法。
静态库覆盖过程:
Healthd_board_default.cpp和healthd-rockchip.cpp都被编译到静态库里:
- 前者Android.mk
include $(CLEAR_VARS)LOCAL_SRC_FILES := healthd_board_default.cppLOCAL_MODULE := libhealthd.defaultLOCAL_CFLAGS := -Werrorinclude $(BUILD_STATIC_LIBRARY)
最终生成libhealthd.default.a
- 后者Android.mk
include $(CLEAR_VARS)LOCAL_C_INCLUDES := system/core/healthdLOCAL_CFLAGS += -DFEATURE_SAVE_CAPACITYLOCAL_SRC_FILES := \ healthd-rockchip.cpp \ bat_cap.cppLOCAL_MODULE := libhealthd.$(TARGET_PRODUCT)LOCAL_MODULE_TAGS := optionalinclude $(BUILD_STATIC_LIBRARY)
最终生成libhealthd.rk3288.a
而healthd的规则(system/core/healthd/Android.mk)有这么一句: LOCAL_HAL_STATIC_LIBRARIES := libhealthd
LOCAL_HAL_STATIC_LIBRARIES定义在build/core/binary.mk# Add static HAL librariesifdef LOCAL_HAL_STATIC_LIBRARIES$(foreach lib, $(LOCAL_HAL_STATIC_LIBRARIES), \ $(eval b_lib := $(filter $(lib).%,$(BOARD_HAL_STATIC_LIBRARIES)))\ $(if $(b_lib), $(eval my_static_libraries += $(b_lib)),\ $(eval my_static_libraries += $(lib).default)))b_lib :=endif
也就是说当静态库名字一样时,先加载
搜索BOARD_HAL_STATIC_LIBRARIES定义是在 ./common/BoardConfig.mk:79:BOARD_HAL_STATIC_LIBRARIES ?= libdumpstate.$(TARGET_PRODUCT) libhealthd.$(TARGET_PRODUCT)
其中libhealthd.$(TARGET_PRODUCT)就是前面编译的libhealthd.rk3288.a
因此my_static_libraries的值就是(只关注healthd部分) my_static_libraries = libhealthd.rk3288.a libhealthd.default.a
优先使用前者
- [RK3288][Android6.0] 调试笔记 --- 静态库编译覆盖使用方法
- [RK3288][Android6.0] 调试笔记 --- 交叉编译X264库出错
- [RK3288][Android6.0] 调试笔记 --- 空格引起的编译错误
- [RK3288][Android6.0] 调试笔记 --- 交叉编译X264及测试
- [RK3288][Android6.0] 调试笔记 --- 调试串口的更换
- [RK3288][Android6.0] 调试笔记 --- 移除锁屏功能
- [RK3288][Android6.0] 调试笔记 --- Su添加密码登陆功能
- [RK3288][Android6.0] 调试笔记 --- 伪电池驱动添加
- [RK3288][Android6.0] 调试笔记 --- 普通串口的添加
- [RK3288][Android6.0] 调试笔记 --- PreviewCallback获取NV12格式数据
- [RK3288][Android6.0] 调试笔记 --- 替换系统签名
- [RK3288][Android6.0] 调试笔记 --- 设置中文为默认输入法
- [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED
- [RK3288][Android6.0] 调试笔记 --- apk安装添加黑名单
- [RK3288][Android6.0] 调试笔记 --- 实时录音会有呲呲噪音问题
- [RK3288][Android6.0] 调试笔记 --- I2C通信失败问题
- [RK3288][Android6.0] 调试笔记 --- 读取当前DDR频率方法
- [RK3288][Android6.0] 调试笔记 --- Audio录音PCM数据抓取
- 【Angular2】 如何创建一个Angular2项目
- linux7下centos6.8版本完全编译php7.17与nginx
- ORA-01034: ORACLE not available
- libigl项目Visual Studio配置方法
- h标签与p标签
- [RK3288][Android6.0] 调试笔记 --- 静态库编译覆盖使用方法
- wkhtmltopdf html转pdf linux安装
- Cocos2dx游戏开发需要用到哪些软件
- 爬虫实践---抓取百度贴吧
- oracle删除数据库,提示ora-01031:权限不足
- Oracle数据导出
- python 虚拟环境搭建
- 2017大数据领域十大必读书籍
- HDU 3714 Error Curves(三分+模拟)