| <html devsite> |
| <head> |
| <title>Architecture</title> |
| <meta name="project_path" value="/_project.yaml" /> |
| <meta name="book_path" value="/_book.yaml" /> |
| </head> |
| <body> |
| <!-- |
| Copyright 2017 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| |
| |
| <p> |
| Android system architecture contains the following components: |
| </p> |
| |
| <img src="../images/ape_fwk_all.png"> |
| |
| <p class="img-caption"><strong>Figure 1.</strong> Android system architecture</p> |
| |
| <h2 id="application-framework">Application framework</h2> |
| |
| <p>The application framework is used most often by application developers. As a |
| hardware developer, you should be aware of developer APIs as many map directly |
| to the underlying HAL interfaces and can provide helpful information about |
| implementing drivers.</p> |
| |
| <h2 id="binder-ipc">Binder IPC</h2> |
| <p>The Binder Inter-Process Communication (IPC) mechanism allows the application |
| framework to cross process boundaries and call into the Android system services |
| code. This enables high level framework APIs to interact with Android system |
| services. At the application framework level, this communication is hidden from |
| the developer and things appear to "just work".</p> |
| |
| <h2 id="system-services">System services</h2> |
| <p>System services are modular, focused components such as Window Manager, |
| Search Service, or Notification Manager. Functionality exposed by application |
| framework APIs communicates with system services to access the underlying |
| hardware. Android includes two groups of services: <em>system</em> (such as |
| Window Manager and Notification Manager) and <em>media</em> (services involved |
| in playing and recording media).</p> |
| |
| <h2 id="hal">Hardware abstraction layer (HAL)</h2> |
| <p>A HAL defines a standard interface for hardware vendors to implement, |
| which enables Android to be agnostic about lower-level driver implementations. |
| Using a HAL allows you to implement functionality without affecting or modifying |
| the higher level system. HAL implementations are packaged into modules and |
| loaded by the Android system at the appropriate time. For details, see |
| <a href="/devices/architecture/hal.html">Hardware Abstraction Layer (HAL)</a>. |
| </p> |
| |
| <h2 id="Linux-kernel">Linux kernel</h2> |
| <p>Developing your device drivers is similar to developing a typical Linux |
| device driver. Android uses a version of the Linux kernel with a few special |
| additions such as wake locks (a memory management system that is more aggressive |
| in preserving memory), the Binder IPC driver, and other features important for a |
| mobile embedded platform. These additions are primarily for system functionality |
| and do not affect driver development.</p> |
| |
| <p>You can use any version of the kernel as long as it supports the required |
| features (such as the binder driver). However, we recommend using the latest |
| version of the Android kernel. For details, see |
| <a href="/source/building-kernels.html">Building Kernels</a>.</p> |
| |
| </body> |
| </html> |