IO端口和IO内存的区别及分别使用的函数接口
注意,I/O端口在重新映射前必须使用request_region分配所需的I/O端口。
3、ARM体系的I/O操作接口
s3c24x0处理器使用的是I/O内存,也就是说:s3c24x0处理器使用统一编址方式,I/O寄存器和内存使用的是单一地址空间,并且读写I/O寄存器和读写内存的指令是相同的。所以推荐使用I/O内存的相关指令和函数。但这并不表示I/O端口的指令在s3c24x0中不可用。如果你注意过s3c24x0关于I/O方面的内核源码,你就会发现:其实I/O端口的指令只是一个外壳,内部还是使用和I/O内存一样的代码。
下面是ARM体系原始的I/O操作函数。其实后面I/O端口和I/O内存操作函数,只是对这些函数进行再封装。从这里也可以看出为什么我们不推荐直接使用I/O端口和I/O内存地址指针,而是要求使用专门的I/O操作函数——专门的I/O操作函数会检查地址指针是否有效是否为IO地址(通过__iomem或__chk_io_ptr)
#include /* |
关于__force和__iomem
#include /* __force表示所定义的变量类型是可以做强制类型转换的 */ |
I/O端口
#include #defineoutb(v,p)__raw_writeb(v,__io(p)) |
I/O内存
#include #defineioread8(p)({unsignedint__v=__raw_readb(p);__v;}) |
注意:
1)、所有的读写指令(I/O操作函数)所赋的地址必须都是虚拟地址,
IO端口IO内存函数接 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)