Skip to content

Instantly share code, notes, and snippets.

@SebaUbuntu
Last active April 1, 2025 21:17
Show Gist options
  • Save SebaUbuntu/b323697f8281f48798822d568c316aab to your computer and use it in GitHub Desktop.
Save SebaUbuntu/b323697f8281f48798822d568c316aab to your computer and use it in GitHub Desktop.
Android HALs and components status

Components

Needed for booting

Name Commonizibility Allow opt-out? Notes
Audio 100% Yes Android default AIDL service should always be built. ALSA audio can be used with either tinyhal or yukawa's HAL, dummy HAL can also be used in case of no audio
Display High Probably yes See below
Health 100% No Default AIDL health HAL uses kernel sysfs, a cuttlefish implementation also exists for battery-less devices, they need to be merged tho (detect no battery and report fake data)
Kernel 0% N/A Each device has its own kernel, completely outside common tree scope
Power 100% No Both dummy and libperfmgr HAL can be used, could default to libperfmgr with a dummy config, but requires complicated init scripts as well
Security 50% Yes Default software implementations exists, but if a device wants to use its own stack, it needs to opt-out of them

Needed for basic functionality

Name Commonizibility Allow opt-out? Notes
ClearKey DRM 100% No ClearKey DRM is supported by AOSP
Widevine DRM 100% (with notes) Yes A default Widevine service can be provided by common tree for L3. liboemcrypto.so, needed for L1, requires specific Widevine HAL version, so default Widevine service must either be opt-in or opt-out

Optional

Name Commonizibility Allow opt-out? Notes
Biometrics 0% N/A Forget about it
Bluetooth 100% No? android.hardware.bluetooth-service.default implements serial HCI devices, might be enough
Camera 100% Yes, people might want to use their downstream stack Can use libcamera
GNSS 100% No GNSS devices uses standard NMEA messages, just needs a proper HAL. There's also good progress on open source AGPS implementations
IR 100% (see notes) No LIRC API exists, but if IR support is declared, the AIDL IR service MUST be started, so dynamic IR HAL is difficult
Lights 100% No Lineage default AIDL lights HAL uses standard sysfs APIs
Media (Codec2) 100% No Software codecs will be already available, hardware codecs can be implemented with [email protected]
NFC Low Yes NFC usually requires custom HALs, proprietary firmware, etc.
RIL Low Yes A ModemManager based HAL exists, unlikely this will work fine
Sensors Low Yes Each sensor hardware device's data needs proper treating, needs HALs written from scratch. A IIO based HAL exists, but not all devices uses IIO
Thermal 100% No Pixel thermal HAL uses thermal zones, just needs a config
USB Unknown Yes ConfigFS is common (we expect newer kernels to use it), but USB and USB gadget HALs aren't common (yet?)
Vibrator 100% No Force feedback API (here) and legacy LED vibrator (default AOSP vibrator HIDL) can be used, we can ideally merge those HALs
Wi-Fi 100% No, see notes It's complicated, but wpa_supplicant and hostapd don't need forking, so they can be built in common tree. Device trees can then configure it with BoardConfig flags

Graphics

Common:

  • android.hardware.memtrack-service.example, unless the GPU driver can provide memory usage stats (qcom HAL is open source)

Rendering

For framebuffer:

For DRM:

  • android.hardware.graphics.allocator-service.minigbm
  • mapper.minigbm
  • [email protected] + hwcomposer.drm

Honorable mentions:

OpenGL ES

Mesa can be used:

  • libGLES_mesa

Else ANGLE can be used with a Vulkan backend (hardware or software):

  • libEGL_angle
  • libGLESv1_CM_angle
  • libGLESv2_angle

Vulkan

Build your GPU Vulkan HAL (Mesa provides those), else vulkan.pastel for SwiftShader

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment