Android系统移植与驱动开发概述
1.1Android系统架构
Android的系统架构分为4层(Linux内核层,C/C++代码库,Android SDK API和应用程序)
1.Linux内核层:包括Linux的驱动程序以及内存管理,进程管理,电源管理等程序。
Android和Linux kernel版本对应表
Android中文名 |
Android系统版本 |
Linux kernel内核版本 |
纸杯蛋糕20090430 |
Android1.5 |
Linux2.6.27 |
甜甜圈 20090915 |
Android1.6 |
Linux2.6.29 |
松饼 2009-2010 |
Android2.0-2.2 |
Linux2.6.29 |
冻酸奶 2010-2011 |
Android2.2 |
Linux2.6.32 |
姜饼 2010-2011 |
Android2.3 |
Linux2.6.35 |
蜂巢 2011 |
Android3.0 |
Linux2.6.36 |
冰激淋三明治2011 |
Android4.0 |
Linux3.0.X |
果冻豆 2012 |
Android4.1 |
Linux3.0.31/3.1.10 |
新口味果冻豆2012-2013 |
Android4.2/4.3 |
Linux3.4.0 |
奇巧巧克力 |
Android4.4 |
Linux5.0 |
棒棒糖 |
Android5.0 |
Linux |
备注:2012年5月18日,Linux kernel3.3发布,该版本最重要的一个特性是Android的Linux kernel代码重新回归Linux kernel代码库。同时,内核中也包含着Android的硬件驱动。今后的Android内核将直接驱动硬件,对软硬件开发者都是好事情,而芯片制造商则需要调整硬件架构,以兼容更强大的Linux3.3以上版本的内核,对于Google而言,提供了更好的体验和系统版本更好的融合与升级。
第二层:C/C++代码库
作用:使用C/C++编写的代码库(Linux下的so文件),也包括Dalivk虚拟机的运行时。
第三层:Android SDK API
也叫做Java API层,用Java编写的各种Library,且Library是基于Dalvik虚拟机格式的。
第四层:应用程序
Android 用户直接接触,所有的Android应用程序都属于这一层,而这一层主要依靠第三层中的Android SDK API来完成各种功能。
1.2Android系统移植的主要工作
Android移植分为:应用移植和系统移植(本书重要讨论系统移植)
应用移植是指将一个应用程序移植到某个特定硬件平台上。
系统移植是指让Android操作系统在某一个特定硬件平台上运行。
Android系统移植的主要工作是:1.移植Linux驱动。2.移植HAL(硬件抽象层)。
Android 系统移植很大程度上是Linux内核的移植。Linux内核移植主要是移植驱动程序。
1.3查看Linux内核版本
方法一:在Linux终端执行uname -a的命令
方法二:在Linux终端执行cat /proc/version的命令
备注:/proc是系统内核的映像,该目录中的文件是存放在系统内存中的。
1.4Linux内核版本号的定义规则
Linux内核版本2.6.29.7-flykernel-12a中
2是主版本号,6是次版本号,29是修订版本号,7是对2.6.29的微调版本号,
flykernel-12a是Linux内核专门为flykernel调校。//调校描述可以是任意字符串,可自定义。
1.5如何学习Linux驱动开发
1.准备一个自己熟悉的Linux操作系统,用于开发和测试Linux驱动。
2.准备一块开发板(基于ARM)。
3.学习GNU C。
4.学习相关的硬件知识。
5.不断的实践。
1.6Linux驱动设备
1.6.1设备驱动的发展和作用
驱动是直接和硬件交互的一类程序,负责对硬件进行抽象。
1.6.2设备的分类及特点
驱动将设备分为:字符设备,块设备,网络设备。
1.字符设备:指必须以串行顺序依次进行访问的设备。如鼠标,键盘。
2.块设备:可以用任意顺序访问,以块为单位。如硬盘,软驱。
3.网络设备:面向数据包的接收与发送,并不对应文件系统的节点。
1.7见识一下什么叫Linux驱动
LED
任何一个Linux驱动都有一个装载函数和一个卸载函数,分别是module_init, module_exit.