首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

如果知道 IO的基地址 应怎么进行都取数据,直接读的话如何只能读出0,而正常情况上是读出非0

2012-09-14 
如果知道 IO的基地址 应如何进行都取数据,直接读的话怎么只能读出0,而正常情况下是读出非0请问:当我知道了

如果知道 IO的基地址 应如何进行都取数据,直接读的话怎么只能读出0,而正常情况下是读出非0
请问:当我知道了串口1的基地址,写了一个简单的小驱动我直接用(unsigned char *)去赋值然后读取为什么只能读出0?
  而正常情况下它的值是动态改变的(非0)? 难道单独拿出来用不行么?如果我要这么用的话,我该在使用前做什么操作?
  要初始化什么东西么?

C/C++ code
unsigned long * __iomem membase = (unsigned long*)0xf1012100;int __init text_init(void){        int err = 0;while(1){        printk("value = %ld\n",*membase);}        return err;}

这样直接读的话只能都出0来,请问高手在这之前我该如何操作才能得到跟使用 linux 串口驱动那样读出串口的值

[解决办法]
是我说的不清楚
内核只会读写虚拟地址,所以你用实时内核调试工具看到的都是虚拟地址
你不会发现内核使用0xf1012100,你就跟着用0xf1012100吧,这是不对的
一个物理地址,可以被映射成多个虚拟地址,而且这个映射关系还不固定

串口寄存器的物理地址是要看手册得到的

热点排行