zoukankan      html  css  js  c++  java
  • ioremap映射函数

    一、ioremap() 函数

       Linux在io.h头文件中声明了函数ioremap(),用来将I/O内存资源的物理地址映射到核心虚地址空间(3GB-4GB)中(这里是内核空间),原型如下:

    1、ioremap函数

         ioremap宏定义在asm/io.h内:

      #define ioremap(cookie,size)           __ioremap(cookie,size,0)

      __ioremap函数原型为(arm/mm/ioremap.c):

      void __iomem * __ioremap(unsigned long phys_addr, size_t size, unsigned long flags);

    • 参数:
    • phys_addr:要映射的起始的IO地址
    • size:要映射的空间的大小
    • flags:要映射的IO空间和权限有关的标志

      该函数返回映射后的内核虚拟地址(3G-4G). 接着便可以通过读写该返回的内核虚拟地址去访问之这段I/O内存资源。

    2、iounmap函数

        iounmap函数用于取消ioremap()所做的映射,原型如下:

        void iounmap(void * addr);

     二、 ioremap() 相关函数解析

      在将I/O内存资源的物理地址映射成核心虚地址后,理论上讲我们就可以象读写RAM那样直接读写I/O内存资源了。为了保证驱动程序的跨平台的可移植性,我们应该使用Linux中特定的函数来访问I/O内存资源,而不应该通过指向核心虚地址的指针来访问。

    读写I/O的函数如下所示:

    a -- writel()

           writel()往内存映射的 I/O 空间上写数据,wirtel()  I/O 上写入 32 位数据 (4字节)。

       原型:void writel (unsigned char data , unsigned short addr )

    b -- readl()

          readl() 从内存映射的 I/O 空间上读数据,readl 从 I/O 读取 32 位数据 ( 4 字节 )。
     
      原型:unsigned char readl (unsigned int addr )

      变量    addr  是 I/O 地址。

      返回值 : 从 I/O 空间读取的数值。

    https://blog.csdn.net/zqixiao_09/article/details/50859505

    证明是页映射 : https://blog.csdn.net/ultraman_hs/article/details/53337056

  • 相关阅读:
    无需认证的mail,适用于ZABBIX等运维系统
    Linux交换分区使用过多的处理办法
    zookeeper的单实例和伪集群部署
    Zookeeper分布式集群原理与功能
    Nginx禁止IP直接访问网站
    镜像站地址汇总
    Nginx反向代理后端多节点下故障节点的排除思路
    Redis主从复制与高可用方案
    http_proxy_module模块常用参数
    Nginx实现负载均衡的几种方式
  • 原文地址:https://www.cnblogs.com/xdyixia/p/9373913.html
Copyright © 2011-2022 走看看