首页 / LINUX / linux 存取 I/O 内存
linux 存取 I/O 内存
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux 存取 I/O 内存,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2287字,纯文字阅读大概需要4分钟。
内容图文
![linux 存取 I/O 内存](/upload/InfoBanner/zyjiaocheng/964/d5fd2886c0f3470e9d5eaa30d10f55a6.jpg)
在一些平台上, 你可能逃过作为一个指针使用 ioremap 的返回值的惩罚. 这样的使用不 是可移植的, 并且, 更加地, 内核开发者已经努力来消除任何这样的使用. 使用 I/O 内 存的正确方式是通过一系列为此而提供的函数(通过 <asm/io.h> 定义的).
从 I/O 内存读, 使用下列之一:
unsigned int ioread8(void *addr); unsigned int ioread16(void *addr); unsigned int ioread32(void *addr);
这里, addr 应当是从 ioremap 获得的地址(也许与一个整型偏移); 返回值是从给定 I/O 内存读取的.
有类似的一系列函数来写 I/O 内存: void iowrite8(u8 value, void *addr);
void iowrite16(u16 value, void *addr);
void iowrite32(u32 value, void *addr);
如果你必须读和写一系列值到一个给定的 I/O 内存地址, 你可以使用这些函数的重复版 本:
void ioread8_rep(void *addr, void *buf, unsigned long count); void ioread16_rep(void *addr, void *buf, unsigned long count);
void ioread32_rep(void *addr, void *buf, unsigned long count);
void iowrite8_rep(void *addr, const void *buf, unsigned long count); void iowrite16_rep(void *addr, const void *buf, unsigned long count); void iowrite32_rep(void *addr, const void *buf, unsigned long count);
这些函数读或写 count 值从给定的 buf 到 给定的 addr. 注意 count 表达为在被写入 的数据大小; ioread32_rep 读取 count 32-位值从 buf 开始.
上面描述的函数进行所有的 I/O 到给定的 addr. 如果, 相反, 你需要操作一块 I/O 地 址, 你可使用下列之一:
void memset_io(void *addr, u8 value, unsigned int count);
void memcpy_fromio(void *dest, void *source, unsigned int count); void memcpy_toio(void *dest, void *source, unsigned int count);
这些函数行为如同它们的 C 库类似物.
如果你通览内核源码, 你可看到许多调用旧的一套函数, 当使用 I/O 内存时. 这些函数 仍然可以工作, 但是它们在新代码中的使用不鼓励. 除了别的外, 它们较少安全因为它们 不进行同样的类型检查. 但是, 我们在这里描述它们:
unsigned readb(address); unsigned readw(address); unsigned readl(address);
这些宏定义用来从 I/O 内存获取 8-位, 16-位, 和 32-位 数据值. void writeb(unsigned value, address);
void writew(unsigned value, address); void writel(unsigned value, address);
如同前面的函数, 这些函数(宏)用来写 8-位, 16-位, 和 32-位数据项.
一些 64-位平台也提供 readq 和 writeq, 为 PCI 总线上的 4-字(8-字节)内存操作. 这 个 4-字 的命名是一个从所有的真实处理器有 16-位 字的时候的历史遗留. 实际上, 用 作 32-位 值的 L 命名也已变得不正确, 但是命名任何东西可能使事情更混淆.
内容总结
以上是互联网集市为您收集整理的linux 存取 I/O 内存全部内容,希望文章能够帮你解决linux 存取 I/O 内存所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。