Android深度探索(卷1)HAL与驱动开发读书笔记 第一章

一、Android的系统构架

 1.linux内核

Android是基于linux内核,所以android和其他linux系统的内核差异小。这一层主要包括linux的驱动程序以及内存管理、进程管理、电源管理等。

 2.c/c++代码库

 3.Android的sdk api

SDK API是由java 语言所编写。所以在第三层就是由java所编写的library

  4.应用程序

    此层的应用程序主要靠第三层的sdk API 来完成各项功能。

二、android系统移植的主要工作

    Android一直分为两部分:系统移植,应用移植。系统移植是指第四层的应用一直到某个特定的平台。系统移植是指将android的操作系统在某个特定的硬件平台上运行。

要想android的操作系统在某个特定的硬件平台上运行,首先实现该操作系统支持硬件的cpu构架。其次要让操作系统识别平台上的各种硬件(如声卡、显示器、蓝牙设备等),并且由linux内核完成,主要是linux内核。

硬件抽象层HAL 存在的二层,是普通的库文件(既 .os 文件)。SDK通过HAL直接访问linux驱动。Android不像其他linux系统一样有应用程序直接访问驱动,而是中间增加了HAL 一层。如果android增加新的驱动或者修改原来的驱动代码,那么HAL中的相关代码也要改变。

Android的移植主要包括两个方面:1.移植linux驱动 2. 移植HAL。移植linux 内核很大程度下是指移植linux驱动程序。

查看Linux内核的两个方法:

1.在终端下执行如下命令,

       uname -a

2.cat /proc/version

/proc不是普通的文件系统 ,而是linux内核映像,也就是说该文件是存放在linux系统内存中的。

三、

   1.驱动是直接和硬件交互的一类程序。负责对硬件的抽象。

   2.计算机的硬件主要由cpu、存储器和外设组成。

   3.linux将存储器和外设分为3种。

     1)字符设备

        字符设备是指那些必须按照串行顺序依次进行访问的设备。

     2)网络设备 

        网络设备为数据包的接受和发送而设计。

     3)块设备

        块设备是指可以任意访问。并且以块为单位。块设备经过系统的快速缓冲。但是字符设备不经过系统的快速缓冲。

    块设备和字符设备没有明显的区别。但是两者的驱动设计有很大的差别。

   4.linux驱动只和linux的内核有关。和linux系统无关。不管哪个linux系统只要使用了相同的内核,驱动就可以通用。唯一可以判断linux内核是否相同的方法就是查看linux的内核版本号是否相同。

原文地址:https://www.cnblogs.com/haiyin/p/5439294.html