There are cases where your embedded system includes hardware that isn’t already supported in Android. And while some of the work you can do inside the AOSP is modular, adding support for new types of hardware is trickier since it requires knowledge of some of Android’s internals. This appendix shows you how to extend Android’s various layers to support your own type of hardware.
While you may not be interested in actually adding support for new types of hardware in your system, you might find this appendix instructive if you’re trying to understand the intricate details of how the various layers of the Android stack actually come together.
Also, while this appendix demonstrates the modifications using a 2.3/Gingerbread codebase, the mechanisms and Java code being modified are very similar in 4.2/Jelly Bean. Where major differences exist, they will be pointed out in the text.
As we discussed in Chapter 2, contrary to standard “vanilla Linux,” Android requires more than just proper device drivers to function on hardware. It in fact defines a new Hardware Abstraction Layer (HAL), which defines an API for each type of hardware supported by Android’s core. In order for a hardware component to properly interface with Android, it must have a corresponding hardware “module” (unrelated to kernel modules) that conforms to the API specified for that type of hardware.
Generally, each type of hardware supported by Android has a corresponding ...