Android 设备驱动(下)
MTD 驱动 Flash 驱动通常使用 MTD (memory technology device ),内存技术设备。 MTD 的字符设备: /dev/mtdX 主设备号 90. MTD 的块设备: /dev/block/mtdblockX 主设备号 13. MTD 驱动源码 drivers/mtd/mtdcore.c:MTD核心,定义MTD原始设备 drivers/mtd/mtdchar.c:MTD字符设备 drivers/mtd/mtdblock.c:MTD块设备 MTD 结构图 MTD 驱动程序是 Linux 下专门为嵌入式环境开发的新一类驱动程序。Linux 下的 MTD 驱动程序接口被划分为用户模块和硬件模块: 用户模块 提供从用户空间直接使用的接口:原始字符访问、原始块访问、FTL (Flash Transition Layer)和JFS(Journaled File System)。 硬件模块 提供内存设备的物理访问,但不直接使用它们,二十通过上述的用户模块来访问。这些模块提供了闪存上读、写和擦除等操作的实现。 蓝牙驱动 在 Linux 中,蓝牙设备驱动是网络设备,使用网络接口。 Android 的蓝牙协议栈使用BlueZ实现来对GAP, SDP以及RFCOMM等应用规范的支持,并获得了SIG认证。由于Bluez使用GPL授权, 所以Android 框架通过D-BUS IPC来与bluez的用户空间代码交互以避免使用未经授权的代码。 蓝牙协议部分头文件: include/net/bluetooth/bluetooth.h 蓝牙协议源代码文件: net/bluetooth/* 蓝牙驱动程序部分的文件: drivers/bluetooth/* 蓝牙的驱动程序一般都通过标准的HCI控制实现。但根据硬件接口和初始化流程的不同,又存在一些差别。这类初始化动作一般是一些晶振频率,波特率等基础设置。比如CSR的芯片一般通过BCSP协议完成最初的初始化配置,再激活标准HCI控制流程。对Linux来说,一旦bluez可以使用HCI与芯片建立起通信(一般是hciattach + hciconfig),便可以利用其上的标准协议(SCO, L2CAP等),与蓝牙通信,使其正常工作了。 WLAN 设备驱动(Wi-Fi)(比较复杂我面会专门写个wifi分析) 在linux中,Wlan设备属于网络设备,采用网络接口。 Wlan在用户空间采用标准的socket接口进行控制。 WiFi协议部分头文件: include/net/wireless.h WiFi协议部分源文件: net/wireless/* WiFi驱动程序部分: drivers/net/wireless/* wifi模块结构图: |
|