说明:
- Kernel版本:4.14
- ARM64处理器
- 使用工具:Source Insight 3.5, Visio
1. 概述
先回顾一下PCIe的架构图:
- 本文将讲PCIe Host的驱动,对应为Root Complex部分,相当于PCI的Host Bridge部分;
- 本文会选择Xilinx的nwl-pcie来进行分析;
- 驱动的编写整体偏简单,往现有的框架上套就可以了,因此不会花太多笔墨,点到为止;
资料直通车:Linux内核源码技术学习路线+视频教程内核源码
2. 流程分析
- 但凡涉及到驱动的分析,都离不开驱动模型的介绍,驱动模型的实现让具体的驱动开发变得更容易;
- 所以,还是回顾一下上篇文章提到的驱动模型:Linux内核建立了一个统一的设备模型,分别采用总线、设备、驱动三者进行抽象,其中设备与驱动都挂在总线上,当有新的设备注册或者新的驱动注册时,总线会去进行匹配操作(match函数),当发现驱动与设备能进行匹配时,就会执行probe函数的操作;
- 深入分析Linux PCI驱动框架分析(二)中提到过PCI设备、PCI总线和PCI驱动的创建,PCI设备和PCI驱动挂接在PCI总线上,这个理解很直观。针对PCIe的控制器来说,同样遵循设备、总线、驱动的匹配模型,不过这里的总线是由虚拟总线platform总线来替代,相应的设备和驱动分别为platform_device和platform_driver;
那么问题来了,platform_device是在什么时候创建的呢?那就不得不提到Device Tree设备树了。