阅读:1203回复:5
关于Chris Cant书中的问题。(分数大大的有)
如果大家看过Chris Cant的书,肯定还对里面Wdm2中带的RetrieveResources函数有印象吧。我有两个疑问。
1。Chris对里面I/O端口资源的解释有这么一段话:149页 “对于内存映射的I/O端口(设置CM_RESOURCE_PORT_MEMORY标志位),必须调用MmMapIoSpace来得到一个可以由驱动程序使用的指针......” 我就很奇怪了,我看PCI9054的文档和PCI规范,都提到我们可以在PCI设备启动的时候向系统申请一定的地址资源,可以在I/O地址空间里面,也可以在内存地址空间里面。如果启动成功。则我们申请的空间都得到满足了。我的疑问是:什么叫做内存映射的I/O端口?如果我们需要把一段地址映射到内存地址空间,我们完全可以在PCI卡启动过程中将其申请到内存地址空间里面去,为什么要将已经映射到I/O地址空间的地址在驱动程序里面映射到内存地址空间里面呢?9054有一段配置寄存器,我们在启动的时候已经将其映射到了I/O地址空间和内存地址空间上了。这是不是意味着我们完全可以在两个地址空间上都访问到这些配置寄存器?书上所说的“内存映射的I/O端口”到底是什么意思?我实在不明白。 2。在这个函数中有这么一段代码 148页 case CmResourceTypeMemory: if(dx->GotPortOrMemory){GotError=true;break;} ...... 我想这段代码是不是就是说,对一个pnp驱动程序I/O地址空间上的资源和内存地址空间上的资源不能同时拥有,而且内存地址空间上不能同时分配2段地址,I/O地址空间上也不能同时分配2段地址。为什么???难道pnp就是这么规定的?? 请高手一定要指点一下,我实在是不理解。多谢!!! [编辑 - 4/26/02 作者: JackyWu] [编辑 - 4/26/02 作者: JackyWu] [编辑 - 4/26/02 作者: JackyWu] |
|
最新喜欢:Xman
|
沙发#
发布于:2002-04-26 19:26
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2002-04-26 20:47
多谢Cat老大给面子。继续向您提问:
您所说的PCI提供的物理内存是不是就是就是指主板上的系统内存?如果是的话,那么系统内存都是挂在PCI总线上的喽? 如果对于PCI板子来说,我觉得不管我们在Local Bus上挂其他器件或是其他的物理内存,对于PCI来说都是I/O端口了。您说是不是? 我们完全可以将9054的Local Bus上的物理内存映射为I/O地址空间和内存地址空间。您说对否? |
|
|
地板#
发布于:2002-04-27 14:39
用户被禁言,该主题自动屏蔽! |
|
地下室#
发布于:2002-04-30 16:55
Chris Cant的书好像我有但肯定一直在我的橱里睡觉:) 第一个问题好像看上去好像以前碰到过,简单说两句。
启动pci设备的时候,bios会分配相应的内存或IO资源并写到PCI的base mem register里。NT启动的时候,为了兼容有些老的ISA设备或是其他原因,会重新把base mem register里的地址映射到另外一块区域里,所以要用那个map什么的函数得到驱动程序能用的mem/io操作地址。 以前我没用这个map,结果测试的好好的,正是用的时候,装的第一台机器就动不了,后来重新map了之后就好了。 |
|
5楼#
发布于:2002-05-01 08:49
哈哈。。。原来是这么回事啊。多谢大家能够拔刀相助。可惜我现在还没有刀,等我有了,我也拔。赫赫。。。
|
|
|