红联Linux门户
Linux帮助

Linux下的IO端口和IO内存

发布时间:2008-09-20 16:07:34来源:红联作者:mxjqcg
CPU对外设端口物理地址的编址方式有两种:一种是IO映射方式,另一种是内存映射方式。Linux将基于IO映射方式的和内存映射方式的IO端口统称为IO区域(IO region)。

IO region仍然是一种IO资源,因此它仍然可以用resource结构类型来描述。

Linux管理IO region:

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位。

对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端口和外设内存)。
文章评论

共有 5 条评论

  1. cwqing1973 于 2008-11-11 13:39:13发表:

    虽然是入级的一些C语言的函数,但是会友能做到学而有思,进行总结,证明是用心在学习。鼓励一下。谢谢。

  2. xingxiboy 于 2008-11-10 18:22:28发表:

    linux群号--------58702086

  3. xingxiboy 于 2008-11-10 18:11:50发表:

    (e:e2s (e:e2s (e:e2s

  4. xingxiboy 于 2008-11-10 18:11:33发表:

    (q):s (q):s (q):s 5:ty( (o):tx :0wmjh(1

  5. xingxiboy 于 2008-11-10 18:11:18发表:

    :0)1 :0)1 :0)1 :0)1