我开始从aosp项目中学习android操作系统内部知识。在阅读了有关android HAL的内容之后,我有兴趣研究了一些与内核驱动程序有关的HAL模块的实际实现。我在android / hardware / interfaces下找到的是某种粘合代码。此粘合代码必须加载实际的HAL模块,该模块可能会打开某些设备并与实际硬件通信。
那么在哪里可以找到与真实硬件通信的HAL的实际实现呢?
我基本上是在看图形堆栈,如果有人可以指出hwcomposer和gralloc的HAL实现,那就太好了。 android模拟器中使用的通用或开源代码。
我从另一个论坛得知,它是由OEM提供的。但是考虑到Android模拟器,我希望在aosp下的某个地方找到它们。至少对于某些通用组件。
考虑到SOC供应商提供了一些HAL,并且同一HAL也有开源版本(假设供应商hwcomposer和drm_hwcomposer)在何处配置,使用哪个?
任何了解HAL代码流的资源链接也将有所帮助。
答案 0 :(得分:0)
那么在哪里可以找到与真实硬件通信的HAL的实际实现呢?
HAL实现必须由供应商/ OEM提供。在这里可以找到源。
对于大多数HAL而言,Android附带了一个虚拟实现,通常仅提供最低限度的标准以避免崩溃,这令人惊讶地很少。我还没有检查所有HAL。您可以在hardware/interfaces/<hal>/<version>/default
中找到这些虚拟实现。有时,它们会将实现包装在旧的HAL接口中的hardware/libhardware
下。找到真实硬件/内核访问的最佳机会就在那里。但是,这些实现可能已过时,不再使用。
考虑到SOC供应商提供了一些HAL,并且同一HAL也有开源版本(假设供应商hwcomposer和drm_hwcomposer)在何处配置,使用哪个?
将要包含在设备中的HAL实现必须在设备清单(例如device/<vendor>/<board>/device.mk
)中进行配置,如下所示:
PRODUCT_PACKAGES += hwcomposer.<vendor>
任何了解HAL代码流的资源链接也将有所帮助。
https://source.android.com/devices/architecture/hidl上的官方文档是一个很好的资源。
由于Android在Android 8中几乎改变了有关HAL界面的所有内容,因此您可以通过搜索讨论Treble
的文章来找到更多信息。