发布时间:2014-07-09 17:14:57
pci配置空间中有6个bar,表示mmio或端口在CPU域物理地址空间的分布情况。?
?在写驱动时,通常需要从配置空间中读取相关bar信息,然后使用request_mem_region之类的接口,申请资源,然后使用ioremap将相关的区域映射到内核地址空间中,然后即可使用。
?问题是:pci配置空间中的bar信息,即mmio或io端口的分布,到底是谁决定、谁填写的呢?是硬件自己 or BIOS or OS kernel
?答案:对于x86环境来说(其它硬件环境不确认),pci配置空间中的bar信息最初是由BIOS根据当前环境中的硬件分布信息,进行分配后填入的,32位环境,PCI设备的mmio基本分布于3.5G-4G范围中,基本能保证各设备分配的空间不冲突。在OS kernel启动硬件扫描和初始化时,会读取相应内容,如果有需要,会根据需要进行调整(通常不会)。......【阅读全文】
发布时间:2014-03-06 11:53:51
request_mem_region(start,len,name)请求IO内存空间
start是给定的其实地址,是物理地址,通常是从PCI配置空间中读出来的,
而PCI配置空间的bar地址,通常是BIOS根据硬件情况分配的,防止冲突
如果申请成功,则返回非NULL指针,否则返回NULL
映射后的地址是物理地址,需要使用ioremap将其映射到内核的虚拟地址空间中,将其转换为虚拟地址,才能访问和使用。......【阅读全文】