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