本章内容首先整体了解到了安卓系统移植和驱动开发概述的整体框架。
安卓的系统架构分为四层:Linux内核、c/c++代码库、Android SDK API、应用程序。
安卓系统移植的主要两部分工作是应用移植和系统移植,应用移植是将应用程序移植到某一特定的硬件平台上,而系统移植是指让安卓操作系统在某一个特定平台上运行。
Linux内核版本有三个,分别是linux2.4、linux2.6、linux3.x,linux内核版本号由主版本号、次版本号、修订版本号、微调版本号组成,这也需要我清楚认识一下linux内核的相关信息。
由于linux内核版本更新很快,所以linux内核对从事驱动开发的我们影响很大,但是这对于学习linux驱动开发来说影响相对较小,所以不管是哪个版本的内核,只要掌握一个内核版本的驱动开发就好了。学习linux驱动要用linux系统,我们应该选择自己熟悉的系统作为自己的实验环境。
学习linux驱动首先应该准备一个自己熟悉的linux操作系统,用于开发和测试linux驱动;其次准备一块开发版;接着应该学习GNU C以及相关的硬件知识并且不断的实践 。而对于linux设备驱动来说,驱动针对的对象是存储器和外设,而不是针对CPU,linux将存储器和外设分为字符设备、块设备、网络设备,另外,usb驱动、PCI驱动、LCD驱动等大体可归为上述三类设备。linux驱动代码涉及了很多系统的函数和结构体,如readl、writel、printk、miscdevice等,我们需要知道任何的linux驱动都有一个装载函数和一个卸载函数,装载函数和卸载函数分别通过mobule_init和module_exit宏指定。
所以本章我认识到,学习linux驱动编程一定要了解linux驱动只与linux内核有关,与用户使用的linux系统无关,唯一可以判断linux内核版本号的定义规则,只有组成内核版本号的五部分完全相同,才能说明两个linux系统的内核是相同的。所以从这一点可以看出,学习安卓驱动开发,实际上就是学习linux驱动开发,知识安卓增加了一个HAL,这是安卓特有的,一般的安卓驱动都会有对应的HAL,不过HAL这不是必须的,通过NDK也可以直接访问linux驱动。