79 lines
3.4 KiB
HTML
79 lines
3.4 KiB
HTML
<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>
|