PCIE内核注册详解

news/2024/5/15 16:11:16/文章来源:https://blog.csdn.net/qq_21688871/article/details/130371958

代码结构

在Linux内核中,PCIe驱动程序的注册和处理涉及到许多文件,其中一些主要的文件包括:

  1. drivers/pci/pci.h:这个文件定义了PCIe驱动程序结构体和相关的函数。驱动程序需要包含这个头文件才能使用PCIe相关的函数和结构体。

  2. drivers/pci/pci-driver.c:这个文件包含了PCIe驱动程序的核心注册函数pci_register_driver()pci_unregister_driver()。这些函数用于向内核注册和注销PCIe驱动程序。

  3. drivers/pci/probe.c:这个文件包含了PCIe设备探测相关的函数。当系统检测到一个新的PCIe设备时,内核会调用这些函数来确定是否有与该设备匹配的驱动程序。

  4. drivers/pci/pci.c:这个文件包含了PCIe设备初始化相关的函数。一旦驱动程序被匹配到一个PCIe设备,内核会调用这些函数来初始化设备并分配资源。

  5. drivers/pci/pci-sysfs.c:这个文件包含了用于PCIe设备驱动程序的sysfs接口相关的函数。sysfs接口允许用户空间应用程序查询和控制PCIe设备和驱动程序的状态。

  6. arch/x86/pci/pci.c(或者对应架构的文件):这个文件包含了PCIe设备的中断处理函数。当PCIe设备产生中断时,内核会调用这个函数来处理中断。

这些文件涵盖了PCIe驱动程序在内核中注册和处理的主要方面。但是,PCIe驱动程序的具体实现可能会涉及到其他文件和头文件。

代码解读

pcie
这是Linux内核中的PCIe驱动程序初始化代码。以下是每个部分的功能:

  1. struct bus_type pcie_port_bus_type:定义了一个名为pci_express的总线类型,表示PCIe总线。它还包含一个指向pcie_port_bus_match()函数的指针,用于在PCIe总线上匹配设备。

  2. EXPORT_SYMBOL_GPL(pcie_port_bus_type):将pcie_port_bus_type结构体导出为GPL符号,以便其他内核模块可以使用它。

  3. bus_register(&pci_bus_type):注册PCI总线类型,将PCI驱动程序与PCI总线关联起来。

  4. bus_register(&pcie_port_bus_type):如果内核配置中启用了PCIe端口总线,则注册PCIe总线类型,将PCIe端口驱动程序与PCIe总线关联起来。

  5. dma_debug_add_bus(&pci_bus_type):将PCI总线类型添加到DMA调试器中,以便可以跟踪PCI总线上的DMA操作。

  6. postcore_initcall(pci_driver_init):将pci_driver_init()函数添加到内核的后核心初始化调用列表中,以便在内核启动时自动调用该函数。

这个初始化代码在内核启动时运行,用于将PCI和PCIe端口驱动程序注册到内核中,以便它们可以与PCI和PCIe总线进行通信。

struct bus_type pci_bus_type = {.name		= "pci",.match		= pci_bus_match,.uevent		= pci_uevent,.probe		= pci_device_probe,.remove		= pci_device_remove,.shutdown	= pci_device_shutdown,.dev_groups	= pci_dev_groups,.bus_groups	= pci_bus_groups,.drv_groups	= pci_drv_groups,.pm		= PCI_PM_OPS_PTR,.num_vf		= pci_bus_num_vf,.dma_configure	= pci_dma_configure,
};
EXPORT_SYMBOL(pci_bus_type);

这是Linux内核中的PCI总线类型结构体定义和初始化代码。以下是每个部分的功能:

  1. struct bus_type pci_bus_type:定义了一个名为pci的总线类型,表示PCI总线。它还包含一些指向函数的指针,用于处理PCI设备驱动程序、总线事件和电源管理等方面。

  2. .name = "pci":设置总线类型名称为pci

  3. .match = pci_bus_match:设置匹配函数指针,当新设备连接到PCI总线时会调用该函数进行匹配操作。

  4. .uevent = pci_uevent:设置uevent回调函数指针,当PCI设备状态发生变化时会调用该回调函数发送事件通知给用户空间。

  5. .probe = pci_device_probe, .remove = pci_device_remove, .shutdown = pci_device_shutdown, .dev_groups = pci_dev_groups, .bus_groups = pci_bus_groups, .drv_groups = pci_drv_groups: 这些都是处理 PCI 设备驱动程序相关操作的回调函数指针。其中 probe 函数在新设备连接到 PCI 总线上时被调用;remove 函数在从 PCI 总线上移除一个设备时被调用;shutdown 函数在系统关闭或重启时被调用以释放资源;dev_groups、bus_groups 和 drv_group 三个成员变量分别表示了与 PCI 设备、PCI 总线和 PCI 驱动程序相关联的 sysfs 属性组。

  6. .pm = PCI_PM_OPS_PTR:设置电源管理回调函数指针,用于实现 PCI 设备的省电模式。

  7. .num_vf = pci_bus_num_vf:设置虚拟化相关的回调函数指针,用于处理 SR-IOV 相关操作。

  8. .dma_configure = pci_dma_configure:设置 DMA 相关回调函数指针,用于配置 PCI 设备的 DMA 策略。

  9. EXPORT_SYMBOL(pci_bus_type):将pci_bus_type结构体导出为符号,以便其他内核模块可以使用它。

这个初始化代码定义了PCI总线类型结构体,并将其导出为符号。当新设备连接到PCI总线时,内核会自动使用这个结构体中定义的函数进行匹配和驱动程序加载等操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_104266.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

李宏毅 深度学习

目录 深度学习与自然语言处理 | 斯坦福CS224n 课程带学与全套笔记解读(NLP通关指南完结)pytorch快速入门csdn快速入门OS包PIL包Opencv包Dataset类Tensorboard的使用torchvision.transforms 的使用torchvision中数据集的使用DataLoader的使用(torch.util…

Git在工作中的使用流程

Git中的分支 master分支:所有用户可见的正式版本,都从master发布(也是用于部署生产环境的分支,确保master分支稳定性)。主分支作为稳定的唯一代码库,不做任何开发使用。master 分支一般由develop以及hotfi…

从“恰当”的项目管理工具中,了解自己的缺点

项目管理工具是为了帮助管理者,但管理者需要了解自己在特定情况下的“缺点”,才能从“恰当”的工具中获得“恰当”的帮助。如果你不知道在某个特定项目中自己(作为项目经理)的缺点,也不知道自己需要利用哪些好用的项目…

记录-因为写不出拖拽移动效果,我恶补了一下Dom中的各种距离

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 背景 最近在项目中要实现一个拖拽头像的移动效果,一直对JS Dom拖拽这一块不太熟悉,甚至在网上找一个示例,都看得云里雾里的,发现遇到最大的拦路虎就是JS…

2022年NOC大赛创客智慧编程赛道Python初赛题,包含答案

目录 一、单选题 二、多选题 三、判断题 下载文档打印做题: NOC Python 初赛考题 一、单选题 <

【大数据之Hadoop】十八、MapReduce之压缩

1 概述 优点&#xff1a;减少磁盘IO、减少磁盘存储空间。 缺点&#xff1a;因为压缩解压缩都需要cpu处理&#xff0c;所以增加CPU开销。 原则&#xff1a;运算密集型的Job&#xff0c;少用压缩&#xff1b;IO密集型的Job&#xff0c;多用压缩。 2 压缩算法对比 压缩方式选择时…

IDEA 新版安装教程

目录 一、安装IDEA 1、双击安装&#xff0c;然后下一步 2、修改默认安装路径&#xff0c;自定义目录。(建议所有开发工具都放在同一个盘符) 3、改为自定义安装路径&#xff0c;下一步。&#xff08;不用使用中文或空格&#xff09; 4、创建桌面图标等 5、点击安装&#x…

面板数据进行熵值法

面板数据熵值法分析流程如下&#xff1a; 一、案例背景 当前有9家公司连续5年&#xff08;2018-2022年&#xff09;的财务指标数据&#xff0c;想要通过这份数据&#xff0c;确定各个财务指标的权重。熵值法根据指标离散程度确定赋权大小&#xff0c;客观公正准确度高。本次收…

DJ4-5 路由和选路

目录 一、路由与转发的相互作用 二、路由的基本概念 1. 默认路由器 2. 路由算法 三、网络的抽象模型 1. 节点图 2. 费用 Cost 四、路由算法分类 1. 静态路由算法 2. 动态路由算法 3. 全局路由算法 4. 分布式路由算法 一、路由与转发的相互作用 二、路由的基本概念 …

【1G-6G】移动通信技术发展

移动通信技术发展 1G 早在1947年&#xff0c;贝尔实验室的科学家就提出了蜂窝通信的概念&#xff0c;在20世纪60年代对此进行了系统的实验。20世纪60年代末、70年代初开始出现了第一个蜂窝&#xff08;Cellular&#xff09;系统。蜂窝的意思是将一个大区域划分为若干个相邻的…

通过使用生成对抗市场模型改进基于强化学习的交易的泛化

Improving Generalization in Reinforcement Learning–Based Trading by Using a Generative Adversarial Market Model | IEEE Journals & Magazine | IEEE Xplore Improving Generalization in Reinforcement Learning–Based Trading by Using a Generative Adversaria…

使用Docker部署wikitten个人知识库

使用Docker部署wikitten个人知识库 一、wikitten介绍1.wikitten简介2.wikitten特点 二、本地实践环境介绍三、本地环境检查1.检查Docker服务状态2.检查Docker版本 四、部署wikitten个人知识库1.创建数据目录2.下载wikitten镜像3.创建wikitten容器4.查看wikitten容器状态5.检查w…

内网渗透的一些tips

声明&#xff1a;文中涉及到的技术和工具&#xff0c;仅供学习使用&#xff0c;禁止从事任何非法活动&#xff0c;如因此造成的直接或间接损失&#xff0c;均由使用者自行承担责任。 每周不定时持续分享各种干货。 众亦信安&#xff0c;中意你啊&#xff01; 一.密码抓取 平…

C++的异常

文章目录 1. C语言传统的处理错误的方式2. C异常概念3. 异常的使用3.1 异常的抛出和匹配原则 4. C标准库的异常体系5. 自定义异常体系6. 异常的重新抛出7. 函数调用链中异常栈展开匹配原则8. 异常安全9. 异常规范10. 异常的优缺点 1. C语言传统的处理错误的方式 传统的错误处理…

2023北京新一代信息技术应用融合创新人才发展峰会暨鲲鹏开发者创享日·北京站成功举办

以技术创新促产业发展&#xff0c;以开放使能筑人才根基 4月25日&#xff0c;由北京市经济和信息化局、北京市朝阳区人民政府、国家工业信息安全发展研究中心与华为技术有限公司联合主办&#xff0c;北京鲲鹏联合创新中心、北京市中小企业公共服务平台、中国软件行业协会承办的…

几何算法——7.Blending(倒角)的调研、设计及算法

几何算法——7.Blending&#xff08;倒角&#xff09;的调研、设计及算法 1 Parasolid的Blending1.1 关于Parasolid的BlendSurface1.2 Edge Blending1.2.1 Rolling-ball blends1.2.2 Variable rolling-ball blends1.2.3 Chamfers1.2.3.1 face offset chamfers1.2.3.2 apex-rang…

表情迁移 - 2D人像动起来(附带生成web服务提供api接口)

左边原图,右边是渲染后的视频文件 开源地址:https://github.com/AliaksandrSiarohin/first-order-model 官方模型下载地址(需科学上网): google-driveyandex-disk本文docker容器已自带人脸模型 若还需要行为、物品、动画等追踪模型需下载后拷贝至容器内即可使用 API请求…

类对象的大小---this指针

如何计算类对象的大小 问题&#xff1a;类中既可以有成员变量&#xff0c;又可以有成员函数&#xff0c;那么一个类的对象中包含了什么&#xff1f;如何计算一个类的大小&#xff1f; 类对象的存储方式 只保存成员变量&#xff0c;成员函数存放在公共的代码段 结论&#xf…

boot-admin整合Quartz实现动态管理定时任务

淄博烧烤爆红出了圈&#xff0c;当你坐在八大局的烧烤摊&#xff0c;面前是火炉、烤串、小饼和蘸料&#xff0c;音乐响起&#xff0c;啤酒倒满&#xff0c;烧烤灵魂的party即将开场的时候&#xff0c;你系统中的Scheduler&#xff08;调试器&#xff09;&#xff0c;也自动根据…

电视盒子什么牌子好?数码博主盘点2022电视盒子排行榜

网络电视盒子是电视机的标配&#xff0c;开放性的安卓系统能观看海量视频资源&#xff0c;我每年也会进行电视盒子的测评&#xff0c;今天要来分享五款最热门的网络电视盒子推荐&#xff0c;跟着我一起看看网络电视盒子哪个好。 一&#xff1a;泰捷WEBOX60Pro电视盒子 年度…