日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Linux那些事儿 之 戏说USB(11)繁华落尽

發(fā)布時(shí)間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux那些事儿 之 戏说USB(11)繁华落尽 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Linux設(shè)備模型中的總線落實(shí)在USB子系統(tǒng)里就是usb_bus_type,它在usb_init函數(shù)注冊(cè),在drivers/usb/core/driver.c文件里定義
struct bus_type usb_bus_type = {.name =		"usb",.match =	usb_device_match,.uevent =	usb_uevent,
};

name自然就是usb總線的綽號(hào)了。match這個(gè)函數(shù)充當(dāng)了一個(gè)紅娘的角色,在總線的設(shè)備和驅(qū)動(dòng)之間牽線搭橋。match指向了函數(shù)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行,經(jīng)歷了linux設(shè)備模型的繁華,參數(shù)我們都已經(jīng)很熟悉了,對(duì)應(yīng)的就是總線兩條鏈表里的設(shè)備和驅(qū)動(dòng),也可以說(shuō)是鵲橋版上的掛牌的和摘牌的。總線上有新設(shè)備或新的驅(qū)動(dòng)添加時(shí),這個(gè)函數(shù)總是會(huì)被調(diào)用,如果指定的驅(qū)動(dòng)能夠處理指定的設(shè)備,也就是匹配成功,函數(shù)返回0。夢(mèng)想是美好的,現(xiàn)實(shí)是殘酷的,匹配是未必成功的,紅娘再努力,雙方對(duì)不上眼也是實(shí)在沒(méi)辦法的事。
第4行,一遇到if和else,我們就知道又處在兩難境地了,代碼里我們可選擇的太多。這里的岔路口只有兩條路,一條給USB設(shè)備走,一條給USB接口走,各走各的路,分開(kāi)了,就不再相見(jiàn)。

總結(jié)

以上是生活随笔為你收集整理的Linux那些事儿 之 戏说USB(11)繁华落尽的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。