I/O内存

荒凉一梦 提交于 2019-11-26 12:43:34

IO内存:当外部寄存器或内存映射到内存空间时,即使用访问内存的方式对外部寄存器或者内存进行读写操作。

比如配置外设控制器的寄存器,该寄存器是挂载在地址总线上的。

I/O内存分配和映射

——以上内容来自《LDD3》

相关的accessor函数

 IO内存读函数:

    unsigned int ioread8(void *addr);

    unsigned int ioread16(void *addr);

    unsigned int ioread32(void *addr);

    IO内存写函数:

    unsigned int iowrite8(u8 value, void *addr);

    unsigned int iowrite16(u8 value, void *addr);

    unsigned int iowrite32(u8 value, void *addr);

    以下这些函数读和写一系列值到给定的I/O内存区域,从给定的buf读或写count个值到addr,参数count表示要读写的数据个数,而不是字节数

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

    需要操作一块IO地址时,使用下列函数(这些函数的行为类似于它们的C库类似函数)

    void memcpy_io(void *addr, u8 value, unsigned int count);

    void memcpy_fromio(void *dest, void *source, unsigned int count);

    void memcpy_fromio(void *dest, void *source, unsigned int count);

注意事项

  由于边际效应的缘故,不管是否需要 ioremap,都不鼓励直接使用I/O内存指针,而应使用专门的I/O内存操作函数。这些I/O内存操作函数不仅在所有平台上是安全,而且对直接使用指针操作 I/O 内存的情况进行了优化。 --->《LDD》Chapter 9, Page 249

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!