张老师您好!
最近在看linux 2.4 kernel的PCI总线方面的东西(参考书籍:linux 内核源代码情景分析,毛德操),对PCI总线和设备的枚举以及配置过程有些不是很理解,枚举我可以看懂,但是在配置的时候就不是很清楚了。不清楚的地方如下,希望张老师有空的时候可以解答一下,或者指出参考的书籍或者链接。
1,书上的原话:“linux内核以前采用pci bios提供的服务,但是现在可以不再涉及BIOS”,这句话是不是可以这么理解:BIOS 已经提供了对PCI部分的支持,即对PCI总线和设备进行了枚举和配置,linux 作为后来的一个操作系统,为了全面管理所有的设备,包括PCI设备,不得不重新建立一套机制,也就是再次进行PCI总线和设备的枚举和配置,这里枚举是真,配置是假,应该是记录被BIOS配置好的信息吧?(当然在这一次的枚举和记录过程中,可以调用BIOS提供的服务,也可以自己去读设备的配置空间,来获取信息)
2,假定计算机上的设备占用的资源(IO,内存),都是由BIOS分配的。显然计算机上有有很多legacy device,非PCI设备,PCI设备的资源可以根据不冲突的原则来动态分配,那么那些legacy 设备占用的资源呢?是在设备出厂的时候就固定了吗?
3,PCI设备占用的资源(IO,内存),由BIOS动态分配。主要是PCI设备的配置空间里有IO基址寄存器和存贮基址寄存器,这些基址寄存器其实也是可编码的译码器,
只要你在这些基地址寄存器里写了一个物理地址(前提是不冲突),就相当于配置好了这个设备的物理地址,当CPU发过来的物理地址和这个地址符合的时候,就由这个译码器负责译码,之后把控制信号传递到设备内部,设备内部对这个操作作出反应。
写的比较多,也比较乱,主要原因是对硬件不是很了解,所以还请张老师解答下。
|