
— 新聞中心 —
NEWS CENTRES
全國免費客服電話 18268652722 郵箱:www.jungshuodz@163.com
手機:18268652722
電話:18268652722
地址:寧波市北侖區(qū)大碶廟前山路45號
人氣:
過河.jpg)
過河.jpg)
對于一些特殊的驅(qū)動程序,比如VFIO驅(qū)動程序,它們知道如何自己管理DMA并設(shè)置這個標志,以便IOMMU層允許它們設(shè)置和管理自己的I/O地址空間。好了,今天我們的重點不是總線,而是編寫Linux驅(qū)動程序。在接觸任何設(shè)備寄存器之前,驅(qū)動程序需要通過調(diào)用pci_enable_device() 來啟用PCI 設(shè)備,該函數(shù)在內(nèi)部執(zhí)行以下操作:
操作系統(tǒng)BUG:系統(tǒng)在啟用這些資源之前不檢查資源分配。如果在調(diào)用pci_request_resources() 之前調(diào)用pci_enable_device(),則當兩個設(shè)備分配到同一范圍時,設(shè)備驅(qū)動程序無法檢測到錯誤。這不是一個常見問題,但目前Linux無法快速解決這個問題。
當然,這并不意味著內(nèi)核已經(jīng)為我們編寫了Linux PCI驅(qū)動程序,我們不必做任何事情。至少你需要大致了解內(nèi)核做了什么,這樣你才能明白你應(yīng)該做什么。 dev_groups: 附加到設(shè)備的屬性,將在綁定到驅(qū)動程序時創(chuàng)建。內(nèi)存地址空間由設(shè)備驅(qū)動程序(即上面提到的設(shè)備驅(qū)動程序)使用,而PCI配置空間由Linux PCI初始化代碼使用,用于配置PCI設(shè)備。
首先必須明確兩個概念:Linux內(nèi)核PCI設(shè)備驅(qū)動程序和設(shè)備驅(qū)動程序本身。 remove: 每當刪除此驅(qū)動程序處理的設(shè)備時(在取消注冊驅(qū)動程序或手動將其從熱插拔插槽中拔出期間),都會調(diào)用remove()函數(shù)。驅(qū)動程序總是離不開數(shù)據(jù)結(jié)構(gòu)。在Linux中,數(shù)據(jù)結(jié)構(gòu)用于表示各種設(shè)備或其他事物。設(shè)備驅(qū)動程序:設(shè)備的特定驅(qū)動程序負責(zé)保存和恢復(fù)設(shè)備上下文,并作為設(shè)備策略所有者請求電源狀態(tài)更改。
PCI-PM 寄存器嚴格屬于PCI 驅(qū)動程序的域——IHV 設(shè)備驅(qū)動程序不需要訪問這些寄存器中的任何一個。 OnNow 架構(gòu)是一個分層架構(gòu),自然地處理設(shè)備驅(qū)動程序、PCI 驅(qū)動程序和ACPI 驅(qū)動程序(和ASL)集成。一般來說,這允許在系統(tǒng)RAM 高于4G_物理_ 的系統(tǒng)上實現(xiàn)更高效的DMA。
帶有_wc 后綴的函數(shù)返回到頁面的寫入組合映射,并且只能與io_mapping_create_wc() 創(chuàng)建的映射一起使用。所以這里的PCI設(shè)備驅(qū)動就是大致描述一下Linux內(nèi)核對于PCI設(shè)備驅(qū)動為我們(main)做了什么事情,那么。它們增加返回的pci_dev 上的引用計數(shù),并且這些設(shè)備上的引用計數(shù)最終必須通過調(diào)用pci_dev_put() 來減少(可能在卸載模塊時)。
相關(guān)推薦