Badwood
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2307回复:19

怎样写内存?

楼主#
更多 发布于:2002-07-10 15:06
有人愿意告诉我怎么在驱动程序中写D0000段的内存空间么?
我用在98下的指针方式去写,结果系统垮了。
Badwood
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-10 15:41
如此简单的问题竟然没人回答?因为没有分么?困惑。
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-10 15:47
可以随便改吗?
内存好象是分段的,有的是系统控制的,有的是用户使用的。
一般用户使用要申请的,如果就直接改,系统当然要崩溃。
解决问题的方法好象有问题。

不知道对不对。
只要能解决问题,就一定给分。 希望高手赐教!
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-10 15:48
D0000段是什么意思?
98也是Flat模式,所有的段都是0~4G,我不懂D0000段是什么意思
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
Badwood
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-10 15:51
啊?自己做了一个ISA卡,占用系统0xD0000段内存(这是很早就有的概念啊),跟计算机软件通信。在98下面可以
char* p=0xd0000;
p[0] = 1;
来访问,但在2000下就不能了,只好写驱动,但驱动程序中这么访问到职喜同崩溃,怎么回事?
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-07-10 17:58
啊?自己做了一个ISA卡,占用系统0xD0000段内存(这是很早就有的概念啊),跟计算机软件通信。在98下面可以
char* p=0xd0000;
p[0] = 1;
来访问,但在2000下就不能了,只好写驱动,但驱动程序中这么访问到职喜同崩溃,怎么回事?

faint。还要多看书呀。
Badwood
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-10 19:18
[quote]啊?自己做了一个ISA卡,占用系统0xD0000段内存(这是很早就有的概念啊),跟计算机软件通信。在98下面可以
char* p=0xd0000;
p[0] = 1;
来访问,但在2000下就不能了,只好写驱动,但驱动程序中这么访问到职喜同崩溃,怎么回事?

faint。还要多看书呀。
 [/quote]
Badwood
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-10 19:20
[quote]啊?自己做了一个ISA卡,占用系统0xD0000段内存(这是很早就有的概念啊),跟计算机软件通信。在98下面可以
char* p=0xd0000;
p[0] = 1;
来访问,但在2000下就不能了,只好写驱动,但驱动程序中这么访问到职喜同崩溃,怎么回事?

faint。还要多看书呀。
 [/quote]

是啊,查了不少资料,但没有找到合适的。你有没有合适的代码呢?
usbboy
驱动牛犊
驱动牛犊
  • 注册日期2002-04-03
  • 最后登录2002-11-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-12 18:01
你说你在98下能访问D000呀,那就怪了呀,原则上是不可以的
alexe_chen
驱动小牛
驱动小牛
  • 注册日期2002-03-21
  • 最后登录2006-07-31
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-13 17:53
98下面,对于isa板卡,好像是可直接访问其板上内存的!记得有文章提到过,98中isa卡的内存好像是映射到d0000的,通过设置段选因子,可以直接访问,但是在2000和nt下,是不可以直接访问的,你只需要做个简单的kmd驱动程序就可以了,不对的请各位大佬指教
好好学习,天天向上...
keikey43
驱动牛犊
驱动牛犊
  • 注册日期2002-03-27
  • 最后登录2006-10-12
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-14 12:12
 
98下面,对于isa板卡,好像是可直接访问其板上内存的!记得有文章提到过,98中isa卡的内存好像是映射到d0000的,通过设置段选因子,可以直接访问,但是在2000和nt下,是不可以直接访问的,你只需要做个简单的kmd驱动程序就可以了,不对的请各位大佬指教


   谁能告诉我ISA、pci卡的内存或端口都映射到哪些内存中了?这固定吗?
溪流飘零
Badwood
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-07-14 20:53
98下直接写就行了char* p=0xd0000; *p = 1;
但是NT/2000下必须用驱动,当然绕开系统进入ring0也许可以,但不是很规范。
所以希望能开发NT/2000下的驱动,但是在2000/NT下的驱动程序里面访问d0000地址还必须先映射到逻辑地址上来。本人不知道怎么映射,希望
知道的朋友能给个提示。
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-07-14 23:17
针对这样的问题强烈推荐driver studio或windriver非常容易
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2002-07-15 09:58
MmMapIoSpace
Badwood
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-07-15 15:27
MmMapIoSpace
 

如何调用呢?
PHYSICAL_ADDRESS PhyAdd;
PhyAdd.LowPart = 0xd0000;
PhyAdd.HighPart = 0;
NTSTATUS ret;
char* pAdd = (char*)MmMapIoSpace(PhyAdd,2048,MmNonCached );
DebugPrint(\"MmMapIoSpace return: %x\",pAdd);
if(pAdd != NULL)
{
pAdd[0xd03f6] = 1;
pAdd[0xd03f7] = 1;
pAdd[0xd03f8] = 3;
DebugPrint(\"Sucess in write\");
}
else
DebugPrint(\"Fail in write\");

会Down机。
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-07-15 15:45
啊?自己做了一个ISA卡,占用系统0xD0000段内存(这是很早就有的概念啊),跟计算机软件通信。在98下面可以
char* p=0xd0000;
p[0] = 1;
来访问,但在2000下就不能了,只好写驱动,但驱动程序中这么访问到职喜同崩溃,怎么回事?

居然可以这样访问硬件。假如与更换插槽会有变化吗?假如双卡呢(可能可以通过对ISA硬件跳线来解决)?
NT下这么使用不崩溃才怪。
估计你的ISA设备是不支持PnP了吧。那就自己查找资源,建立Driver吧
dazzy
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-08-12
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-07-15 18:02
简单代码如下:
如下:

ULONG SpaceType = 0; //Memory space
INTERFACE_TYPE  InterfaceType = Isa;//isa bus
ULONG BusNumber = 0;
PHYSICAL_ADDRESS PhyAdd;
PhyAdd.Lowpart = 0xd0000;
PhyAdd.Hipart = 0;
PHYSICAL_ADDRESS TranslatedAddr;
ULONG NumberOfBytes = 2048; //length
PVOID MappedAddr;

if(HalTranslateBusAddress(InterfaceType , BusNumber, PhyAdd, &SpaceType, &TranslatedAddr))
{
if(SpaceType == 0)
{//mem space
    MappedAddr = MmMapIoSpace(TranslatedAddr, NumberOfBytes, FALSE);
   if(MappedAddr != NULL)
{
   //I/O your memory like this
  readvalue = READ_REGISTER_UCHAR((PUCHAR)MappedAddr + 0x3f6);           //Read
   WRITE_REGISTER_UCHAR(((PUCHAR)MappedAddr + 0x3f6), writtenvalue);          //Write
}
}else
{
  //Io Space
}
}

这个问题ddk的例子讲得太多了,你为什么不查看一下!!!


Badwood
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-07-16 11:37
to dazzy:
我要能查到还到这里来?

你贴的代码我基本上靠自己写出来了,但HalTranslateBusAddress没有办法编译通过。总是说没有定义(包含了ntddk.h也没有办法通过)

实际上,不用HalTranslateBusAddress程序也能跑。我不需要向系统申请资源,我们的卡也不需要同时跑两块,不过卡上作了跳线,需要的时候可以用(因为做卡的同志根本没打算做pnp卡),更换插槽也没问题。卡就像一块并联在先上的电话一样。

开始我贴的代码里面有个小bug才会引起崩溃,修改一下就可以了。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
18楼#
发布于:2002-07-16 14:59
可以好好的用?
稀奇。 :D
Badwood
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-07-16 17:10
不用希奇,我要搞的东西本来就简单,一个小小的技术问题而已,只是自己水平不够才弄了这么久。
但确实是管用。不死机,也不会有内存泄漏(根本就没什么内存申请的地方)。
游客

返回顶部