Assembly 如何找到x86上的PCI内存孔?

Assembly 如何找到x86上的PCI内存孔?,assembly,x86,osdev,pci,Assembly,X86,Osdev,Pci,我这样问是因为在学习基本操作系统开发时,除了基本的引导加载程序/实模式中断/保护模式/写入VGA内存任务外,很难找到关于x86编程的许多事情的可靠/官方文档 在阅读维基百科关于x86体系结构、芯片组、I/O控制器集线器和PCI/PCI Express的文章以获得更好的理解后,显然有两种访问PCI接口的方法:I/O端口和内存映射IO 我(错误地?)理解使用x86 I/O端口被认为是一种传统方法,不推荐使用,因此使用PCI MMIO访问方法(通过PCI“内存孔”)将更可取,但我找不到任何不使用I/O

我这样问是因为在学习基本操作系统开发时,除了基本的引导加载程序/实模式中断/保护模式/写入VGA内存任务外,很难找到关于x86编程的许多事情的可靠/官方文档

在阅读维基百科关于x86体系结构、芯片组、I/O控制器集线器和PCI/PCI Express的文章以获得更好的理解后,显然有两种访问PCI接口的方法:I/O端口和内存映射IO

我(错误地?)理解使用x86 I/O端口被认为是一种传统方法,不推荐使用,因此使用PCI MMIO访问方法(通过PCI“内存孔”)将更可取,但我找不到任何不使用I/O端口(如0xCF8/0xCFC)访问/探测PCI、do配置等的指南/信息/源代码

PCI内存孔在哪里?如何仅通过MMIO访问/探测PCI


我试着阅读Linux PCI代码,但我对它和Linux内核结构太不熟悉,对正在发生的事情或如何正确导航没有任何正确的想法,因此任何了解它的人如果能够澄清它是如何实现这一点的,我将不胜感激

有三个PCI地址空间:配置、I/O和内存。它是映射到您在PCI Express系统上所说的“漏洞”中的配置地址空间,尽管增强了配置访问机制。BIOS(用于引导设备)或OS(其他一切)使用配置空间(除其他外)来配置每个PCI设备的I/O和/或内存区域(如果有)在CPU的I/O或内存空间中的映射位置。ECAM映射配置空间的位置可以通过ACPI找到。非常有用的响应,谢谢!(抱歉,我不能投票,因为我是新来的)。人们投票将此作为非主题来结束,因为它是在寻求非现场资源,事实上,考虑到问题的原始措辞,他们是正确的。然而,我认为这里有一个合理的问题,它并不是本质上的离题,所以我对这个问题进行了编辑,这样你就不会寻找一个离题资源,而是一个包含实际信息的规范答案。这使得这一话题再次成为热门话题,接近票数的选票应该会慢慢消失,而问题永远不会结束。如果您不同意,请随时恢复我的编辑,但请注意,它可能已关闭。从评论中,似乎认为存在“PCI内存漏洞”是理所当然的,但我从未意识到这一点。ISA有一个孔,1MiB以下的内存有一个孔,但是PCI?“我们说的是什么洞?”玛格丽特我猜他的意思是,32位x86架构在上层内存中为硬件设备保留的空间。基本上,物理地址扩展(PAE)在奔腾Pro中的作用,如果您熟悉的话。