nvme Linux driver 學(xué)習(xí)之二pcie設(shè)備枚舉原理

首先任何Linux 驅(qū)動的加載入口都是xxx_init() 接口藤抡,卸載入口是xxx_exit(). 對于nvme驅(qū)動同樣,它的驅(qū)動加載入口是nvme_init()接口硝枉。
其內(nèi)部實現(xiàn)的一個關(guān)鍵的地方在于使用pci_register_driver()接口和它的接口參數(shù)來注冊其支持的設(shè)備的pcie設(shè)備廉丽。
其參數(shù)是nvme_driver,其取值如下:
static struct pci_driver nvme_driver = {
.name = "nvme",
.id_table = nvme_id_table,
.probe = nvme_probe,
.remove = nvme_remove,
.shutdown = nvme_shutdown,
.driver = {
.pm = &nvme_dev_pm_ops,
},
};
其中nvme_driver中的id_table 取值如下
static const struct pci_device_id nvme_id_table[] = {
{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },
{ 0, }
};
其中PCI_DEVICE_CLASS宏用于創(chuàng)建一個struct pci_device_id類型的實例,這個實例只需要匹配指定的pci class妻味,這個指定的匹配PCI_CLASS_STORAGE_EXPRESS的類型正压,想vendor id, device id, subvendor id, subdevice id 都不care,只要匹配上PCI_CLASS_STORAGE_EXPRESS,就可以责球。
需要說明幾點
(1)每個pci設(shè)備都通過struct pci_device_id中的vender id, device id 和class node的一個實例唯一標志.
(2)每一個pci設(shè)備通過struct pci_device類型的實例表示焦履。
(3)每個pci驅(qū)動通過struct pci_driver類型的實例標識,它包含該支持該驅(qū)動的pci設(shè)備pci_device_id表棕诵,device driver設(shè)備驅(qū)動,和probe, remove 等函數(shù)指針裁良。

搞清楚了關(guān)鍵的參數(shù)含義,我們就可以開始pci device 和pci driver的綁定過程
(1)第一步校套,首先系統(tǒng)啟動的時候价脾,pci bus 會scan 所有在這條總線的所有設(shè)備,為每一個pci設(shè)備創(chuàng)建一個struct pci_device 類型的實例笛匙,而struct pci_device類型包含device的成員侨把,正是通過這個成員,pci bus 將所有在總線上得所有設(shè)備連接起來妹孙,通過pci bus的總線描述符的設(shè)備鏈表可以遍歷所有的設(shè)備秋柄。
(2)第二步,當pci driver加載的時候蠢正,pci driver 會初始化骇笔,并且會調(diào)用driver_register()來pci driver加到總線的驅(qū)動鏈表上.這樣支持該驅(qū)動設(shè)備插上去的時候,該通過什么pci driver 來驅(qū)動這個設(shè)備。在pci driver 注冊的過程中笨触,系統(tǒng)會檢查pci 驅(qū)動的id_table 懦傍,看在總線的device list 里面設(shè)備有沒有該pci driver 支持的,如果支持芦劣,就把這個設(shè)備加到這個pci driver的device list 里面粗俱,并開始probe 過程。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虚吟,一起剝皮案震驚了整個濱河市寸认,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌串慰,老刑警劉巖偏塞,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異模庐,居然都是意外死亡烛愧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門掂碱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怜姿,“玉大人,你說我怎么就攤上這事疼燥〔茁” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵醉者,是天一觀的道長但狭。 經(jīng)常有香客問我,道長撬即,這世上最難降的妖魔是什么立磁? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮剥槐,結(jié)果婚禮上唱歧,老公的妹妹穿的比我還像新娘。我一直安慰自己粒竖,他們只是感情好颅崩,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蕊苗,像睡著了一般沿后。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朽砰,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天尖滚,我揣著相機與錄音喉刘,去河邊找鬼。 笑死漆弄,一個胖子當著我的面吹牛饱搏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播置逻,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼备绽!你這毒婦竟也來了券坞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤肺素,失蹤者是張志新(化名)和其女友劉穎恨锚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倍靡,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡猴伶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了塌西。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片他挎。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捡需,靈堂內(nèi)的尸體忽然破棺而出办桨,到底是詐尸還是另有隱情,我是刑警寧澤站辉,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布呢撞,位于F島的核電站,受9級特大地震影響饰剥,放射性物質(zhì)發(fā)生泄漏殊霞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一汰蓉、第九天 我趴在偏房一處隱蔽的房頂上張望绷蹲。 院中可真熱鬧,春花似錦古沥、人聲如沸瘸右。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽太颤。三九已至,卻和暖如春盹沈,著一層夾襖步出監(jiān)牢的瞬間龄章,已是汗流浹背吃谣。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留做裙,地道東北人岗憋。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像锚贱,于是被迫代替她去往敵國和親仔戈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容