Android驱动

Android驱动

>>>用户空间驱动程序

在用户空间实现驱动程序是把驱动程序的一部分放在用户空间,但不能将驱动程序的任意部分放在用户空间内。而且并非所有设备驱动都在用户空间实现(对于大部分设备驱动程序是在内核空间实现的)。

>>>Linux设备驱动

Linux将所有的设备当做文件处理(设备文件,通常在/dev目录下),应用程序可以像操作普通文件一样对设备文件进行操作。Linux系统的设备分为三类:字符设备、块设备和网络设备。

字符设备:通常指像普通文件或字节流一样,一字节为单位顺序读/写的设备,如并口设备、虚拟控制台等。与普通文件的区别在于:普通文件可以被随机访问,而大多数字符设备只能提供顺序访问,因为对它们的访问不会被系统所缓存(帧缓存(framebuffer)除外)。

块设备:指一些需要以块为单位随机读/写的设备,不仅可以提供随机访问,而且可以容纳文件系统(硬盘、缓存等)。

网络设备:指通过网络能够与其他主机进行数据通信的设备(网卡等)。不同于内核和字符,以及块设备驱动程序之间的通信,内核和网络设备驱动程序之间的通信调用一套数据包处理函数。Linux网络设备不是面向流的设备,因此不会将网络设备的名称(如eth0)映射到文件系统中去。

>>>Android专用驱动

Android专用驱动一般不是Linux的标准驱动,作用是辅助系统运行,一般不操作实际硬件。

(1)Ashmem:匿名共享内存驱动,通过内核的机制,为用户空间程序提供分配内存的机制
(2)Logger:轻量级的log驱动,为用户层程序提供log的支持
(3)Binder驱动:基于OpenBinder驱动,为Android平台提供IPC(进程间通信)的支持
(4)能源管理:基于Linux的能源管理,为嵌入式系统做了优化
(5)Android Power Management:定时器驱动,用于唤醒设备
(6)Low Memory Killer:在缺少内存的情况下,杀死进程
(7)Android PMEM:物理内存驱动

>>>Android使用的设备驱动

Framebuffer驱动、输入设备驱动、v4l2摄像头-视频驱动、OSS音频驱动,以上驱动的工作原理大致一致,在此做个总结:通过文件接口调用驱动设备节点(用户空间实现),查找对应的设备号,基于字符设备驱动程序核心,调用各自的驱动核心,进而调用具体驱动,通过驱动对硬件进行操作(内核空间实现)。
ALSA音频驱动,工作原理与上述几种驱动有所不同:ALSA工具通过ALSA用户空间接口调用ALSA库,进而通过文件接口调用驱动设备节点,后面流程类似。
MTD(内存技术设备)驱动,分为字符设备和块设备,二者统一调用MTD原始设备驱动核心,进而通过调用Flash驱动程序实现对硬件的调用。
蓝牙驱动和WLAN驱动,二者皆为网络设备,使用网络接口。蓝牙设备的网络协议为协议族AF_BLUETOOTH(31),WLAN在用户空间使用标准的Socket接口进行控制。

posted on 2018-07-27 16:48  Siyecho  阅读(219)  评论(0编辑  收藏  举报

导航