0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

驅(qū)動(dòng)訪問Linux IO內(nèi)存流程

冬至配餃子 ? 來源:嵌入式軟件開發(fā)交流 ? 作者:young ? 2022-08-04 18:10 ? 次閱讀

什么是IO內(nèi)存

I/O內(nèi)存也稱為Memory-Mapped I/O(MMIO), 它是指一種編址方式,不同cpu平臺使用的編址方式不同,一種是“IO內(nèi)存”方式,也叫統(tǒng)一編址方式,是指內(nèi)存和外設(shè)的地址是在同一個(gè)地址空間上的,比如我們常見的ARM、MIPS等平臺;還有另外一種叫獨(dú)立編址方式,是指內(nèi)存的地址空間和外設(shè)的地址空間是分開的,比如x86平臺。

LinuxI/O內(nèi)存 API

(1) IO內(nèi)存申請

要使用某個(gè)外設(shè)前,要申請其所對應(yīng)的IO內(nèi)存,表明驅(qū)動(dòng)要訪問這塊區(qū)域。

poYBAGLrmoCAJ6CcAAEMcmrHI-k273.png

(2)IO內(nèi)存訪問

在內(nèi)核中訪問IO內(nèi)存(通常是芯片內(nèi)部的各個(gè)I2C,SPI, USB控制器寄存器或者外部內(nèi)存總線上的設(shè)備)之前,需首先使用ioremap()函數(shù)將設(shè)備所處的物理地址映射到虛擬地址上。

poYBAGLrmpqAfEq0AAFX5ei8020979.png

驅(qū)動(dòng)訪問IO內(nèi)存流程

1)調(diào)用request_mem_region()申請I/O內(nèi)存資源。

2)將設(shè)備寄存器的物理地址通過ioremap()映射到內(nèi)核空間的虛擬地址。

3)通過readb/writeb等接口訪問設(shè)備的寄存器。

4)訪問完成后,調(diào)用iounmap()函數(shù)對ioremap()映射的虛擬地址解除映射,并調(diào)用release_mem_region()函數(shù)釋放申請的I/O內(nèi)存資源。

pYYBAGLrmqyAQS8iAAC8Qnyx_34803.png



審核編輯:劉清


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9027

    瀏覽量

    366476
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11207

    瀏覽量

    208716
  • mips
    +關(guān)注

    關(guān)注

    1

    文章

    237

    瀏覽量

    47680
  • IO口
    +關(guān)注

    關(guān)注

    3

    文章

    169

    瀏覽量

    23967
收藏 人收藏

    評論

    相關(guān)推薦

    Linux內(nèi)存管理是什么,Linux內(nèi)存管理詳解

    Linux內(nèi)存管理 Linux內(nèi)存管理是一個(gè)非常復(fù)雜的過程,主要分成兩個(gè)大的部分:內(nèi)核的內(nèi)存管理和進(jìn)程虛擬
    的頭像 發(fā)表于 05-11 17:54 ?5947次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b>管理是什么,<b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b>管理詳解

    Linux驅(qū)動(dòng)開發(fā)之IO模型介紹

    Linux驅(qū)動(dòng)開發(fā)中,應(yīng)用程序通過循環(huán)讀取或者中斷的方式都會使得CPU的占用率很高。本文介紹五種IO模型,可以用來優(yōu)化文件讀寫方式,降低CPU的使用率。
    發(fā)表于 07-29 09:03 ?802次閱讀

    如何設(shè)計(jì)并實(shí)現(xiàn)面向非易失內(nèi)存的MPI-IO接口優(yōu)化

    為了實(shí)現(xiàn) 對非易失內(nèi)存的管理與利用、對文件數(shù)據(jù)緩存的管理與訪問,本文設(shè)計(jì)并實(shí)現(xiàn)了面向非易失內(nèi)存的MPI-IO接口優(yōu)化(NVMPI-IO)。本
    的頭像 發(fā)表于 10-09 10:53 ?1457次閱讀

    linux驅(qū)動(dòng)程序的主要流程和功能

    驅(qū)動(dòng)程序是用于控制和管理硬件設(shè)備的軟件模塊,它主要負(fù)責(zé)與設(shè)備進(jìn)行交互,通過操作設(shè)備的寄存器和接口,實(shí)現(xiàn)對硬件的控制和訪問。在Linux系統(tǒng)中,驅(qū)動(dòng)程序是實(shí)現(xiàn)與硬件設(shè)備交互的一個(gè)關(guān)鍵部分
    的頭像 發(fā)表于 12-08 14:56 ?2160次閱讀

    詳解io端口與io內(nèi)存

    writel(unsigned value, address); 流程如下:2)Linux訪問IO內(nèi)存
    發(fā)表于 06-07 15:41

    Linux文件系統(tǒng)與IO流程和模型

    今晚9點(diǎn): 《Linux文件系統(tǒng)與IO流程和模型》微課(415-418)
    發(fā)表于 06-13 16:51

    Linux驅(qū)動(dòng)開發(fā)有哪些流程

    Linux系統(tǒng)的設(shè)備分為哪幾類?Linux驅(qū)動(dòng)開發(fā)有哪些流程
    發(fā)表于 07-23 11:57

    一文解析Linux系統(tǒng)保留內(nèi)存的初始化流程

    1、Linux系統(tǒng)保留內(nèi)存的初始化流程在啟動(dòng)過程中會打印出如下信息,這些信息為linux呈現(xiàn)出系統(tǒng)下的保留內(nèi)存空間。本文只介紹基本的保留
    發(fā)表于 06-30 16:27

    Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第11章、內(nèi)存IO訪問

    Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第11章、內(nèi)存IO訪問
    發(fā)表于 10-27 11:27 ?6次下載
    《<b class='flag-5'>Linux</b>設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>開發(fā)詳解》第11章、<b class='flag-5'>內(nèi)存</b>與<b class='flag-5'>IO</b><b class='flag-5'>訪問</b>

    Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第9章、Linux設(shè)備驅(qū)動(dòng)中的異步通知與異步IO

    Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第9章、Linux設(shè)備驅(qū)動(dòng)中的異步通知與異步IO
    發(fā)表于 10-27 11:33 ?0次下載
    《<b class='flag-5'>Linux</b>設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>開發(fā)詳解》第9章、<b class='flag-5'>Linux</b>設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>中的異步通知與異步<b class='flag-5'>IO</b>

    Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第8章、Linux設(shè)備驅(qū)動(dòng)中的阻塞與非阻塞IO

    Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第8章、Linux設(shè)備驅(qū)動(dòng)中的阻塞與非阻塞IO
    發(fā)表于 10-27 11:35 ?9次下載
    《<b class='flag-5'>Linux</b>設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>開發(fā)詳解》第8章、<b class='flag-5'>Linux</b>設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>中的阻塞與非阻塞<b class='flag-5'>IO</b>

    Linux驅(qū)動(dòng)技術(shù)之一:訪問I/O內(nèi)存

    ARM是對內(nèi)存空間和IO空間統(tǒng)一編址的,所以,通過讀寫SFR來控制硬件也就變成了通過讀寫相應(yīng)的SFR地址來控制硬件。這部分地址也被稱為I/O內(nèi)存
    發(fā)表于 05-08 14:33 ?545次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動(dòng)</b>技術(shù)之一:<b class='flag-5'>訪問</b>I/O<b class='flag-5'>內(nèi)存</b>

    如何用腳本來獲取linux系統(tǒng)CPU、內(nèi)存、磁盤IO,及原理解釋

    今天主要分享一個(gè)shell腳本,用來獲取linux系統(tǒng)CPU、內(nèi)存、磁盤IO等信息。
    的頭像 發(fā)表于 04-08 14:40 ?2931次閱讀
    如何用腳本來獲取<b class='flag-5'>linux</b>系統(tǒng)CPU、<b class='flag-5'>內(nèi)存</b>、磁盤<b class='flag-5'>IO</b>,及原理解釋

    深入剖析Linux共享內(nèi)存原理

    Linux系統(tǒng)中,每個(gè)進(jìn)程都有獨(dú)立的虛擬內(nèi)存空間,也就是說不同的進(jìn)程訪問同一段虛擬內(nèi)存地址所得到的數(shù)據(jù)是不一樣的,這是因?yàn)椴煌M(jìn)程相同的虛擬內(nèi)存
    的頭像 發(fā)表于 10-30 09:52 ?2240次閱讀
    深入剖析<b class='flag-5'>Linux</b>共享<b class='flag-5'>內(nèi)存</b>原理

    Linux驅(qū)動(dòng)模塊.ko內(nèi)存精簡優(yōu)化過程

    Linux 驅(qū)動(dòng)模塊可以獨(dú)立的編譯成 .ko 文件,雖然大小一般只有幾 MB,但對總內(nèi)存只有幾十 MB 的小型 Linux 系統(tǒng)來說,常常也是一個(gè)非常值得優(yōu)化的點(diǎn)。本文以一個(gè)實(shí)際例子,
    發(fā)表于 09-25 09:23 ?1326次閱讀