linux驅動之USB驅動程式框架
USB驅動程式框架:
app:
-----------------------------------------------------------------------
USB裝置驅動程式 ----》知道資料的含義
核心 --------------------------------------------------------
USB匯流排驅動程式 -----》1、識別,2.找到匹配的裝置驅動。3.提供USB讀寫函式(不知道資料的具體含義)
----------------------------------------------------------------------
USB匯流排控制器
UHCI OHCI EHCI
硬體 -----------------------------
USB裝置
USB匯流排規範:
UHCI | intel | 低速(1.5Mbps)/全速(12Mbps) | 硬體功能強大,軟體簡單 |
OHCI | microsoft | 低速(1.5Mbps)/全速(12Mbps) | 硬體相對較弱,軟體複雜 |
EHCI | 高速(480Mbps) |
linux-2.6.30.4核心自帶 OHCI。
USB匯流排驅動程式的作用:
1、識別USB裝置
1.1分配地址
1.2告訴USB裝置(set address)
1.3發出命令,獲取描述符
描述符資訊在在inlcude/linux/usb/ch9.husb_device_descriptor
usb_config_descriptor
每個硬體都有一個裝置描述符號,每個裝置描述服中又包含配置描述符號(多個)。
2、查詢並板狀對應的裝置驅動程式
3、提供USB讀寫函式
---------------------------------------------------------------------------------------------------------------------------------------------------
核心中usb驅動流程:
hub_irq
kick_khubd
hub_thread
hub_events
hub_port_connect_change
usb_alloc_dev
dev->dev.bus = &usb_bus_type;
choose_address(udev);//為新裝置分配編號
bus->devnum_next);
hub_port_init : "%s %s speed %sUSB device using %s and address %d\n",
hub_set_address//把編號告訴USB裝置
usb_get_device_descriptor;//獲取裝置描述符
retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);
usb_new_device(udev);
usb_get_configuration////把所有的描述符號都都出來,解析
device_add//把裝置放入usb_bus_type的dev連結串列,從usb_bus_type的driver連結串列裡取出usb_driver逐個進行比較,
//把usb_interfaces和usb_driver的id_table比較
//如果能夠匹配,那麼呼叫usb_driver的probe函式(參照下圖)