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 結構圖
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZucjVzhjN4MTNwQjMzMTMfBzLcJjMvw1MwITMwIzLcRnbl1GajFGd0F2LcRXZu5ibkN3YukGavw1LcpDc0RHaiojIsJye.gif)
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/hci_core.h
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子產品結構圖: