SlideShare a Scribd company logo
1
Android's HIDL:
Treble in the HAL
YouTubeTM
Livestream
March 28th
2018
Karim Yaghmour
@karimyaghmour
karim.yaghmour@opersys.com
2
These slides are made available to you under a Creative Commons Share-
Alike 3.0 license. The full terms of this license are here:
https://creativecommons.org/licenses/by-sa/3.0/
Attribution requirements and misc., PLEASE READ:
● This slide must remain as-is in this specific location (slide #2), everything
else you are free to change; including the logo :-)
● Use of figures in other documents must feature the below “Originals at”
URL immediately under that figure and the below copyright notice where
appropriate.
● You are free to fill in the “Delivered and/or customized by” space on the
right as you see fit.
● You are FORBIDEN from using the default “About” slide as-is or any of its
contents.
● You are FORBIDEN from using any content provided by 3rd parties without
the EXPLICIT consent from those parties.
(C) Copyright 2018, Opersys inc.
These slides created by: Karim Yaghmour
Originals at: www.opersys.com/community/docs
Delivered and/or customized by
3
About
● Author of:
● Introduced Linux Trace Toolkit in 1999
● Originated Adeos and relayfs (kernel/relay.c)
● Training, Custom Dev, Consulting, ...
4
Agenda
1. Introduction
2. Basics
3. HAL Architecture Rework
4. Walkthrough
5. Adding a New HIDL
6. Support Infrastructure
5
1. Introduction
● Goals
● Origins
● Architecture recap
6
1.1. Goals
● Recap HIDL's origins
● Describe what HIDL does
● Outline how it fits into Android architecture
● Detail how to use it and how it works
7
1.2. Origins
● Part of Android's Project Treble
● Extends existing HAL concepts
● Similar to AIDL
8
1.3. Architecture Recap
9
10
11
/frameworks/base/services/core/java/...
/frameworks/base/services/core/jni/
/hardware/libhardware/
/device/[MANUF.]/[DEVICE]
Kernel or module
/frameworks/base/core/...
AOSP-provided
ASL
Manuf.-provided
Manuf. license
Manuf.-provided
GPL-license
12
HIDLVNDK
VINTF
HIDL
VINTF
13
2. Basics
● HAL's role
● Traditional HAL before 8.x
● HIDL
● Links
14
2.1. HAL's Role
● Per-device-type hardware abstraction
● Example:
● SurfaceFlinger uses hwcomposer HAL
● Location uses gps HAL
● Lights uses lights HAL
● Etc.
● Google specifies HAL signature
● Manufacturer/SoC vendor provides HAL implementation
● Reference implementations:
● Leads devices found in AOSP
● SoC vendor reference designs/boards in BSP
15
2.2. Traditional HAL Before 8.x
● Google specifies HALs as “C” header files
● HAL module author uses header in implementation
● Resulting binary shipped as part of release
● Modules loaded at boot time by system services
● Headers could (and did) change between versions
● Required reworking, rebuilding, reshipping new
version
● To update to a new version of Android:
● All modules had to be updated, be they trivial or difficult
16
2.3. HIDL
● “Hardware Interface Definition Language”
● New layer under system services
● Formalized and versioned HAL interface definitions
●
Similar to AIDL, yet different
●
Example HIDLs in 8.x/Oreo:
● graphics/composer 2.1
● gnss 1.0
● Etc.
●
Once published, a given HIDL definition is immutable:
● Even in 9.x/P, graphics/composer 2.1 and gnss 1.0 will be the same as in 8.x.
● Fresh port assumes using latest HAL sig available
● Most importantly:
● Modules created against a given signature should continue to work so long as that
signature is supported.
● Depends on Google, but incentives are aligned
● More on this in tomorrow's presentation
17
2.4. Links
● General doc:
● https://source.android.com/devices/architecture/hidl/
● C++
● https://source.android.com/devices/architecture/hidl-
cpp/
● Java
● https://source.android.com/devices/architecture/hidl-
java/
18
3. HAL Architecture Rework
● Overall architecture
● Detailed architecture / Java
● Detailed architecture / C++
19
3.1. Overall Architecture
20
3.2. Detailed Architecture / Java
21
3.3. Detailed Architecture C++
22
4. Walkthrough
● JNI Layer
● HIDL Layer
● HIDL Glue
23
4.1. JNI Layer
●
JNI Java<->C/C++ method/function registration -- same before and after Treble:
● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/frameworks/base/services/java/com/android/server/SystemServer.java
● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/frameworks/base/services/java/com/android/server/SystemServer.java#367
● System.loadLibrary("android_servers"); ==> Loads libandroid_servers.so
●
This file defines which JNI files to compile into libandroid_servers.so:
●
http://aosp.opersys.com/xref/android-8.1.0_r9/xref/frameworks/base/services/core/jni/Android.mk
●
Including: com_android_server_lights_LightsService.cpp
●
This file defines the rules to build libandroid_servers.so:
● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/frameworks/base/services/Android.mk
●
Another file compiled into libandroid_servers.so is onload.cpp:
● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/frameworks/base/services/core/jni/onload.cpp
● That file contains a function called: JNI_OnLoad()
● JNI_OnLoad() is automatically called by ART when libandroid_servers.so is loaded.
●
JNI_OnLoad contains calls to JNI registration functions, such as register_android_server_LightsService(env);
●
http://aosp.opersys.com/xref/android-
8.1.0_r1/xref/frameworks/base/services/core/jni/com_android_server_lights_LightsService.cpp:register_android_server_LightsService()
● JniRegisterNativeMethods()
●
jniRegisterNativeMethods() calls into the ART VM to register C/C++ calls against a Java class.
24
4.2. HIDL Layer
● http://aosp.opersys.com/xref/android-
8.1.0_r9/xref/frameworks/base/services/core/java/com/android/server/lights/LightsServic
e.java:
● LightsService constructor
●
setLightLocked calls on setLight_native
● http://aosp.opersys.com/xref/android-
8.1.0_r9/xref/frameworks/base/services/core/jni/com_android_server_lights_LightsServic
e.cpp:setLight_native()
●
LightHal::associate();
●
Ilight::getService();
● http://aosp.opersys.com/xref/android-
8.1.0_r9/xref/hardware/interfaces/light/2.0/default/Light.cpp:HIDL_FETCH_ILight()
● GetLightDevice()
●
hw_get_module ()
●
dlopen() ==> results in lights.[hw-board].so to be loaded
25
4.3. HIDL Glue
● There are two main paths with HIDL:
●
Same-Process (passthrough)
●
Binderized
● This build file can generate BOTH options:
● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/hardware/interfaces/light/2.0/default/Android.mk
– android.hardware.light@2.0-impl.so ==> default same-process implementation
– android.hardware.light@2.0-service ==> binderized remote process
● The default binderized process in the case of lights (i.e. android.hardware.light@2.0-service) essentially loads
android.hardware.light@2.0-impl.so.
● Example *legacy* lights module implementation:
● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/device/huawei/angler/liblight/lights.c
●
This is the file that would be calling into drivers in the kernel.
● The decision to use passthrough vs. binderized service depends on the board-specific manifest.xml:
●
http://aosp.opersys.com/xref/android-8.1.0_r9/xref/device/generic/goldfish/manifest.xml
26
5. Adding a New HIDL
● New interface definition
● Use of update-makefiles.sh
● Use of hidl-gen
● See/implement default implementation
● Tweak default implementation makefiles
● Add entry in product manifest
27
6. Support Infrastructure
● HIDL tools (host + device) + libraries
● Manifest file parts + device-specific mk files
● Online doc/reference
● On-device:
● File locations
● Loaded files in address space
● Processes
● Etc.
28
Thank you ...
karim.yaghmour@opersys.com
29
Acknowledgements:
● Several diagrams distributed by Google under
CC-BY-SA license or ASL 2.0.

More Related Content

PDF
Understanding the Android System Server
PDF
Embedded Android Workshop with Pie
PDF
Explore Android Internals
ODP
Embedded Android : System Development - Part III
PDF
Embedded Android : System Development - Part II (HAL)
PDF
Embedded Android : System Development - Part I
PDF
Embedded Android : System Development - Part III (Audio / Video HAL)
PDF
Android Things : Building Embedded Devices
Understanding the Android System Server
Embedded Android Workshop with Pie
Explore Android Internals
Embedded Android : System Development - Part III
Embedded Android : System Development - Part II (HAL)
Embedded Android : System Development - Part I
Embedded Android : System Development - Part III (Audio / Video HAL)
Android Things : Building Embedded Devices

What's hot (20)

PPT
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
PDF
Android Treble: Blessing or Trouble?
PDF
Low Level View of Android System Architecture
PPT
Learning AOSP - Android Linux Device Driver
PDF
Android Boot Time Optimization
PDF
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
PPT
Android booting sequece and setup and debugging
PDF
Embedded Android : System Development - Part IV (Android System Services)
PDF
Embedded Android : System Development - Part II (Linux device drivers)
PDF
Android OS Porting: Introduction
PDF
Embedded Android : System Development - Part IV
ODP
Q4.11: Porting Android to new Platforms
PDF
Android IPC Mechanism
PPT
Learning AOSP - Android Booting Process
PPTX
Android Booting Sequence
PDF
A deep dive into Android OpenSource Project(AOSP)
PPTX
Binder: Android IPC
PDF
Embedded Android Workshop
PDF
Android for Embedded Linux Developers
PPTX
Android - Application Framework
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
Android Treble: Blessing or Trouble?
Low Level View of Android System Architecture
Learning AOSP - Android Linux Device Driver
Android Boot Time Optimization
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Android booting sequece and setup and debugging
Embedded Android : System Development - Part IV (Android System Services)
Embedded Android : System Development - Part II (Linux device drivers)
Android OS Porting: Introduction
Embedded Android : System Development - Part IV
Q4.11: Porting Android to new Platforms
Android IPC Mechanism
Learning AOSP - Android Booting Process
Android Booting Sequence
A deep dive into Android OpenSource Project(AOSP)
Binder: Android IPC
Embedded Android Workshop
Android for Embedded Linux Developers
Android - Application Framework
Ad

Similar to Android's HIDL: Treble in the HAL (20)

PDF
Inside Android's UI at AnDevCon IV
PDF
Accessing Hardware on Android
PDF
Android's Multimedia Framework
PDF
L4-pt1-HAL.pdf
PDF
Embedded Android Workshop with Oreo
PDF
Inside Android's UI at AnDevCon V
PDF
Inside Android's UI at AnDevCon VI
PDF
Embedded Android in Real Life - Live Embedded Event 2021
PPTX
Introduction of android treble
PDF
Android Internals
PDF
Embedded Android Workshop with Marshmallow
PDF
Android Platform Debugging & Development
PDF
Embedded Android Workshop with Lollipop
PDF
Embedded Android Workshop with Lollipop
PDF
Leveraging Android's Linux Heritage at AnDevCon IV
PDF
Inside Android's UI
PDF
Running Code in the Android Stack at ABS 2014
PDF
Embedded Android Workshop with Marshmallow
PDF
Embedded Android Workshop with Marshmallow
PDF
Embedded Android Workshop with Marshmallow
Inside Android's UI at AnDevCon IV
Accessing Hardware on Android
Android's Multimedia Framework
L4-pt1-HAL.pdf
Embedded Android Workshop with Oreo
Inside Android's UI at AnDevCon V
Inside Android's UI at AnDevCon VI
Embedded Android in Real Life - Live Embedded Event 2021
Introduction of android treble
Android Internals
Embedded Android Workshop with Marshmallow
Android Platform Debugging & Development
Embedded Android Workshop with Lollipop
Embedded Android Workshop with Lollipop
Leveraging Android's Linux Heritage at AnDevCon IV
Inside Android's UI
Running Code in the Android Stack at ABS 2014
Embedded Android Workshop with Marshmallow
Embedded Android Workshop with Marshmallow
Embedded Android Workshop with Marshmallow
Ad

More from Opersys inc. (20)

PDF
Android Automotive
PDF
Android 10 Internals Update
PDF
Android Security Internals
PDF
Scheduling in Android
PDF
Android Things Internals
PDF
Android Platform Debugging and Development
PDF
Embedded Android Workshop with Nougat
PDF
Embedded Android Workshop with Nougat
PDF
Android Things: Android for IoT
PDF
Android Things Internals
PDF
Scheduling in Android
PDF
Brillo / Weave Internals
PDF
Android Platform Debugging and Development
PDF
Memory Management in Android
PDF
Embedded Android Workshop with Nougat
PDF
Brillo / Weave Internals
PDF
Project Ara
PDF
Android Platform Debugging and Development
PDF
Memory Management in Android
PDF
Brillo/Weave Internals
Android Automotive
Android 10 Internals Update
Android Security Internals
Scheduling in Android
Android Things Internals
Android Platform Debugging and Development
Embedded Android Workshop with Nougat
Embedded Android Workshop with Nougat
Android Things: Android for IoT
Android Things Internals
Scheduling in Android
Brillo / Weave Internals
Android Platform Debugging and Development
Memory Management in Android
Embedded Android Workshop with Nougat
Brillo / Weave Internals
Project Ara
Android Platform Debugging and Development
Memory Management in Android
Brillo/Weave Internals

Recently uploaded (20)

PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Approach and Philosophy of On baking technology
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Empathic Computing: Creating Shared Understanding
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Encapsulation theory and applications.pdf
PDF
Electronic commerce courselecture one. Pdf
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Chapter 3 Spatial Domain Image Processing.pdf
NewMind AI Weekly Chronicles - August'25 Week I
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
NewMind AI Monthly Chronicles - July 2025
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Approach and Philosophy of On baking technology
Mobile App Security Testing_ A Comprehensive Guide.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Diabetes mellitus diagnosis method based random forest with bat algorithm
Empathic Computing: Creating Shared Understanding
Reach Out and Touch Someone: Haptics and Empathic Computing
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
“AI and Expert System Decision Support & Business Intelligence Systems”
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Encapsulation theory and applications.pdf
Electronic commerce courselecture one. Pdf
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...

Android's HIDL: Treble in the HAL

  • 1. 1 Android's HIDL: Treble in the HAL YouTubeTM Livestream March 28th 2018 Karim Yaghmour @karimyaghmour karim.yaghmour@opersys.com
  • 2. 2 These slides are made available to you under a Creative Commons Share- Alike 3.0 license. The full terms of this license are here: https://creativecommons.org/licenses/by-sa/3.0/ Attribution requirements and misc., PLEASE READ: ● This slide must remain as-is in this specific location (slide #2), everything else you are free to change; including the logo :-) ● Use of figures in other documents must feature the below “Originals at” URL immediately under that figure and the below copyright notice where appropriate. ● You are free to fill in the “Delivered and/or customized by” space on the right as you see fit. ● You are FORBIDEN from using the default “About” slide as-is or any of its contents. ● You are FORBIDEN from using any content provided by 3rd parties without the EXPLICIT consent from those parties. (C) Copyright 2018, Opersys inc. These slides created by: Karim Yaghmour Originals at: www.opersys.com/community/docs Delivered and/or customized by
  • 3. 3 About ● Author of: ● Introduced Linux Trace Toolkit in 1999 ● Originated Adeos and relayfs (kernel/relay.c) ● Training, Custom Dev, Consulting, ...
  • 4. 4 Agenda 1. Introduction 2. Basics 3. HAL Architecture Rework 4. Walkthrough 5. Adding a New HIDL 6. Support Infrastructure
  • 5. 5 1. Introduction ● Goals ● Origins ● Architecture recap
  • 6. 6 1.1. Goals ● Recap HIDL's origins ● Describe what HIDL does ● Outline how it fits into Android architecture ● Detail how to use it and how it works
  • 7. 7 1.2. Origins ● Part of Android's Project Treble ● Extends existing HAL concepts ● Similar to AIDL
  • 9. 9
  • 10. 10
  • 13. 13 2. Basics ● HAL's role ● Traditional HAL before 8.x ● HIDL ● Links
  • 14. 14 2.1. HAL's Role ● Per-device-type hardware abstraction ● Example: ● SurfaceFlinger uses hwcomposer HAL ● Location uses gps HAL ● Lights uses lights HAL ● Etc. ● Google specifies HAL signature ● Manufacturer/SoC vendor provides HAL implementation ● Reference implementations: ● Leads devices found in AOSP ● SoC vendor reference designs/boards in BSP
  • 15. 15 2.2. Traditional HAL Before 8.x ● Google specifies HALs as “C” header files ● HAL module author uses header in implementation ● Resulting binary shipped as part of release ● Modules loaded at boot time by system services ● Headers could (and did) change between versions ● Required reworking, rebuilding, reshipping new version ● To update to a new version of Android: ● All modules had to be updated, be they trivial or difficult
  • 16. 16 2.3. HIDL ● “Hardware Interface Definition Language” ● New layer under system services ● Formalized and versioned HAL interface definitions ● Similar to AIDL, yet different ● Example HIDLs in 8.x/Oreo: ● graphics/composer 2.1 ● gnss 1.0 ● Etc. ● Once published, a given HIDL definition is immutable: ● Even in 9.x/P, graphics/composer 2.1 and gnss 1.0 will be the same as in 8.x. ● Fresh port assumes using latest HAL sig available ● Most importantly: ● Modules created against a given signature should continue to work so long as that signature is supported. ● Depends on Google, but incentives are aligned ● More on this in tomorrow's presentation
  • 17. 17 2.4. Links ● General doc: ● https://source.android.com/devices/architecture/hidl/ ● C++ ● https://source.android.com/devices/architecture/hidl- cpp/ ● Java ● https://source.android.com/devices/architecture/hidl- java/
  • 18. 18 3. HAL Architecture Rework ● Overall architecture ● Detailed architecture / Java ● Detailed architecture / C++
  • 22. 22 4. Walkthrough ● JNI Layer ● HIDL Layer ● HIDL Glue
  • 23. 23 4.1. JNI Layer ● JNI Java<->C/C++ method/function registration -- same before and after Treble: ● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/frameworks/base/services/java/com/android/server/SystemServer.java ● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/frameworks/base/services/java/com/android/server/SystemServer.java#367 ● System.loadLibrary("android_servers"); ==> Loads libandroid_servers.so ● This file defines which JNI files to compile into libandroid_servers.so: ● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/frameworks/base/services/core/jni/Android.mk ● Including: com_android_server_lights_LightsService.cpp ● This file defines the rules to build libandroid_servers.so: ● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/frameworks/base/services/Android.mk ● Another file compiled into libandroid_servers.so is onload.cpp: ● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/frameworks/base/services/core/jni/onload.cpp ● That file contains a function called: JNI_OnLoad() ● JNI_OnLoad() is automatically called by ART when libandroid_servers.so is loaded. ● JNI_OnLoad contains calls to JNI registration functions, such as register_android_server_LightsService(env); ● http://aosp.opersys.com/xref/android- 8.1.0_r1/xref/frameworks/base/services/core/jni/com_android_server_lights_LightsService.cpp:register_android_server_LightsService() ● JniRegisterNativeMethods() ● jniRegisterNativeMethods() calls into the ART VM to register C/C++ calls against a Java class.
  • 24. 24 4.2. HIDL Layer ● http://aosp.opersys.com/xref/android- 8.1.0_r9/xref/frameworks/base/services/core/java/com/android/server/lights/LightsServic e.java: ● LightsService constructor ● setLightLocked calls on setLight_native ● http://aosp.opersys.com/xref/android- 8.1.0_r9/xref/frameworks/base/services/core/jni/com_android_server_lights_LightsServic e.cpp:setLight_native() ● LightHal::associate(); ● Ilight::getService(); ● http://aosp.opersys.com/xref/android- 8.1.0_r9/xref/hardware/interfaces/light/2.0/default/Light.cpp:HIDL_FETCH_ILight() ● GetLightDevice() ● hw_get_module () ● dlopen() ==> results in lights.[hw-board].so to be loaded
  • 25. 25 4.3. HIDL Glue ● There are two main paths with HIDL: ● Same-Process (passthrough) ● Binderized ● This build file can generate BOTH options: ● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/hardware/interfaces/light/2.0/default/Android.mk – android.hardware.light@2.0-impl.so ==> default same-process implementation – android.hardware.light@2.0-service ==> binderized remote process ● The default binderized process in the case of lights (i.e. android.hardware.light@2.0-service) essentially loads android.hardware.light@2.0-impl.so. ● Example *legacy* lights module implementation: ● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/device/huawei/angler/liblight/lights.c ● This is the file that would be calling into drivers in the kernel. ● The decision to use passthrough vs. binderized service depends on the board-specific manifest.xml: ● http://aosp.opersys.com/xref/android-8.1.0_r9/xref/device/generic/goldfish/manifest.xml
  • 26. 26 5. Adding a New HIDL ● New interface definition ● Use of update-makefiles.sh ● Use of hidl-gen ● See/implement default implementation ● Tweak default implementation makefiles ● Add entry in product manifest
  • 27. 27 6. Support Infrastructure ● HIDL tools (host + device) + libraries ● Manifest file parts + device-specific mk files ● Online doc/reference ● On-device: ● File locations ● Loaded files in address space ● Processes ● Etc.
  • 29. 29 Acknowledgements: ● Several diagrams distributed by Google under CC-BY-SA license or ASL 2.0.