Android HIDL lshal

LSHAL是一个用于列出所有HAL服务和直通实现的Android设备端工具,它能生成设备清单文件。此博客详细介绍了如何使用lshal,并展示了设备上注册的各种硬件抽象层(HIDL)服务,如音频、相机、电源管理等。通过lshal生成的设备清单有助于理解设备支持的硬件服务。

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

https://source.android.google.cn/devices/architecture/vintf/resources?hl=zh-cn

 

LSHAL
LSHAL 是一种设备端工具,可以列出向 hwservicemanager 注册的所有 HAL 以及设备上所有可用的直通实现(例如 android.hardware.foo@1.0-impl.so)。它还可以根据该列表生成设备清单文件:

adb shell su 0 /system/bin/lshal –init-vintf

 

 

130|rk3399pro_firefly_aiojd4:/ # lshal
All binderized services (registered services through hwservicemanager)
Interface                                                                               Thread Use      Server  Clients
android.frameworks.displayservice@1.0::IDisplayService/default                          0/1             279     237
android.frameworks.schedulerservice@1.0::ISchedulingPolicyService/default               0/4             577     237
android.frameworks.sensorservice@1.0::ISensorManager/default                            0/4             577     237
android.hardware.audio.effect@2.0::IEffectsFactory/default                              0/3             261     388 237
android.hardware.audio@2.0::IDevicesFactory/default                                     0/3             261     388 237
android.hardware.bluetooth@1.0::IBluetoothHci/default                                   0/2             262     237
android.hardware.camera.provider@2.4::ICameraProvider/legacy/0                          0/3             263     389 237
android.hardware.cas@1.0::IMediaCasService/default                                      0/2             264     237
android.hardware.configstore@1.0::ISurfaceFlingerConfigs/default                        0/2             265     718 1200 739 944 577 279 237
android.hardware.drm@1.0::ICryptoFactory/default                                        0/2             266     237
android.hardware.drm@1.0::ICryptoFactory/widevine                                       0/2             267     237
android.hardware.drm@1.0::IDrmFactory/default                                           0/2             266     237
android.hardware.drm@1.0::IDrmFactory/widevine                                          0/2             267     237
android.hardware.gnss@1.0::IGnss/default                                                0/1             259     577 237
android.hardware.graphics.allocator@2.0::IAllocator/default                             0/4             269     263 279 237
android.hardware.graphics.composer@2.1::IComposer/default                               0/4             270     279 237
android.hardware.keymaster@3.0::IKeymasterDevice/default                                0/1             250     393 237
android.hardware.light@2.0::ILight/default                                              0/1             271     577 237
android.hardware.media.omx@1.0::IOmx/default                                            0/5             402     237
android.hardware.media.omx@1.0::IOmxStore/default                                       0/5             402     237
android.hardware.neuralnetworks@1.0::IDevice/armnn                                      0/1             272     237
android.hardware.neuralnetworks@1.0::IDevice/ovx                                        0/2             273     237
android.hardware.power@1.0::IPower/default                                              0/1             274     577 237
android.hardware.sensors@1.0::ISensors/default                                          1/2             275     577 237
android.hardware.soundtrigger@2.0::ISoundTriggerHw/default                              0/3             261     388 237
android.hardware.wifi@1.0::IWifi/default                                                0/1             276     577 237
android.hardware.wifi@1.1::IWifi/default                                                0/1             276     577 237
android.hidl.allocator@1.0::IAllocator/ashmem                                           0/1             260     263 237
android.hidl.base@1.0::IBase/armnn                                                      0/1             272     237
android.hidl.base@1.0::IBase/ashmem                                                     0/1             260     263 237
android.hidl.base@1.0::IBase/default                                                    0/4             577     237
android.hidl.base@1.0::IBase/legacy/0                                                   0/3             263     389 237
android.hidl.base@1.0::IBase/ovx                                                        0/2             273     237
android.hidl.base@1.0::IBase/widevine                                                   0/2             267     237
android.hidl.manager@1.0::IServiceManager/default                                       1/1             237     577
android.hidl.manager@1.1::IServiceManager/default                                       1/1             237     577
android.hidl.token@1.0::ITokenManager/default                                           1/1             237  
android.system.net.netd@1.0::INetd/default                                              0/1             398     237
android.system.wifi.keystore@1.0::IKeystore/default                                     0/1             393     237

All interfaces that getService() has ever return as a passthrough interface;
PIDs / processes shown below might be inaccurate because the process
might have relinquished the interface or might have died.
The Server / Server CMD column can be ignored.
The Clients / Clients CMD column shows all process that have ever dlopen'ed 
the library and successfully fetched the passthrough implementation.
Interface                                                                               Thread Use      Server  Clients
android.hardware.audio.effect@2.0::IEffectsFactory/default                              N/A             261     261
android.hardware.audio@2.0::IDevicesFactory/default                                     N/A             261     261
android.hardware.bluetooth@1.0::IBluetoothHci/default                                   N/A             262     262
android.hardware.camera.provider@2.4::ICameraProvider/legacy/0                          N/A             263     263
android.hardware.drm@1.0::ICryptoFactory/default                                        N/A             266     266
android.hardware.drm@1.0::IDrmFactory/default                                           N/A             266     266
android.hardware.gnss@1.0::IGnss/default                                                N/A             259     259
android.hardware.graphics.allocator@2.0::IAllocator/default                             N/A             269     269
android.hardware.graphics.composer@2.1::IComposer/default                               N/A             270     270
android.hardware.graphics.mapper@2.0::IMapper/default                                   N/A             N/A     263 270 279 577 718 739 944 1200
android.hardware.keymaster@3.0::IKeymasterDevice/default                                N/A             250     250
android.hardware.light@2.0::ILight/default                                              N/A             271     271
android.hardware.power@1.0::IPower/default                                              N/A             274     274
android.hardware.sensors@1.0::ISensors/default                                          N/A             275     275
android.hardware.soundtrigger@2.0::ISoundTriggerHw/default                              N/A             261     261
android.hidl.memory@1.0::IMapper/ashmem                                                 N/A             N/A     397 402 577 739

All available passthrough implementations (all -impl.so files)
Interface                                                                               Thread Use      Server  Clients
android.hardware.audio.effect@2.0::I*/* (/vendor/lib/hw/)                               N/A             N/A     261
android.hardware.audio.effect@2.0::I*/* (/vendor/lib64/hw/)                             N/A             N/A  
android.hardware.audio@2.0::I*/* (/vendor/lib/hw/)                                      N/A             N/A     261
android.hardware.audio@2.0::I*/* (/vendor/lib64/hw/)                                    N/A             N/A  
android.hardware.bluetooth@1.0::I*/* (/vendor/lib/hw/)                                  N/A             N/A  
android.hardware.bluetooth@1.0::I*/* (/vendor/lib64/hw/)                                N/A             N/A     262
android.hardware.camera.provider@2.4::I*/* (/vendor/lib/hw/)                            N/A             N/A     263
android.hardware.camera.provider@2.4::I*/* (/vendor/lib64/hw/)                          N/A             N/A  
android.hardware.drm@1.0::I*/* (/vendor/lib/hw/)                                        N/A             N/A     266
android.hardware.gnss@1.0::I*/* (/vendor/lib/hw/)                                       N/A             N/A  
android.hardware.gnss@1.0::I*/* (/vendor/lib64/hw/)                                     N/A             N/A     259
android.hardware.graphics.allocator@2.0::I*/* (/vendor/lib/hw/)                         N/A             N/A  
android.hardware.graphics.allocator@2.0::I*/* (/vendor/lib64/hw/)                       N/A             N/A     269
android.hardware.graphics.composer@2.1::I*/* (/vendor/lib/hw/)                          N/A             N/A  
android.hardware.graphics.composer@2.1::I*/* (/vendor/lib64/hw/)                        N/A             N/A     270
android.hardware.graphics.mapper@2.0::I*/* (/vendor/lib/hw/)                            N/A             N/A     263 387
android.hardware.graphics.mapper@2.0::I*/* (/vendor/lib64/hw/)                          N/A             N/A     270 279 386 577 718 739 930 944 1162 1176 1200 1216 1255 1289 1323 1341 1364 1382
android.hardware.keymaster@3.0::I*/* (/vendor/lib/hw/)                                  N/A             N/A  
android.hardware.keymaster@3.0::I*/* (/vendor/lib64/hw/)                                N/A             N/A     250
android.hardware.light@2.0::I*/* (/vendor/lib/hw/)                                      N/A             N/A  
android.hardware.light@2.0::I*/* (/vendor/lib64/hw/)                                    N/A             N/A     271
android.hardware.power@1.0::I*/* (/vendor/lib/hw/)                                      N/A             N/A  
android.hardware.power@1.0::I*/* (/vendor/lib64/hw/)                                    N/A             N/A     274
android.hardware.sensors@1.0::I*/* (/vendor/lib/hw/)                                    N/A             N/A  
android.hardware.sensors@1.0::I*/* (/vendor/lib64/hw/)                                  N/A             N/A     275
android.hardware.soundtrigger@2.0::I*/* (/vendor/lib/hw/)                               N/A             N/A     261
android.hidl.memory@1.0::I*/* (/system/lib/hw/)                                         N/A             N/A     397 402
android.hidl.memory@1.0::I*/* (/system/lib64/hw/)                                       N/A             N/A     577 739

rk3399pro_firefly_aiojd4:/ # 
rk3399pro_firefly_aiojd4:/ # 

 

 

 

 

130|rk3399pro_firefly_aiojd4:/ # /system/bin/lshal --init-vintf
<!-- 
    This is a skeleton device manifest. Notes: 
    1. android.hidl.*, android.frameworks.*, android.system.* are not included.
    2. If a HAL is supported in both hwbinder and passthrough transport, 
       only hwbinder is shown.
    3. It is likely that HALs in passthrough transport does not have
       <interface> declared; users will have to write them by hand.
    4. A HAL with lower minor version can be overridden by a HAL with
       higher minor version if they have the same name and major version.
    5. sepolicy version is set to 0.0. It is recommended that the entry
       is removed from the manifest file and written by assemble_vintf
       at build time.
-->
<manifest version="1.0" type="device">
    <hal format="hidl">
        <name>android.hardware.audio</name>
        <transport>hwbinder</transport>
        <version>2.0</version>
        <interface>
            <name>IDevicesFactory</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.audio.effect</name>
        <transport>hwbinder</transport>
        <version>2.0</version>
        <interface>
            <name>IEffectsFactory</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.bluetooth</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IBluetoothHci</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.camera.provider</name>
        <transport>hwbinder</transport>
        <version>2.4</version>
        <interface>
            <name>ICameraProvider</name>
            <instance>legacy/0</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.cas</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IMediaCasService</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.configstore</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>ISurfaceFlingerConfigs</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.drm</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>ICryptoFactory</name>
            <instance>default</instance>
            <instance>widevine</instance>
        </interface>
        <interface>
            <name>IDrmFactory</name>
            <instance>default</instance>
            <instance>widevine</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.gnss</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IGnss</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.graphics.allocator</name>
        <transport>hwbinder</transport>
        <version>2.0</version>
        <interface>
            <name>IAllocator</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.graphics.composer</name>
        <transport>hwbinder</transport>
        <version>2.1</version>
        <interface>
            <name>IComposer</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.graphics.mapper</name>
        <transport arch="32+64">passthrough</transport>
        <version>2.0</version>
        <interface>
            <name>IMapper</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.keymaster</name>
        <transport>hwbinder</transport>
        <version>3.0</version>
        <interface>
            <name>IKeymasterDevice</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.light</name>
        <transport>hwbinder</transport>
        <version>2.0</version>
        <interface>
            <name>ILight</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.media.omx</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IOmx</name>
            <instance>default</instance>
        </interface>
        <interface>
            <name>IOmxStore</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.neuralnetworks</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IDevice</name>
            <instance>armnn</instance>
            <instance>ovx</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.power</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IPower</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.sensors</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>ISensors</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.soundtrigger</name>
        <transport>hwbinder</transport>
        <version>2.0</version>
        <interface>
            <name>ISoundTriggerHw</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="hidl">
        <name>android.hardware.wifi</name>
        <transport>hwbinder</transport>
        <version>1.1</version>
        <interface>
            <name>IWifi</name>
            <instance>default</instance>
        </interface>
    </hal>
    <sepolicy>
        <version>0.0</version>
    </sepolicy>
</manifest>
rk3399pro_firefly_aiojd4:/ # 
rk3399pro_firefly_aiojd4:/ # 
rk3399pro_firefly_aiojd4:/ # 

 

 

 

 

 

 

 

https://devarea.com/android-hidl-and-project-treble/#.XTWcS_mAShE

 

编写客户端要使用该服务,我们将编写一个简单的客户端应用程序 通常,它将成为Google编写的Android框架的一部分。 例如,如果通用框架想要访问振动器服务:在文件框架/ base / services / core / jni / com_android_server_VibratorService.cpp中

static sp mHal;
 
...
 
mHal = IVibrator::getService();
...
Status retStatus = mHal->on(timeout_ms);
...
Status retStatus = mHal->off();

 

 

 

 

 

 

<think>好的,用户想了解Android HAL层的相关信息,包括架构、功能、作用以及开发指南。首先我需要回忆一下HAL层在Android系统中的位置和作用。HAL,全称是硬件抽象层,主要目的是为了将硬件厂商的具体实现与Android框架分离开来,这样不同的硬件驱动可以由厂商自行实现,而Android系统上层无需关心底层硬件的具体细节。 接下来,用户提到架构、功能、作用,还有开发指南。我需要分点来整理这些信息。架构方面,HAL层位于Linux内核和Android框架之间,对上提供标准接口,对下封装硬件驱动。可能需要提到HAL模块的结构,比如每个硬件类型对应的HAL模块,如传感器、摄像头等,以及HIDL(HAL接口定义语言)在较新版本中的作用。 功能和作用方面,需要强调HAL层如何屏蔽硬件差异,提供统一的接口,便于系统升级和厂商维护各自的驱动。可能还要提到兼容性问题和开源协议的影响,比如为什么厂商选择闭源HAL实现。 开发指南部分,用户可能想知道如何为一个硬件开发HAL模块。这里需要分步骤说明,比如定义接口、实现HAL模块、配置manifest文件、编译集成等步骤。可能还需要提到HIDL和AIDL的区别,以及不同Android版本中的变化,比如Android 8.0之后的Treble项目引入的HIDL。 同时,用户的问题中提到了生成相关问题,我需要根据HAL层的内容生成几个相关问题,比如与Linux内核驱动的区别,HIDL的作用,兼容性考虑,调试方法等。要注意问题的多样性和相关性,确保覆盖用户可能感兴趣的方面。 还需要检查是否有遗漏的关键点,比如HAL的类型,如旧版Legacy HAL和新版Stub HAL的区别,或者具体的代码示例。不过用户没有特别要求代码,但开发指南部分可能需要提及代码结构或示例。 最后,确保回答符合系统级指令的要求:使用正确的中文,数学公式用$符号(虽然这个问题可能不太涉及数学公式,但如果有变量或技术术语需要强调的话),结构清晰,引用部分添加标识,比如Android开源项目文档或开发者指南的引用。需要确认是否有可引用的来源,比如Android官方文档中的说明,或者相关书籍的参考。 现在开始组织回答,先介绍架构,再功能和作用,然后是开发指南的步骤,最后相关问题。确保每个部分简明扼要,信息准确。</think># Android HAL层详解 ## 一、架构 Android HAL(Hardware Abstraction Layer)位于Linux内核与Android框架之间,采用模块化设计。每个硬件类型(如摄像头、传感器)对应独立HAL模块,通过标准接口与上层交互。从Android 8.0开始,HIDL(HAL Interface Definition Language)成为核心组件,实现框架与HAL的解耦[^1]。 $$ \text{Android架构层级} = \begin{cases} \text{应用层} \\ \text{框架层} \\ \text{JNI层} \\ \text{HAL层} \rightarrow \text{硬件驱动} \\ \text{Linux内核} \end{cases} $$ ## 二、功能与作用 1. **硬件隔离**:封装$vendor\_specific$驱动实现,提供$standard\_interface$ 2. **版本兼容**:通过HIDL实现框架与HAL的版本化兼容 3. **安全隔离**:Binder IPC机制隔离系统服务与硬件访问 4. **厂商定制**:允许OEM通过闭源实现保护知识产权 ## 三、开发指南 1. **接口定义**:使用HIDL语言声明`.hal`文件 ```hidl package android.hardware.sensors@1.0; interface ISensors { getSensorList() generates (vec<Sensor> list); activate(int32_t handle, bool enabled); } ``` 2. **模块实现**:继承自动生成的Stub类 ```cpp class SensorsHal : public ISensors::Stub { Return<void> getSensorList(getSensorList_cb _hidl_cb) override; Return<Result> activate(int32_t handle, bool enabled) override; } ``` 3. **服务注册**:在`manifest.xml`声明HAL服务 ```xml <hal format="hidl"> <name>android.hardware.sensors</name> <version>1.0</version> <interface> <name>ISensors</name> <instance>default</instance> </interface> </hal> ``` 4. **编译集成**:使用Android.bp构建HAL模块 ```python cc_library_shared { name: "android.hardware.sensors@1.0-impl", srcs: ["SensorsHal.cpp"], shared_libs: [ "libhidlbase", "liblog" ] } ``` ## 四、调试技巧 - 使用`lshal`工具查看HAL服务列表 - 通过`dumpsys hardware_properties`获取硬件状态 - 使用`strace`跟踪Binder通信 [^1]: Android开源项目官方文档《HIDL架构设计》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值