当前位置:  技术问答>linux和unix

关于mmap系统调用来访问寄存器的问题

    来源: 互联网  发布时间:2016-11-13

    本文导语:  本帖最后由 isolated_bb 于 2011-03-06 21:18:13 编辑 本人想用mmap系统调用来访问硬件的寄存器 用户空间:unsigned char *mmap_addr; fd = open("/dev/zx_led",O_RDWR); mmap_addr = (unsigned char*)mmap(NULL,12,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); 将文件...

本帖最后由 isolated_bb 于 2011-03-06 21:18:13 编辑
本人想用mmap系统调用来访问硬件的寄存器
用户空间:unsigned char *mmap_addr;
fd = open("/dev/zx_led",O_RDWR);
mmap_addr = (unsigned char*)mmap(NULL,12,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
将文件与虚拟内存空间进行一次映射,返回被映射的虚拟空间的地址?? 我这里暂时称它为 虚拟空间地址1

内核空间(驱动):
#define LED_CONTROLLER_BASE 0x56000050
#define LED_MEM_LEN 0x0c
#define LED_CON (*(volatile u32*)(LED_CONTROLLER_BASE))
#define LED_DAT (*(volatile u32*)(LED_CONTROLLER_BASE + 4))
#define LED_UP  (*(volatile u32*)(LED_CONTROLLER_BASE + 8))
static int led_mmap(struct file *file,struct vm_area_struct *vma)
{
remap_pfn_range(vma,NULL,LED_CONTROLLER_BASE,LED_MEM_LEN,VM_IO);
return 0;
}
驱动讲物理地址与虚拟地址想关联(或者说讲物理地址映射到虚拟地址空间)??我这里称它为 虚拟空间地址2

我的目的是通过对设备文件的读写来设置硬件的各种寄存器的值,那么我这样能否保证 虚拟地址空间1==虚拟地址空间2???
或者说我如何才能通过设备文件来准确的访问寄存器??
最后 我可不可以认为mmap实现了 应用层与内核层的内存的共享

|
X86体系结构不能直接将I/O空间映射到虚拟地址,
只有统一编址的处理器体系结构才支持。
只有MEM空间才能映射到虚地址。

应用程序访问I/O空间可以通过直接I/O方式,很多驱动书都有介绍,或者编写ioctl方式自己实现。

|
mmap是把打开的文件或者对象映射到内存,是经过页式管理的,内核空间的虚拟地址很多都跟用户空间的虚拟地址不一样,所以有时候拷贝时都要用copy_to_usr 或者copy_from_usr

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我调用mmap函数有问题,想用erron这个全局变量,可怎么用不起啊。帮我看看吧。拜托给位了。
  • 关于mmap的问题
  • 问个mmap和其锁的问题
  • mmap文件映射的问题
  • mmap机制的问题
  • 客户端 mmap 写文件,麻烦给点代码参考下,谢谢
  • Linux下mmap函数的问题
  • mmap和malloc的区别是什么?
  • mmap使用中的困惑,,,在线等待,,请帮忙,谢谢!
  • 如何写mmap程序
  • mmap如何分段内存映射
  • mmap共享内存问题?
  • 嵌入式LINUX mmap 出错
  • 请问溢出mmap()分配的共享空间要怎么办??
  • mmap()在内存小时的性能
  • 关于2.4.2的mmap()
  • 请问LDD3中的 simple_nopage_mmap 函数的一些问题
  • mmap问题!
  • 请问:FIFO文件能用mmap来使用吗?
  • 使用mmap可以读写文件,这是怎么实现的?
  • 请教用过mmap的大虾


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3