一、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的内核版本号是否相同。