Android使用Linux2.6,对标准内核改动较少,但是增加了一些内容,如yaffs文件系统

Android专用驱动

Ashmem匿名共享内存
节点名称/dev/ashmem, 为用户空间程序提供内存分配机制,实现类似malloc的功能
内核中代码路径: kernelmm/ashmeme.c
C libutils库对其进行了封装:system/core/libcutils/ashmeme-*.c

Binder
节点名称/dev/binder, 为用户程序提供IPC支持,是Android中的主要IPC方式
用户空间的libutils工具库(framework/base/libs/utils)和Service Manager守护进程中调用Binder接口提供对整个系统的支持

Logger
三个设备节点:/dev/log/main, /dev/log/event, /dev/log/radio
在内核中代码: kernel/drivers/misc/logger.c
在用户空间logcat(system/core/logcat)调用Logger驱动

Android使用的设备驱动

Framebuffer显示驱动
对于嵌入式系统,Framebuffer通常作为LCD控制器驱动或者其他显示设备的驱动;
FB是一个字符设备,通常其设备节点为/dev/fbX,但在Android中使用/dev/graphic/fb0,该设备节点由init进程自动创建,被libui库调用
FB驱动在用户空间多使用ioctl,mmap,write等文件系统接口进行操作,ioctl用于获得/设置信息,mmap可以将Framebuffer的内存映射到用户空间,write直接用写的方式输出显示内容

Event输入设备驱动
Event驱动是通用的输入设备驱动,目前可支持鼠标,键盘,触摸屏等多种输入设备;
Event设备在文件系统中的设备节点为:/dev/input/eventX,由init进程创建,公libui库使用;
用户空间使用read,ioctl,poll等文件系统接口操作Event设备

V4L2 Camera & Video驱动
V4L2驱动既可以支持视频捕获,也可以支持视频输出,但因为两者硬件结构相差很大,因此一个系统中的两种驱动程序需要分别实现;
Android中没有直接使用V4L2驱动,而是通过Camera或者Overlay硬件抽象层来使用
用户空间使用ioctl, mmap操作V4L2

OSS音频驱动
Open Sound System是基于字符的音频驱动, 用户空间用ioctl/read/write操作/dev/mixer, /dev/dsp, /dev/xxx接口
Android中没有直接使用OSS驱动,可基于OSS来实现Android Audio部分的硬件抽象层

ALSA音频驱动
比OSS使用更方便的音频驱动,除了OSS原来的ioctl等原始接口外,ALSA还提供了函数库,以简化应用程序;
建议使用用户空间的ALSA库接口,而不是直接操作ALSA驱动程序;
Android中没有直接使用ALSA驱动,而是通过Android–>Audio硬件抽象层–>ALSA库–>ALSA驱动

MTD驱动
Memory Technology Device,通常用于Linux中Flash驱动程序,包括字符设备(/dev/mtdX)和块设备(/dev/block/mtdblockX
MTD驱动通常不在用户空间直接调用,而是用于构建文件系统,用户空间只需要使用文件系统即可

蓝牙驱动
两部分:蓝牙协议 + 蓝牙控制器驱动;
蓝牙协议部分:包括HCI接口,SCO模块,L2CAP模块,BNEP模块等
蓝牙控制器驱动部分:为基于SDIO/UART/USB接口的蓝牙设备提供驱动

Wlan驱动
用户空间使用标准的socket接口进行控制
Wifi驱动在Android中一般编译成module的方式,通过应用程序设置开关进行加载和卸载

Logo

更多推荐