Docs: Basic edits, 80 char column
Made changes based on feedback
Bug: 18947865
Change-Id: Ibbf4c2eb89d84dca83d7167c61babc1762d868e8
diff --git a/src/devices/index.jd b/src/devices/index.jd
index 68abdcd..e433f1c 100644
--- a/src/devices/index.jd
+++ b/src/devices/index.jd
@@ -24,76 +24,95 @@
</div>
</div>
- <p>Android provides you with the freedom to implement your own device specifications
- and the drivers to support them. The hardware abstraction layer (HAL) gives you a
- standard way to create software hooks in between the Android
- platform stack and your hardware. In addition, the Android operating system
- is open-sourced to help you through your device's bringup.</p>
+<p>
+Android gives you the freedom to implement your own device specifications and
+drivers. The hardware abstraction layer (HAL) provides a standard method for
+creating software hooks between the Android platform stack and your hardware.
+The Android operating system is also open source, so you can contribute your own
+interfaces and enhancements.
+</p>
- <p>To ensure that your devices maintain a high level of quality and offers a consistent
- experience for your users, they must must also
- pass the tests in the compatibility test suite (CTS). CTS ensures that anyone
- building a device meets a quality standard that ensures apps run reliably well
- and gives users a good experience. For more information, see the
- <a href="{@docRoot}compatibility/index.html">Compatibility</a> section.</p>
+<p>
+To ensure devices maintain a high level of quality and offer a consistent user
+experience, each device must pass tests in the compatibility test suite (CTS).
+The CTS verifies devices meet a quality standard that ensures apps run reliably
+and users have a good experience. For details on the CTS, see
+<a href="{@docRoot}compatibility/index.html">Compatibility</a>.
+</p>
- <h2>Android Low-Level System Architecture</h2>
+<h2 id="Android system architecture">Android system architecture</h2>
-<p>Before you begin porting Android to your hardware, it is important to have an
-understanding of how Android works at a high level. Because your drivers and HAL code interact
-with many layers of Android code, this understanding can help you find
-your way through the many layers of code that are available to you through the AOSP
-(Android Open Source Project) source tree. The following diagram shows a system
-level view of how Android works:
+<p>
+Before porting Android to your hardware, take a moment to understand the Android
+system architecture at a high level. Because your drivers and the HAL interact
+with Android, knowing how Android works can help you navigate the many layers of
+code in the Android Open Source Project (AOSP) source tree.
</p>
<img src="images/ape_fwk_all.png">
<p class="img-caption"><strong>Figure 1.</strong> Android System Architecture</p>
- <h4>Application framework</h4>
- <p>This is the level that most application developers concern themselves with. You should be
- aware of the APIs available to developers as many of them map 1:1 to the underlying HAL
- interfaces and can provide information as to how to implement your driver.
- </p>
-
- <h4>Binder IPC</h4>
- <p>
- The Binder Inter-Process Communication mechanism allows the application framework to
- cross process boundaries and call into the Android system services code. This basically allows
- high level framework APIs to interact with Android's system services. At the application framework level, all
- of this communication is hidden from the developer and things appear to "just work."
- </p>
-
- <h4>System services</h4>
- <p>Most of the functionality exposed through the application framework APIs must
- communicate with some sort of system service to access the underlying hardware. Services
- are divided into modular components with focused functionality
- such as the Window Manager, Search Service, or Notification Manager. System services are grouped
- into two buckets: system and media. The system services include things such as the Window or
- Notification Manager. The media services include all the services involved in playing and
- recording media.
- </p>
-
-<h4>Hardware abstraction layer (HAL)</h4>
-<p>The HAL serves as a standard interface that allows the Android system to call into the device
- driver layer while being agnostic about the lower-level implementations of your drivers and hardware.</p>
-<img src="images/ape_fwk_hal.png">
-<p class="img-caption"><strong>Figure 2.</strong> Hardware abstraction layer (HAL) components</p>
+<h3 id="Application framework">Application framework</h3>
<p>
- You must implement the corresponding HAL (and driver) for the particular piece of hardware that your product
- provides. Android does not mandate a standard interaction between your HAL implementation and your device drivers, so
- you have free reign to do what is best for your situation. However, you must abide by the contract
- defined in each hardware-specific HAL interface for the Android system to be able
- to correctly interact with your hardware. HAL implementations are typically built into
- shared library modules (<code>.so</code> files).
+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>
-<h4>Linux Kernel</h4>
-<p>For the most part, developing your device drivers is the same as developing a typical Linux device driver.
- Android uses a specialized version of the Linux kernel with a few special additions such as
- wakelocks, a memory management system that is more agressive in preserving memory,
- the Binder IPC driver, and other features that are important for a mobile embedded platform like Android.
- These additions have less to do with driver development than with the system's functionality. You can use any version of the kernel that you want 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 the latest Android kernel, see
- <a href="{@docRoot}source/building-kernels.html" >Building Kernels</a>.
+
+<h3 id="Binder IPC">Binder IPC</h3>
+<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>
+
+<h3 id="System services">System services</h3>
+<p>
+Functionality exposed by application framework APIs communicates with system
+services to access the underlying hardware. Services are modular, focused
+components such as Window Manager, Search Service, or Notification Manager.
+Android includes two groups of services: <em>system</em> (services such as
+Window Manager and Notification Manager) and <em>media</em> (services involved
+in playing and recording media).
+</p>
+
+<h3 id="Hardware Abstraction Layer">Hardware abstraction layer (HAL)</h3>
+<p>
+The HAL is a standard interface that allows the Android system to call into the
+device driver layer while being agnostic about the lower-level implementations
+of drivers and hardware.
+</p>
+
+<img src="images/ape_fwk_hal.png">
+
+<p class="img-caption"><strong>Figure 2.</strong> Hardware abstraction layer
+(HAL) components</p>
+
+<p>
+You must implement the corresponding HAL (and driver) for the specific hardware
+your product provides. HAL implementations are typically built into shared
+library modules (<code>.so</code> files). Android does not mandate a standard
+interaction between your HAL implementation and your device drivers, so you have
+free reign to do what is best for your situation. However, to enable the Android
+system to correctly interact with your hardware, you <strong>must</strong> abide
+by the contract defined in each hardware-specific HAL interface.
+</p>
+
+<h3 id="Linux kernel">Linux Kernel</h3>
+<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 agressive 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>
+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 on the latest Android kernel, see <a href="{@docRoot}source/building-kernels.html" >Building Kernels</a>.
+</p>
\ No newline at end of file