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/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模組結構圖: