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

本文探讨了寄存器与内存的区别,特别是寄存器操作的副作用及其在中断状态寄存器中的应用。同时,文章对比了X86与ARM架构下内存与I/O空间的不同,并详细介绍了操作IO端口及IO内存的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值