1、寄存器与内存
寄存器和 RAM 的主要不同在于寄存器操作有副作用( 边际效果),读取某个地址时可能导致该地址内容发生变化,比如很多设备的中断状态寄存器只要一读取,便自动清零。
2、内存与IO
X86支持内存空间、IO空间,ARM只支持内存空间。
IO端口:当一个寄存器或内存位于IO空间时,称其为IO端口。
IO内存: 当一个寄存器或内存位于内存空间时,称其为IO内存。
3、操作IO端口
对I/O端口的操作需按如下步骤完成:
1)申请
struct resource *request_region(unsigned long first, unsignedlong n, const char *name);
2)访问
3)释放
void release_region(unsigned long start, unsigned long n);
4、操作IO内存
对I/O内存的操作需按如下步骤完成:
1) 申请
struct resource *request_mem_region(unsigned long start, unsigned long len, char *name)
2) 映射
在访问I/O内存之前, 必须进行物理地址到虚拟地址的映射,ioremap函数具有此功能:
void *ioremap(unsigned long phys_addr, unsigned long size)
3) 访问
4)释放
void iounmap(void * addr);
void release_mem_region(unsigned long start,unsigned long len);