第一篇 Android 驱动开发之简单概述

1.Android设备设计之七层结构:

第一层:HardWare  =  硬件层。

第二层:Bootloader  =  引导层。

主要包含:初始化时钟,内存等;以便引导linux内核。

第三层:Linux Kernel  =  Linux内核驱动层。

主要包含:外设驱动;内存管理;进程管理;电源管理;其实这些都是linux kernel 具有的功能。

第四层:HAL  =  Hardware Abstraction Layer  -  硬件抽象层。

主要包含linux的动态链接库*.so;以及嵌入到APK的NDK代码。

第五层:Library and Runtime  =  系统运行库层

第六层:Application FrameWork layer  =  应用框架层

主要是直接面向应用程序的Java APK。

第七层:Application  =  应用层

所谓的各种APP,包括:拍照,电话,短信,android桌面,浏览器,以及各种游戏。


2.对于和Android 移植相关的工作岗位分类:

(1)android应用移植:由于应用程序在不同的硬件平台之间是有差异的,android SDK API 也有可能有差异(因为有的平台厂商会修改原生android SDK API)

(2)android系统移植:主要针对上面的第二层部分内容,因为android的底层其实就是linux系统,而linux系统可以移植到很多硬件平台(ARM,X86,PowerPC),主要的工作还是要保证最小系统可以在特定的平台上可以跑起来,同时还要保证各种外围设备能够正常工作,例如(LCD,TP,camera,BT,WLAN,GPS等等)

PS:android系统移植外设驱动的时候,如果外设厂家提供驱动代码的话,开发难度很小;如果厂家不提供参考代码的话,需要自己根据系统驱动框架编写设备驱动,这样的话,难度还是相当大的,尤其是一些复杂的外设。


3.什么是HAL层,为什么会有HAL层?

HAL层的中文名称叫,硬件抽象层。

存在形式:HAL层的代码一般有C或C++的形式存在,最终编译生成*.so,一种linux动态链接库文件。

那么为什么会有HAL层呢?有什么好处呢?

首先说一下HAL的作用,它处在linux驱动内核层和Android Framework层之间,起着承上启下的作用。

如果没有他,Android SDK会直接和linux 驱动内核直接沟通;这样很不好,不符合很多人的利益,因为各种外设驱动属于linux,而linux又是遵循GPL开源协议,这样的话,驱动代码也要开源,但是这些驱动是很多外围设备厂家辛辛苦苦开发的,不愿意这样白白的开发给所有人,包括很多竞争对手;

那怎么办?由HAL层来解决这个困难,HAL其实就是把原来驱动的控制逻辑一部分独立出来,编译生成SO文件,这部分代码不遵循GPL协议,不需要开源,保证了外设厂家的利益,同时也不影响linux的框架设计。


4.查看linux内核版本的命令:

(1)设备启动后,等待adb口 的出现

(2)adb root

(3)adb shell uname -a   该命令不行,可以使用   adb shell cat /proc/version


5.搭建开发环境

(1)搭建软件开发环境,构建linux虚拟机(后面详细介绍)

(2)搭建硬件开发环境,开发板;不一定非要使用网上推荐的SC2440等开发板,只要是一个嵌入式设备都可以,手机或者pad等,只要你有相关的设备资料就可以。

驱动开发的最大的魅力就是软硬结合,没有硬件设备,无从谈起驱动开发;也是限制驱动学习的门槛之一。


6.要想学习Android驱动都需要哪些方面知识:

(1)硬件知识:电子通信方面的内容;主要是能看懂电路原理图基本就可以了。

(2)linux操作系统相关知识:包括linux虚拟机使用,linux基本常用命令。

(3)基本脚本知识:shell脚本,简单Makefile。

(4)了解编译系统:编译工具的选择,系统的配置过程,编译过程 -> 一般新项目开始搭建的时候会用到。

(5)核心内容,linux 系统驱动的各种框架,各种机制。

(6)个人认为,android系统的启动流程非常关键,有利于建立整个系统的宏观概念,不需要详细深挖,但要知道大概的流程。

(7)android 内核系统机制,应该是linux系统编程和网络编程的揉合。


7.闲话android

(1)开放性,android几乎所有源码都是可以免费下载的。遵循Apache开源协议。

(2)强大的SDK,Software Development Kit 软件开发套件 实现操作系统和开发者之间的接口。

android通过总结应用开发规律,提供Activity,Service,Broadcast Receiver以及Content Provide四大组件。

(3)不断改进UI,新版UI更加人性化,对于用户是最直观的艺术盛宴。

(4)逐步完善的生态系统

(5)阵营良莠不齐

(6)系统运行效率有待改善

据不完全统计,android的启动过程花费的平均时间超过了1分钟,甚至有的达到了5分钟以上。

(7)兼容性问题

8.参考文档:

(1)Android 深度探索(卷I)HAL与驱动开发 - 李宁

(2)深入理解Android内核设计思想 - 林学森

(3)深入理解Android(卷I)- 邓凡平

你可能感兴趣的:(Android,Driver)