Linux那些事儿 之 戏说USB(11)繁华落尽
生活随笔
收集整理的這篇文章主要介紹了
Linux那些事儿 之 戏说USB(11)繁华落尽
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Linux設備模型中的總線落實在USB子系統里就是usb_bus_type,它在usb_init函數注冊,在drivers/usb/core/driver.c文件里定義
name自然就是usb總線的綽號了。match這個函數充當了一個紅娘的角色,在總線的設備和驅動之間牽線搭橋。match指向了函數usb_device_match
第1行,經歷了linux設備模型的繁華,參數我們都已經很熟悉了,對應的就是總線兩條鏈表里的設備和驅動,也可以說是鵲橋版上的掛牌的和摘牌的。總線上有新設備或新的驅動添加時,這個函數總是會被調用,如果指定的驅動能夠處理指定的設備,也就是匹配成功,函數返回0。夢想是美好的,現實是殘酷的,匹配是未必成功的,紅娘再努力,雙方對不上眼也是實在沒辦法的事。
第4行,一遇到if和else,我們就知道又處在兩難境地了,代碼里我們可選擇的太多。這里的岔路口只有兩條路,一條給USB設備走,一條給USB接口走,各走各的路,分開了,就不再相見。
struct bus_type usb_bus_type = {.name = "usb",.match = usb_device_match,.uevent = usb_uevent,
};
name自然就是usb總線的綽號了。match這個函數充當了一個紅娘的角色,在總線的設備和驅動之間牽線搭橋。match指向了函數usb_device_match
static int usb_device_match(struct device *dev, struct device_driver *drv)
{/* devices and interfaces are handled separately */if (is_usb_device(dev)) {/* interface drivers never match devices */if (!is_usb_device_driver(drv))return 0;/* TODO: Add real matching code */return 1;} else if (is_usb_interface(dev)) {struct usb_interface *intf;struct usb_driver *usb_drv;const struct usb_device_id *id;/* device drivers never match interfaces */if (is_usb_device_driver(drv))return 0;intf = to_usb_interface(dev);usb_drv = to_usb_driver(drv);id = usb_match_id(intf, usb_drv->id_table);if (id)return 1;id = usb_match_dynamic_id(intf, usb_drv);if (id)return 1;}return 0;
}
第1行,經歷了linux設備模型的繁華,參數我們都已經很熟悉了,對應的就是總線兩條鏈表里的設備和驅動,也可以說是鵲橋版上的掛牌的和摘牌的。總線上有新設備或新的驅動添加時,這個函數總是會被調用,如果指定的驅動能夠處理指定的設備,也就是匹配成功,函數返回0。夢想是美好的,現實是殘酷的,匹配是未必成功的,紅娘再努力,雙方對不上眼也是實在沒辦法的事。
第4行,一遇到if和else,我們就知道又處在兩難境地了,代碼里我們可選擇的太多。這里的岔路口只有兩條路,一條給USB設備走,一條給USB接口走,各走各的路,分開了,就不再相見。
總結
以上是生活随笔為你收集整理的Linux那些事儿 之 戏说USB(11)繁华落尽的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux那些事儿 之 戏说USB(10
- 下一篇: Linux那些事儿 之 戏说USB(12