描述:
内核版本:4.14
ARM64处理器
使用工具:源洞察3.5,Visio
1.概述
首先,回顾一下PCIe的建筑图:
本文就来说说PCIe主机的驱动,对应的是根联合体部分,相当于PCI的主桥部分;
本文选取Xilinx的nwl-pcie进行分析。
驱动整体编写简单,足以覆盖现有框架,不会占用太多笔墨;
2.过程分析
说到驾驶的分析,离不开驾驶模型的引入,而驾驶模型的实现使得具体的驾驶开发更加容易;
所以我们来回顾一下上一篇文章中提到的驱动模型:Linux内核建立了统一的设备模型,由总线、设备和驱动抽象而成,其中设备和驱动都挂在总线上。当有新的设备注册或新的驱动注册时,总线会执行匹配操作(match功能),当发现驱动和设备可以匹配时,会执行探测功能的操作;
《Linux PCI驱动程序框架分析(二)》提到了PCI设备、PCI总线、PCI驱动程序的创建。PCI设备和PCI驱动都挂接在PCI总线上,直观。PCIe控制器也遵循设备、总线、驱动的匹配模型,但是这里的总线被虚拟总线平台总线代替,对应的设备和驱动是platform_device和platform _ driver分别。
那么问题来了,platform_device是什么时候创建的?然后你要提到设备树设备树。
2.1设备树
设备树用于描述硬件信息,包括节点的各种属性,在dts文件中定义,最终会编译成dtb文件加载到内存中;
在启动过程中,内核将把dtb文件解析成device_node描述的DeviceTree。
根据设备节点节点,创建平台设备结构,并最终在系统中注册,这就是PC