首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux内核如何设置PCI条以避免地址冲突?

Linux内核如何设置PCI条以避免地址冲突?
EN

Stack Overflow用户
提问于 2020-01-17 20:23:58
回答 1查看 963关注 0票数 3

据我所知,(这很可能是错误的)每个PCI设备都知道它想要声明多少iomem/ioport地址空间,但是它不知道在哪里(偏移)。只有BIOS或OS才能告诉设备应该在哪里,因为有人必须与所有PCI设备交谈,并协调他们的iomem/ioport地址分配请求,这样分配的地址就不会重叠,并且这种协调发生在启动时、热插拔事件或pci rescan期间。但是,在Linux内核代码中,我只找到一个函数(pci_read_bases),它读取条形图信息,并相应地设置pci_dev & iomem_resource/ioport_resource,而不更改条形图。所以问题是:

  1. 操作系统(Linux内核)能改变条形吗?或者只有BIOS才能在加载OS之前做到这一点?
  2. 如果内核可以更改条,那么协调地址分配的逻辑在哪里运行?(我确实看到了像pbus_assign_resources_sorted这样的函数,但在我看来,该函数只将现有的条映射到iomem_resource之类的内核对象,而不是改变条)
EN

回答 1

Stack Overflow用户

发布于 2020-01-17 21:19:28

对于正常的静态分配,BIOS写条,内核在引导时读取它们。有趣的是动态分配的设备,如热插拔的NVMe卡。在这种情况下,BIOS必须保留一个范围,以防设备在启动时不存在或大于已删除的设备。内核得到一个中断,并必须读取新的条形值并将它们添加到地址空间。例如,参见nvme_remap_bar https://elixir.bootlin.com/linux/v5.4/source/drivers/nvme/host/pci.c#L1649

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59794383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档