首页 > 其他分享 >PCIe BAR空间的值是谁设置的?谁分配的,什么时间分配的?

PCIe BAR空间的值是谁设置的?谁分配的,什么时间分配的?

时间:2024-06-17 17:14:16浏览次数:27  
标签:00 0000 bus reg PCIe pci io BAR 分配

Linux系统下PCIe总线、设备的枚举,资源的分配到底是哪里进行的?一直没搞太清楚,安装参考中的方法构建文件系统,编译内核,利用Qemu调试分析这个问题如下:

内核代码是5.15.0-107-generic, 工作环境是ubuntu 22.04 server OS。

Qemu虚拟机中的PCIe相关打印和对应函数如下

[    1.510805] PCI host bridge to bus 0000:00
[    1.511680] pci_bus 0000:00: root bus resource [bus 00-ff]
[    1.512317] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
[    1.512837] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    1.513208] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[    1.513717] pci_bus 0000:00: root bus resource [mem 0x08000000-0xfebfffff window]
[    1.514096] pci_bus 0000:00: root bus resource [mem 0x100000000-0x17fffffff window]
[    1.517476] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000    ###pci_setup_device函数中打印
[    1.533713] pci 0000:00:01.0: [8086:7000] type 00 class 0x060100
[    1.535804] pci 0000:00:01.1: [8086:7010] type 00 class 0x010180
[    1.544586] pci 0000:00:01.1: reg 0x20: [io  0xc040-0xc04f]         ###__pci_read_base函数中打印,这了打印了地址资源信息
[    1.560891] pci 0000:00:01.1: legacy IDE quirk: reg 0x10: [io  0x01f0-0x01f7]
[    1.578515] pci 0000:00:01.1: legacy IDE quirk: reg 0x14: [io  0x03f6]
[    1.597623] pci 0000:00:01.1: legacy IDE quirk: reg 0x18: [io  0x0170-0x0177]
[    1.607952] pci 0000:00:01.1: legacy IDE quirk: reg 0x1c: [io  0x0376]
[    1.658439] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000
[    1.824434] pci 0000:00:01.3: quirk: [io  0x0600-0x063f] claimed by PIIX4 ACPI
[    1.832974] pci 0000:00:01.3: quirk: [io  0x0700-0x070f] claimed by PIIX4 SMB
[    1.833937] pci 0000:00:01.3: quirk_piix4_acpi+0x0/0x170 took 11718 usecs
[    1.893098] pci 0000:00:02.0: [1234:1111] type 00 class 0x030000
[    1.934991] pci 0000:00:02.0: reg 0x10: [mem 0xfd000000-0xfdffffff pref]   
[    1.972973] pci 0000:00:02.0: reg 0x18: [mem 0xfebb0000-0xfebb0fff]
[    2.034454] pci 0000:00:02.0: reg 0x30: [mem 0xfeba0000-0xfebaffff pref]
[    2.063609] pci 0000:00:02.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
[    2.153403] pci 0000:00:03.0: [8086:100e] type 00 class 0x020000
[    2.166942] pci 0000:00:03.0: reg 0x10: [mem 0xfeb80000-0xfeb9ffff]
[    2.197049] pci 0000:00:03.0: reg 0x14: [io  0xc000-0xc03f]
[    2.226955] pci 0000:00:03.0: reg 0x30: [mem 0xfeb00000-0xfeb7ffff pref]
[    2.360857] ACPI: PCI: Interrupt link LNKA configured for IRQ 10
[    2.363395] ACPI: PCI: Interrupt link LNKB configured for IRQ 10
[    2.365571] ACPI: PCI: Interrupt link LNKC configured for IRQ 11
[    2.367503] ACPI: PCI: Interrupt link LNKD configured for IRQ 11
[    2.368623] ACPI: PCI: Interrupt link LNKS configured for IRQ 9
[    2.402194] iommu: Default domain type: Translated
[    2.402507] iommu: DMA domain TLB invalidation policy: lazy mode

调用栈如下,可见是内核扫描到设备的时候setup device的时候会read pci的config

 具体细节需要分析__pci_read_base函数,通过gdb调测发现是函数__pci_read_base中下图所示的199行获取的,所以是内核从配置空间中读取的。那是谁在何时设置的呢?

 BIOS配置的。

 

参考:

Linux Device Driver Part IV. PCI Device | tcbbd的博客

使用 GDB + Qemu 调试 Linux 内核 | Head First eBPF

PCI设备的初始化_pci resource start-CSDN博客

Linux系统总线之PCI扫描流程_linux pcie扫描过程-CSDN博客

Linux PCIe hotplug arch analysis | Sherlock's blog (wangzhou.github.io)

 

标签:00,0000,bus,reg,PCIe,pci,io,BAR,分配
From: https://www.cnblogs.com/River-blog/p/18248310

相关文章

  • BarTender软件下载附加详细安装教程
    BarTender是美国海鸥科技推出的一款优秀的条码打印软件,应用于WINDOWS95、98、NT、XP、2000、2003和3.1版本,产品支持广泛的条形码码制和条形码打印机,不但支持条形码打印机而且支持激光打印机,还为世界知名品牌条形码打印机开发了增强驱动。​安装包获取......
  • 微信小程序中对custom-tab-bar高度的处理
    现在有个页面中由一个scroll-view组成<!--index.wxml--><scroll-viewscroll-ystyle="height:100vh"><viewstyle="height:100%;display:flex;align-items:center;justify-content:center;">scroll-view</view></scroll-vi......
  • 209. Minimum Size Subarray Sum
    Givenanarrayofpositiveintegersnumsandapositiveintegertarget,returntheminimallengthofasubarraywhosesumisgreaterthanorequaltotarget.Ifthereisnosuchsubarray,return0instead.Example1:Input:target=7,nums=[2,3,1,2,......
  • 【工具推荐】基于Win10系统自带软件Xbox Game Bar录屏后下载安装ffmpeg然后使用ffmpeg
    本文详细介绍了如何基于Win10系统自带软件XboxGameBar录屏,以及如何下载安装ffmpeg,然后如何使用ffmpeg将录屏得到的mp4视频转换为可用于博客中做功能演示用的gif动态图片,同时还提供了一个一键转换脚本,减少繁琐的操作步骤。......
  • Dynamsoft.DotNet.BarcodeReader.Bundle-10.2.1100
    DynamsoftBarcodeReaderSDK.NetEditionDynamsoftBarcodeReaderSDKenablesyoutoefficientlyembedbarcodereadingfunctionalityinyourweb,desktopormobileapplicationusingjustafewlinesofcode.Savingyoumonthsofaddeddevelopmenttime......
  • 不同PC设备共用同用一套键鼠,以及使用Barrier常见问题解决方案
    设备环境:一台windows11,一台ubuntu桌面版网络环境:使用同一wifi一、下载安装windows安装下载地址:Releasev2.4.0·debauchee/barrier·GitHububuntu安装sudoapt-getinstallbarrier二、设置使用服务端设置服务端作为主控端,键鼠连接的是服务端设备,配置连接......
  • Flink有状态流处理 未对齐barrier性能好
    有状态流处理#什么是状态?#虽然数据流中的许多操作只是查看一个个体一次事件(例如事件解析器),有些操作会记住多个事件的信息(例如窗口操作符)。这些操作被称为宏伟威严的.有状态操作的一些例子:当应用程序搜索某些事件模式时,状态将存储到目前为止遇到的事件序列。当聚合每分钟......
  • (更新自2024年6月)Flutter3中BottomNavigationBar的用法。
    import'package:flutter/material.dart';voidmain(){runApp(MyApp());}classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){returnconstMaterialApp(home:MyHomePage(),);}}classMyH......
  • 【Py/Java/C++三种语言OD独家2024D卷真题】20天拿下华为OD笔试之【二分查找】2024D-部
    有LeetCode算法/华为OD考试扣扣交流群可加948025485可上全网独家的欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录题目描述与示例题目描述输入描述输出描述示例输入输出说明解题思路代码pythonjavacpp时......
  • 解决方案 | winrar 使用命令行解压到同名文件夹 (QTTabBar 中创建一个【解压文件】命令
     需求:我们经常需要把rar或者zip解压到当前文件夹,如果是直接解压的话可能会解压出来很多文件,事实上我们当然可以通过右键解压到这个指定文件夹。  但是经过查询知道,如果是指定文件夹好说,直接指定.\new_data\表示在当前目录下的new_data文件夹即可。但是这不是我想要的,我想......