蜗牛哒哒

LINUX教程-LINUX编程-I/O操作

作者: 蜗牛哒哒 发布时间: 2020-12-21 148 人阅读

操作I/O内存
对I/O内存的操作需按如下步骤完成:
申请
映射
访问
释放
申请I/O内存
内核提供了一套函数来允许驱动申请它需要的I/O内存,其中核心的函数是:
struct resource *request_mem_region(unsigned long start, unsigned long len, char *name)

这个函数申请一个从start 开始,长度为len 字节的内存区。如果成功,返回非NULL;否则返回NULL,所有已经在使用的I/O内存在/proc/iomem 中列出。
映射I/O内存
在访问I/O内存之前, 必须进行物理地址到虚拟地址的映射,Linux内核中的地址映射可分为:

1、静态映射
--由内核在系统启动时完成映射工作

2、动态映射
--由ioremap 函数完成映射工作

void *ioremap(unsigned long phys_addr, unsigned long size)

访问I/O内存
访问 I/O 内存的正确方法是通过一系列内核提供的函数:
从 I/O 内存读, 使用下列之一:
unsigned readb(address)
unsigned readw(address)
unsigned readl(address)

写I/O 内存, 使用下列之一:
unsigned writeb(unsigned value, address)
unsigned writew(unsigned value, address)
unsigned writel(unsigned value, address)
释放I/O内存
I/O内存不再需要使用时应当释放,步骤如下:

void iounmap(void * addr)
void release_mem_region(unsigned long start, unsigned long len)

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.本站所有资源不保证完整性,仅供参考学习!
3. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
4. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
5. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
6. 如有链接无法下载、失效或广告,请联系管理员处理!
7. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
8. 如遇到加密压缩包,默认解压密码为"woniudada",如遇到无法解压的请联系管理员处理!
蜗牛哒哒 » LINUX教程-LINUX编程-I/O操作