免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1397 | 回复: 0
打印 上一主题 下一主题

IO端口 IO内存 IO映射方式 内存映射方式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-03 11:24 |只看该作者 |倒序浏览

               
file:///C:/DOCUME%7E1/eelb/LOCALS%7E1/Temp/moz-screenshot.png
IO端口和IO内存以及内存之间的关系:主存16M字节的SDRAM,外设是个视频采集卡,上面有16M字节的SDRAM作为缓冲区。如下图:
[/url]

还有两个概念我决很容易混起来:
CPU对外设端口物理地址的编址方式有两种:
一种是IO映射方式,另一种是内存映射方式。
IO映射方式:CPU是i386架构的情况在i386系列的处理中,内存和外部IO是独立编址,也是独立寻址的。MEM的内存空间是32位可以寻址到4G,IO空间是16位可以寻址到64K。
内存映射方式:arm,powerpc在这一类的嵌入式处理器中,IO Port的寻址方式是采用内存映射,也就是IO bus就是Mem bus。系统的寻址能力如果是32位,IO Port+Mem(包括IO Mem)可以达到4G。
Linux将基于IO映射方式的和内存映射方式的IO端口统称为IO区域(IO region)。
所以至此我觉得我们应该分清楚,io端口,io内存,io映射方式,内存映射方式。
参考下面文章:
http://blog.chinaunix.net/u3/94284/showart_2030412.html
http://blog.chinaunix.net/u3/94284/showart_2030419.html
linux管理io口是通过下面一组函数来的:
1) request_region()
  把一个给定区间的IO端口分配给一个IO设备。
  2) check_region()
 检查一个给定区间的IO端口是否空闲,或者其中一些是否已经分配给某个IO设备
  3) release_region()
  释放以前分配给一个IO设备的给定区间的IO端口。
  Linux中可以通过以下辅助函数来访问IO端口:
  inb(),inw(),inl(),outb(),outw(),outl()
  “b”“w”“l”分别代表8位,16位,32位。
linux管理io内存是通过下面一组函数来的
1) request_mem_region()
  请求分配指定的IO内存资源。
  2) check_mem_region()
  检查指定的IO内存资源是否已被占用。
  3) release_mem_region()
  释放指定的IO内存资源。
  其中传给函数的start address参数是内存区的物理地址(以上函数参数表已省略)。
  驱动开发人员可以将内存映射方式的IO端口和外设内存统一看作是IO内存资源。
  ioremap()用来将IO资源的物理地址映射到内核虚地址空间(3GB - 4GB)中,参数addr是指向内核虚地址的指针。
  Linux中可以通过以下辅助函数来访问IO内存资源:
  readb(),readw(),readl(),writeb(),writew(),writel()。
 Linux在kernel/resource.c文件中定义了全局变量ioport_resource和iomem_resource,来分别描述基于IO映射方式的整个IO端口空间和基于内存映射方式的IO内存资源空间(包括IO端口和外设内存)。
访问io映射方式的io函数组如下:
unsigned inb(unsigned port);
void outb(unsigned char byte, unsigned port);
unsigned inw(unsigned port);
void outw(unsigned short word, unsigned port);
unsigned inl(unsigned port);
void outl(unsigned longword, unsigned port);
访问内存映射方式的io函数组如下:
和访问io内存是一样的
最后可以通过ioport_map吧io映射方式变成内存映射方式,可以和内存映射一样使用,这些只是给软件设计带来方便,底层还是io映射方式。
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:[url]http://blog.chinaunix.net/u2/66435/showart_2137990.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP