Linux内核开发之IO端口和IO内存

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);


猜你喜欢

转载自blog.csdn.net/xiezhi123456/article/details/81040608