BBS水木清华站∶精华区

发信人: ogb (ogb), 信区: Linux        
标  题: Linux下如何直接读写内存物理地址?                 
发信站: BBS 水木清华站 (Mon Oct 16 13:51:03 2000) 
 
 
做了一块ISA的插卡,映射到系统的D000段, 
如果在Linux中要编程对这块内存进行访问,应该怎么写啊? 
 
另外,在Linux下如何直接读写端口啊? 
 
 
 
-- 
 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.64.178] 
发信人: hellguard (小四), 信区: Linux        
标  题: Re: Linux下如何直接读写内存物理地址?              
发信站: BBS 水木清华站 (Mon Oct 16 15:14:58 2000) 
 
    kmfd = open( "/dev/kmem", O_RDONLY ); 
    if ( kmfd < 0 ) 
    { 
        perror( "open" ); 
        exit( -1 ); 
    } 
    lseek( kmfd, offset, SEEK_SET ); 
    read( kmfd, byteArray, byteArrayLen ); 
    outputBinary( byteArray, byteArrayLen ); 
    free( byteArray ); 
【 在 ogb (ogb) 的大作中提到: 】 
 做了一块ISA的插卡,映射到系统的D000段, 
 如果在Linux中要编程对这块内存进行访问,应该怎么写啊? 
 另外,在Linux下如何直接读写端口啊? 
 
 
-- 
 
            也许有一天,他再从海上蓬蓬的雨点中升起, 
            飞向西来,再形成一道江流,再冲倒两旁的石壁, 
            再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... 
 
 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.73.87.125] 
发信人: ogb (ogb), 信区: Linux        
标  题: Re: Linux下如何直接读写内存物理地址?              
发信站: BBS 水木清华站 (Mon Oct 16 20:13:44 2000) 
 
多谢指点!但是还有一些不明的地方: 
 
1.程序中打开的kmem是指的一个设备文件吗? 
2.是否O_RDONLY说明只能对该内存区进行读,但是不能写? 
3.offset就是我那块卡上的内存所映射的地址把?比如,我的卡 
  DOS下寻址是D000:1234的话,在这里是不是就应该是0xd1234 
  呢? 
  另外,卡上的地址译码只使用了20位地址线,会不会存在跟系统 
  内存冲突的可能? 
4.程序中的outputBinary是什么作用? 
 
小弟首次接触Linux下的程序设计,望大虾不吝赐教! 
 
 
 
【 在 hellguard (小四) 的大作中提到: 】 
     kmfd = open( "/dev/kmem", O_RDONLY ); 
     if ( kmfd < 0 ) 
     { 
         perror( "open" ); 
         exit( -1 ); 
     } 
     lseek( kmfd, offset, SEEK_SET ); 
     read( kmfd, byteArray, byteArrayLen ); 
     outputBinary( byteArray, byteArrayLen ); 
     free( byteArray ); 
 
 
-- 
 
※ 修改:·ogb 於 Oct 16 20:14:26 修改本文·[FROM:  166.111.64.178] 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.64.178] 
发信人: hellguard (小四), 信区: Linux        
标  题: Re: Linux下如何直接读写内存物理地址?              
发信站: BBS 水木清华站 (Tue Oct 17 09:48:13 2000) 
 
1. /dev/kmem是操作系统提供的伪文件系统支持,你就当它是 
   普通文件名即可,其offset对应Virtual Address 
2. 可以读写打开,调试驱动的时候我经常从应用层写/dev/kmem临时 
   调整数据,没有softice可用,这些办法将就用。 
3. 你还是抓个师兄给你讲讲Device Driver的设计吧,我开始以为你 
   要在应用层上临时干扰一下什么。 
4. outputBinary是无用的,一个自己写的kmem dump函数。 
【 在 ogb (ogb) 的大作中提到: 】 
 多谢指点!但是还有一些不明的地方: 
 1.程序中打开的kmem是指的一个设备文件吗? 
 2.是否O_RDONLY说明只能对该内存区进行读,但是不能写? 
 3.offset就是我那块卡上的内存所映射的地址把?比如,我的卡 
   DOS下寻址是D000:1234的话,在这里是不是就应该是0xd1234 
   呢? 
   另外,卡上的地址译码只使用了20位地址线,会不会存在跟系统 
   内存冲突的可能? 
 4.程序中的outputBinary是什么作用? 
 小弟首次接触Linux下的程序设计,望大虾不吝赐教! 
 
 
-- 
 
            也许有一天,他再从海上蓬蓬的雨点中升起, 
            飞向西来,再形成一道江流,再冲倒两旁的石壁, 
            再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... 
 
 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.73.87.125] 
发信人: holly (有些已经离去, 有些永远不会来), 信区: Linux        
标  题: Re: Linux下如何直接读写内存物理地址?              
发信站: BBS 水木清华站 (Tue Oct 17 10:07:22 2000) 
 
【 在 ogb (ogb) 的大作中提到: 】 
 做了一块ISA的插卡,映射到系统的D000段, 
 如果在Linux中要编程对这块内存进行访问,应该怎么写啊? 
 
phys_to_virt 
 
 另外,在Linux下如何直接读写端口啊? 
 
inX/outX, X == b, w, etc 
 
-- 
那悲歌总会在梦中清醒, 诉说一点哀伤过的往事 
那看似漫不在乎转过身的, 是风干泪眼后萧瑟的影子 
 
九月的事早已埋藏在风雪之中 
为何我听到你胸口的热血汹涌 
 
 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.120.13.24] 

BBS水木清华站∶精华区