LOCAL_MODULE_TAGS 的疑问

本文详细探讨了在Android系统中,如何解决特定模块(如传感器驱动)无法正确加载到目标路径的问题。通过调整编译配置文件(Android.mk)中的LOCAL_MODULE_TAGS属性,实现了模块的有效加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sensor.xxxxx.so一致无法装入到system/lib/hw中。找了好久也不知到为什么,
发现只要有Android.mk的目录都会被编译,编译出来的so放到out目录下的obj中,但是并不是所有的都会被复制到system/lib或者system/lib/hw中.
但是只要在module所在目录用mm编译,就发现一切正常,编译出来的so会出现在LOCAL_MODULE_PATH所制定的最终安装位置。但是整体编译就有不会出现在指定位置。
昨晚和王永请教后发现是LOCAL_MODULE_TAGS := optional的问题,他建议将optional换成debug。我今天早上试了以下,果然就好了。
所以我又仔细研究了以下LOCAL_MODULE_TAGS这个东西,发现这个东西是决定最终是否装载模块的标志,这个和TARGET_BUILD_VARIANT相关,如果TARGET_BUILD_VARIANT=userdebug 那么就会装载LOCAL_MODULE_TAGS的值也为user或者debug的那些模块,所以因为我的模块对应的值是optional,故而没有别最终装载。所以我把optional改为debug就好了。
刚才我又想,改为user应该也可以的吧,但是却得到了如下错误,这个错误让我学习了!


yasin@ubuntu:~/mywork/xxxxroid403-td9921-plus$ make -j4
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.0.3
TARGET_PRODUCT=xxxx
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=IML74K
============================================
build/core/base_rules.mk:78: *** Module name: sensors.td9921
build/core/base_rules.mk:79: *** Makefile location: device/xxxx/common/libs/libsensors_xxxx
build/core/base_rules.mk:80: * 
build/core/base_rules.mk:81: * Each module must use a LOCAL_MODULE_TAGS in its
build/core/base_rules.mk:82: * Android.mk. Possible tags declared by a module:
build/core/base_rules.mk:83: * 
build/core/base_rules.mk:84: *     optional, debug, eng, tests, samples
build/core/base_rules.mk:85: * 
build/core/base_rules.mk:86: * If the module is expected to be in all builds
build/core/base_rules.mk:87: * of a product, then it should use the
build/core/base_rules.mk:88: * "optional" tag: 
build/core/base_rules.mk:89: * 
build/core/base_rules.mk:90: *    Add "LOCAL_MODULE_TAGS := optional" in the
build/core/base_rules.mk:91: *    Android.mk for the affected module, and add
build/core/base_rules.mk:92: *    the LOCAL_MODULE value for that component
build/core/base_rules.mk:93: *    into the PRODUCT_PACKAGES section of product
build/core/base_rules.mk:94: *    makefile(s) where it's necessary, if
build/core/base_rules.mk:95: *    appropriate.
build/core/base_rules.mk:96: * 
build/core/base_rules.mk:97: * If the component should be in EVERY build of ALL
build/core/base_rules.mk:98: * products, then add its LOCAL_MODULE value to the
build/core/base_rules.mk:99: * PRODUCT_PACKAGES section of
build/core/base_rules.mk:100: * build/target/product/core.mk
build/core/base_rules.mk:101: * 
build/core/base_rules.mk:102: *** user tag detected on new module - user tags are only supported on legacy modules.  Stop.
yasin@ubuntu:~/mywork/xxxxroid403-td9921-plus$ 
yasin@ubuntu:~/mywork/xxxxroid403-td9921-plus$ 


所以我的正确的做法应该是module中的LOCAL_MODULE_TAGS依然应该是optional,而安装动作的要求应该放到类似core.mk当中,对于我的板子而言就是应该放到base.mk中。如下
PRODUCT_PACKAGES += \
sensors.$(TARGET_PLATFORM) \


这就可以了,现在唯一的问题就是我没有高明白为什么在对应module目录中的$(TARGET_PLATFORM)和base.mk中的这个$(TARGET_PLATFORM)的值不一样!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YasinLeeX

再来一杯西湖龙井。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值