Why do we need a userspace HAL

Not all components have standardized kernel driver interfaces Kernel drivers are GPL which exposes any proprietary IP Android has specific requirements for hardware drivers must be provided by each Acme hardware implementation typedef struct int foo void char bar void const AcmeFunctions Acme_Init const struct Env env, int argc, char argv Libraries are loaded dynamically at runtime as needed acmelnit const AcmeFunctions const struct Env , int, char dlsym dlHandle, Acme_Init acmeFuncs acmeInit...