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();