0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

驱动访问Linux IO内存流程

冬至配饺子 来源:嵌入式软件开发交流 作者:young 2022-08-04 18:10 次阅读

什么是IO内存

I/O内存也称为Memory-Mapped I/O(MMIO), 它是指一种编址方式,不同cpu平台使用的编址方式不同,一种是“IO内存”方式,也叫统一编址方式,是指内存和外设的地址是在同一个地址空间上的,比如我们常见的ARM、MIPS等平台;还有另外一种叫独立编址方式,是指内存的地址空间和外设的地址空间是分开的,比如x86平台。

LinuxI/O内存 API

(1) IO内存申请

要使用某个外设前,要申请其所对应的IO内存,表明驱动要访问这块区域。

poYBAGLrmoCAJ6CcAAEMcmrHI-k273.png

(2)IO内存访问

在内核中访问IO内存(通常是芯片内部的各个I2C,SPI, USB控制器寄存器或者外部内存总线上的设备)之前,需首先使用ioremap()函数将设备所处的物理地址映射到虚拟地址上。

poYBAGLrmpqAfEq0AAFX5ei8020979.png

驱动访问IO内存流程

1)调用request_mem_region()申请I/O内存资源。

2)将设备寄存器的物理地址通过ioremap()映射到内核空间的虚拟地址。

3)通过readb/writeb等接口访问设备的寄存器。

4)访问完成后,调用iounmap()函数对ioremap()映射的虚拟地址解除映射,并调用release_mem_region()函数释放申请的I/O内存资源。

pYYBAGLrmqyAQS8iAAC8Qnyx_34803.png



审核编辑:刘清


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9043

    浏览量

    366759
  • Linux
    +关注

    关注

    87

    文章

    11222

    浏览量

    208889
  • mips
    +关注

    关注

    1

    文章

    238

    浏览量

    47712
  • IO口
    +关注

    关注

    3

    文章

    169

    浏览量

    23991
收藏 人收藏

    评论

    相关推荐

    Linux内存管理是什么,Linux内存管理详解

    Linux内存管理 Linux内存管理是一个非常复杂的过程,主要分成两个大的部分:内核的内存管理和进程虚拟
    的头像 发表于 05-11 17:54 5973次阅读
    <b class='flag-5'>Linux</b>的<b class='flag-5'>内存</b>管理是什么,<b class='flag-5'>Linux</b>的<b class='flag-5'>内存</b>管理详解

    Linux驱动开发之IO模型介绍

    Linux驱动开发中,应用程序通过循环读取或者中断的方式都会使得CPU的占用率很高。本文介绍五种IO模型,可以用来优化文件读写方式,降低CPU的使用率。
    发表于 07-29 09:03 806次阅读

    如何设计并实现面向非易失内存的MPI-IO接口优化

    为了实现 对非易失内存的管理与利用、对文件数据缓存的管理与访问,本文设计并实现了面向非易失内存的MPI-IO接口优化(NVMPI-IO)。本
    的头像 发表于 10-09 10:53 1462次阅读

    linux驱动程序的主要流程和功能

    驱动程序是用于控制和管理硬件设备的软件模块,它主要负责与设备进行交互,通过操作设备的寄存器和接口,实现对硬件的控制和访问。在Linux系统中,驱动程序是实现与硬件设备交互的一个关键部分
    的头像 发表于 12-08 14:56 2227次阅读

    详解io端口与io内存

    writel(unsigned value, address); 流程如下:2)Linux访问IO内存
    发表于 06-07 15:41

    Linux文件系统与IO流程和模型

    今晚9点: 《Linux文件系统与IO流程和模型》微课(415-418)
    发表于 06-13 16:51

    Linux驱动开发有哪些流程

    Linux系统的设备分为哪几类?Linux驱动开发有哪些流程
    发表于 07-23 11:57

    一文解析Linux系统保留内存的初始化流程

    1、Linux系统保留内存的初始化流程在启动过程中会打印出如下信息,这些信息为linux呈现出系统下的保留内存空间。本文只介绍基本的保留
    发表于 06-30 16:27

    Linux设备驱动开发详解》第11章、内存IO访问

    Linux设备驱动开发详解》第11章、内存IO访问
    发表于 10-27 11:27 6次下载
    《<b class='flag-5'>Linux</b>设备<b class='flag-5'>驱动</b>开发详解》第11章、<b class='flag-5'>内存</b>与<b class='flag-5'>IO</b><b class='flag-5'>访问</b>

    Linux设备驱动开发详解》第9章、Linux设备驱动中的异步通知与异步IO

    Linux设备驱动开发详解》第9章、Linux设备驱动中的异步通知与异步IO
    发表于 10-27 11:33 0次下载
    《<b class='flag-5'>Linux</b>设备<b class='flag-5'>驱动</b>开发详解》第9章、<b class='flag-5'>Linux</b>设备<b class='flag-5'>驱动</b>中的异步通知与异步<b class='flag-5'>IO</b>

    Linux设备驱动开发详解》第8章、Linux设备驱动中的阻塞与非阻塞IO

    Linux设备驱动开发详解》第8章、Linux设备驱动中的阻塞与非阻塞IO
    发表于 10-27 11:35 9次下载
    《<b class='flag-5'>Linux</b>设备<b class='flag-5'>驱动</b>开发详解》第8章、<b class='flag-5'>Linux</b>设备<b class='flag-5'>驱动</b>中的阻塞与非阻塞<b class='flag-5'>IO</b>

    Linux驱动技术之一:访问I/O内存

    ARM是对内存空间和IO空间统一编址的,所以,通过读写SFR来控制硬件也就变成了通过读写相应的SFR地址来控制硬件。这部分地址也被称为I/O内存
    发表于 05-08 14:33 549次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>驱动</b>技术之一:<b class='flag-5'>访问</b>I/O<b class='flag-5'>内存</b>

    如何用脚本来获取linux系统CPU、内存、磁盘IO,及原理解释

    今天主要分享一个shell脚本,用来获取linux系统CPU、内存、磁盘IO等信息。
    的头像 发表于 04-08 14:40 2946次阅读
    如何用脚本来获取<b class='flag-5'>linux</b>系统CPU、<b class='flag-5'>内存</b>、磁盘<b class='flag-5'>IO</b>,及原理解释

    深入剖析Linux共享内存原理

    Linux系统中,每个进程都有独立的虚拟内存空间,也就是说不同的进程访问同一段虚拟内存地址所得到的数据是不一样的,这是因为不同进程相同的虚拟内存
    的头像 发表于 10-30 09:52 2246次阅读
    深入剖析<b class='flag-5'>Linux</b>共享<b class='flag-5'>内存</b>原理

    Linux驱动模块.ko内存精简优化过程

    Linux 驱动模块可以独立的编译成 .ko 文件,虽然大小一般只有几 MB,但对总内存只有几十 MB 的小型 Linux 系统来说,常常也是一个非常值得优化的点。本文以一个实际例子,
    发表于 09-25 09:23 1374次阅读