zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1448回复:6

关于资源的问题!

楼主#
更多 发布于:2003-01-22 20:51
在IO_STACK_LOCATION.Parameters.StartDevice中有两个参数,AllocatedResources包含原始的资源分配信息;
另外一个AllocatedResourcesTranslated包含转换后的资源分配信息;
我想知道这个两个是什么区别,有了转换后的资源分配信息,在进行系统地址映射的时候我还要不要用MmMapIoSpace函数进行映射,得到系统内存地址,还是直接利用转换后的资源。如果要用MmMapIoSpace的话,那么上面为什么还要搞两个资源信息?

还有一个问题是,我们在“设备管理中”看到的设备的\"资源\"一项应该就是分配给该设备的系统地址吧!这样理解对不对?
大家好!
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-22 21:33
如果是memory,那么内存映射是必需的,
如果是io,在x86平台不用映射,否则也需要

设备管理中看到的是映射过的
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-22 21:37
谢谢斑竹了,
我还想知道的是AllocatedResources和AllocatedResourcesTranslated到底有什么区别,他们具体代表什么含义啊?
大家好!
wfeiisch
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-23 09:15
关注!
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-23 13:38
参阅walter oney的programming the Windows Driver Model

I/O堆栈单元的Parameters联合有一个名为StartDevice的子结构,该结构包含的配置信息,见表6-2,将被传递到StartDevice辅助函数。

表6-2. IO_STACK_LOCATION.Parameters.StartDevice子结构中的域

域名  描述  
AllocatedResources 包含原始的资源分配信息
AllocatedResourcesTranslated 包含转换后的资源分配信息

AllocatedResources和AllocatedResourcesTranslated都是同一种类数据结构的实例,这种数据结构就是CM_RESOURCE_LIST。如果你看到该结构在WDM.H中的声明,你可能认为它是一个十分复杂的数据结构。然而,当用于启动设备的IRP时,仅有一个表项是有用的,即CM_PARTIAL_RESOURCE_LIST,它描述了设备被赋予的所有I/O资源。

可以使用下面语句访问这两个列表:

PCM_PARTIAL_RESOURCE_LIST raw, translated;
raw = &stack->Parameters.StartDevice.AllocatedResources->List[0].PartialResourceList;
translated = &stack->Parameters.StartDevice.AllocatedResourcesTranslated->List[0].PartialResourceList;
 

raw和translated资源列表是StartDevice辅助函数的实际参数:

status = StartDevice(fdo, raw, translated);
 

因为I/O总线与CPU在寻址物理硬件的方式上不同,所以存在着两种资源列表。raw资源包含总线相关的数值,而translated资源包含系统相关的数值。在WDM出现之前,内核模式驱动程序从注册表、PCI配置空间、或其它地方获取raw资源值,并通过调用诸如HalTranslateBusAddress或HalGetInterruptVector函数转换这些数值。参见Art Baker的《The Windows NT Device Driver Book: A Guide for Programmers (Prentice Hall, 1997)》第122-162页。现在,接收和转换工作全部由PnP管理器来完成,WDM驱动程序需要做的仅是访问设备启动IRP的Parameters结构。

<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-23 14:20
版主,我就是看了这个后不太明白的。
translated资源已经包含系统了相关的数值,为什么还要对它进行映射啊?
大家好!
mengzi
驱动牛犊
驱动牛犊
  • 注册日期2001-08-02
  • 最后登录2004-05-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-08 18:34
这种转换是对于不同的CPU而言,i386、Alpha、PowerPC的地址映射方式是不同的。对于i386,IO空间和存储空间是分开编址的,对于Alpha,IO空间和存储空间是统一编址的,没有专门的IO寻址空间及其命令,为了保证设备与机器无关,根据PCI规范,PCI的空间是任意IO或Mem的,如果分配了IO空间就需要转换;另外Alpha的寻址方式是邮政编码式的从CPU出来的地址不是直接的物理地址,也就是说设备的逻辑地址(BIOS回写给设备配置空间的空间首地址及其范围)与CPU的寻址地址是不同的,所以要进行转换。对于i386,转换前后是一致的。所以转换是为了保证驱动的跨机器平台性。
游客

返回顶部