Linux Device Driver - USB

前篇: Linux Device Driver - vmalloc


工作需求, 先跳至第 13 章
第 13 章 是介紹 USB
一開始介紹 USB 的基本概念, 從 13.4 開始介紹 USB 驅動程式 如何撰寫

github usb driver example 

最主要透過 usb_register() 函式 來進行
定義在 #include <linux/usb.h>
傳入值是 struct usb_driver 的位置



struct usb_driver 有幾個欄位.
基本的 像
    .name : 註冊時會顯示
              usbcore: registered new interface driver <name>
           這 名稱會出現在 /sys/bus/usb/drivers/ 下, 產生一個目錄

    .probe : device plug in 時, 會帶到這個 function
    .disconnect : device unplug 時, 會帶到這個 function
    .id_table : struct usb_device_id


 struct usb_device_id, 主要紀錄要註冊 usb device 的 vendor ID 與 product ID. 
    這邊 0x0bda : Vendor ID, 0xb82c : Product ID


然後宣告:
MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl);


.probe / .disconnect 註冊function 先簡單打印 :



==

執行結果:

insmod
    usbcore: registered new interface driver rtl88x2bu
    usb_register : ret=0
    module init ret=0

plug in USB wifi dongle

    usb 3-10: new high-speed USB device number 15 using xhci_hcd
    usb 3-10: New USB device found, idVendor=0bda, idProduct=b82c
    usb 3-10: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    usb 3-10: Product: 802.11ac NIC
    usb 3-10: Manufacturer: Realtek
    usb 3-10: SerialNumber: 123456
    rtw_drv_init is HERE


Unplug:

    usbcore: registered new interface driver btusb
    usb 3-10: USB disconnect, device number 2
    rtw_dev_remove is HERE

rmmod:
    module exit start
    usbcore: deregistering interface driver rtl88x2bu
    module exit success




留言

熱門文章