本章主要是对Android和Linux驱动做一个简单的介绍
第一节介绍Android 系统架构,一共分为四层,从下到上依次为:
1.第一层:linux内核,主要包括驱动程序以及管理内存、进程、电源等资源的程序。
2.第二层:C/C++代码库,主要包括Linux的.so文件以及嵌入到APK程序中的NDK代码。
3.第三层:Android SDK API,直接面向应用程序的JAVA APK
4.第四层:应用程序,直接面向最终用户的JAVA应用程序(APK程序)
第二节介绍Android移植的主要工作
Android移植可以分成两个部分:应用移植和系统移植。这本书中主要讲的是系统的移植。Android系统移植最主要实现的目标是让Android系统能够在一个特定的硬件平台上运行。Linux内核对于大多数常用的CPU架构都是支持的。Android对于平台上的各种硬件的支持工作也是由Linux内核来完成的,也就是用到了Linux驱动。所以对于系统移植来说除了移植CPU架构外,最主要的也就是要完成Linux驱动的移植。
抽象硬件层HAL(Hardware Abstraction Layer)是一个Android系统特有,用来使Android SDK通过HAL来直接访问Linux驱动。对Android进行增加或修改驱动的话,HAL的代码也必须进行更改。
但是不同版本的Linux内核的驱动不可以通用,必须修改源代码,并且在新的Linux内核下重新编译后才可以用在新的Linux内核上。所以在进行Linux驱动移植时,主要应该考虑的是Linux内核的版本,对于Android版本的话可以不予考虑。只要Linux内核版本相同,就可以在不同的Android上互相替换(有时也需要考虑HAL是否和Linux驱动容)。
第三节介绍查看linux系统的内核版本有两种方法,如下:
在 Linux 终端执行下面的命令 uname –a
在 Linux终端执行下面的命令 cat /proc/version
/proc:Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
第四节介绍 Linux内核版本号的定义规则
linux内核版本号由五部分组成:主版本号,次版本号,修订版本号,微调版本号及为特定的Linux系统特别调校的描述。
第六节介绍设备的分类以及特点
计算机系统的硬件主要由CPU,存储器和外设组成。驱动针对的是存储器和外设(包括CPU内部集成的存储器和外设)
Linux将存储器和外设分为三类,分别为字符设备(Character devices),块设备(Block devices),网络设备(Network devices)。
第七节介绍了Linux驱动:LED
任何的 Linux 驱动都有一个装载函数〈装载驱动时调用〉和一个卸载函数(卸 载驱动时调用〉即可。装载函数和卸载函数分别通过 mobule_init和 module exit宏指定。