說明:kernel版本:4.14
arm64處理器
使用工具:source insight 3.5, visio
先回顧一下pcie的架構圖:
那麼問題來了,platform_device
是在什麼時候建立的呢?那就不得不提到device tree
裝置樹了。
我們看看pcie host的裝置樹內容:
pcie: pcie@fd0e0000 ;
};
關鍵字段描述如下:
看一下nwl_pcie_probe
函式:
針對兩種處理方式,nwl pcie
驅動中,實現了兩個irq_chip
,也就是兩種方式的中斷控制器:
再來看一下nwl_pcie_enable_msi
函式:
所以,稍微彙總一下,作為兩種不同的中斷處理方式,套路都是一樣的,都是建立irq_chip
中斷控制器,為該中斷控制器新增irq_domain
,具體裝置的中斷響應流程如下:
裝置連線在pci匯流排上,觸發中斷時,通過pcie控制器充當的中斷控制器路由到上一級控制器,最終路由到cpu;
cpu在處理pcie控制器的中斷時,呼叫它的中斷處理函式,也就是上文中提到過的nwl_pcie_leg_handler
,nwl_pcie_msi_handler_high
,和nwl_pcie_leg_handler_low
;
在級聯的中斷處理函式中,呼叫chained_irq_enter
進入中斷級聯處理;
呼叫generic_handle_irq
觸發具體的pcie裝置的中斷處理函式執行;
呼叫chained_irq_exit
退出中斷級聯的處理;
下篇開始,繼續回歸到虛擬化,期待一下吧。
documentation/devicetree/bindings/pci/xlinx-nwl-pcie.txt
原創 Linux PCI驅動框架分析(二)
說明 kernel版本 4.14 arm64處理器 使用工具 source insight 3.5,visio 話不多說,直接開始。來一張更詳細的結構體組織圖 linux pci驅動框架,基於linux裝置驅動模型,因此有必要先簡要介紹一下,實際上linux裝置驅動模型也是乙個大的topic,先挖個...
Linux pci驅動原始碼
include include include include include include include include include include include include include ifdef linux26 include endif include plx.h defi...
Thinkphp 框架擴充套件之驅動擴充套件例項分析
每個類庫都可以設計自己的驅動,因此3.2版本的驅動目錄沒有獨立出來,而是放到各個類庫的命名空間下面,例如 think log類的驅動放到 think log driver 命名空間下面,think db類的驅動放到了 think db driver 命名空間下面。當然,這只是建議的位置,你完全可以根...