Linux PCI驱动框架分析过程

本文聚焦于Linux 4.14内核在ARM64架构下的PCI驱动分析,利用源洞察3.5和Visio进行研究。首先回顾PCIe架构,重点关注主机驱动,即根联合体部分。以Xilinx的nwl-pcie为例,说明驱动编写的基本原理。接着,文章深入探讨Linux驱动模型,解释设备、总线和驱动如何通过匹配实现连接。在PCIe控制器中,总线被平台总线取代,平台设备和驱动通过设备树描述的硬件信息创建。最后,文章展示了PCIe主机在设备树中的配置,解析如何从dts文件创建并注册平台设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述:

内核版本: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值