Linux内核外设IO寄存器与IO mem读写函数总结

来源:互联网 发布:全民枪战刷炎龙软件 编辑:程序博客网 时间:2024/06/06 05:34

                                                                                                                         学习时间:2014/5/21

 

       外设IO寄存器地址独立编址的CPU,这时外设IO寄存器应该称为IO端口,访问IO寄存器可以ioport_map()将其映射到虚拟地址空间,但是实际上这只是给开发人员造成一个“假象”,并没有映射到内核虚拟地址,仅仅是为了使用和IO内存一样的接口访问IO寄存器;当然,也可以直接使用in/out指令访问IO寄存器。如:X86架构处理器。这一类的访问有两种方式;

(1)针对没有使用ioport_map()处理的IO端口的访问:

       直接使用汇编指令in、out、ins、outs 访问或者内核封装的辅助函数inb、inw、inl、outb、outw、outl(以及它们对应的变种函数指令inb_p、insb等)(b、w、l分别代表一个字节(8位),一个字(16位),一个长整型(32位))来访问。

(2)针对使用ioport_map()处理的IO端口的访问:

      unsigned int ioread8(void *addr);

      unsigned int ioread16(void *addr);

      unsigned int ioread32(void *addr);

     写函数类似iowrite*()。

 

       外设IO寄存器与内存统一编址的CPU,这时外设IO寄存器应该称为IO内存,访问IO寄存器可以通过ioremap()将其映射到虚拟地址空间,然后使用read/write接口访问。如:MIPS架构处理器。

        注意:上面说的都是基于不同架构的外设IO寄存器,其实外设IO除了寄存器还有IOmem。不管是基于X86架构还是基于MIPS架构的处理器,IO mem的访问都是通过内存映射的方式访问的。

0 0
原创粉丝点击