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

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

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

Linux中什么是 Regmap

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux系統(tǒng)開(kāi)發(fā) ? 作者:嵌入式Linux系統(tǒng)開(kāi) ? 2023-07-06 17:25 ? 次閱讀

Linux 下大部分設(shè)備的驅(qū)動(dòng)開(kāi)發(fā)都是操作其內(nèi)部寄存器,比如 I2C/SPI 設(shè)備的本質(zhì)都是一樣的,通過(guò) I2C/SPI 接口讀寫芯片內(nèi)部寄存器。芯片內(nèi)部寄存器也是同樣的道理,比如 I.MX6ULL的 PWM、定時(shí)器等外設(shè)初始化,最終都是要落到寄存器的設(shè)置上。

Linux 下使用 i2c_transfer 來(lái)讀寫 I2C 設(shè)備中的寄存器,SPI 接口的話使用 spi_write/spi_read等。I2C/SPI 芯片又非常的多,因此 Linux 內(nèi)核里面就會(huì)充斥了大量的 i2c_transfer 這類的冗余代碼,再者,代碼的復(fù)用性也會(huì)降低。比如 icm20608 這個(gè)芯片既支持 I2C 接口,也支持 SPI 接口。假設(shè)我們?cè)?a target="_blank">產(chǎn)品設(shè)計(jì)階段一開(kāi)始將 icm20608 設(shè)計(jì)為 SPI 接口,但是后面發(fā)現(xiàn) SPI 接口不夠用,或者 SOC 的引腳不夠用,我們需要將 icm20608 改為 I2C 接口。這個(gè)時(shí)候 icm20608 的驅(qū)動(dòng)就要大改,我們需要將 SPI 接口函數(shù)換為 I2C 的,工作量比較大。

基于代碼復(fù)用的原則,Linux 內(nèi)核引入了 regmap 模型,regmap 將寄存器訪問(wèn)的共同邏輯抽象出來(lái),驅(qū)動(dòng)開(kāi)發(fā)人員不需要再去糾結(jié)使用 SPI 或者 I2C 接口 API 函數(shù),統(tǒng)一使用 regmapAPI 函數(shù)。這樣的好處就是統(tǒng)一使用 regmap,降低了代碼冗余,提高了驅(qū)動(dòng)的可以移植性。regmap 模型的重點(diǎn)在于:

通過(guò) regmap 模型提供的統(tǒng)一接口函數(shù)來(lái)訪問(wèn)器件的寄存器,SOC 內(nèi)部的寄存器也可以使用 regmap 接口函數(shù)來(lái)訪問(wèn)。

regmap 是 Linux 內(nèi)核為了減少慢速 I/O 在驅(qū)動(dòng)上的冗余開(kāi)銷,提供了一種通用的接口來(lái)操作硬件寄存器。另外,regmap 在驅(qū)動(dòng)和硬件之間添加了 cache,降低了低速 I/O 的操作次數(shù),提高了訪問(wèn)效率,缺點(diǎn)是實(shí)時(shí)性會(huì)降低。

什么情況下會(huì)使用 regmap:

①、硬件寄存器操作,比如選用通過(guò) I2C/SPI 接口來(lái)讀寫設(shè)備的內(nèi)部寄存器,或者需要讀寫 SOC 內(nèi)部的硬件寄存器。

②、提高代碼復(fù)用性和驅(qū)動(dòng)一致性,簡(jiǎn)化驅(qū)動(dòng)開(kāi)發(fā)過(guò)程。

③、減少底層 I/O 操作次數(shù),提高訪問(wèn)效率。

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

    關(guān)注

    87

    文章

    11182

    瀏覽量

    208519
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3073

    瀏覽量

    48587
  • 系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    1006

    瀏覽量

    21277
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    「正點(diǎn)原子Linux連載」第六十章Linux RTC驅(qū)動(dòng)實(shí)驗(yàn)

    RTC硬件原理部分我們已經(jīng)在裸機(jī)篇的第二十五章進(jìn)行了詳細(xì)的講解,這里就不再?gòu)U話了。Linux內(nèi)核將RTC設(shè)備抽象為rtc_device結(jié)構(gòu)體,因此RTC設(shè)備驅(qū)動(dòng)就是申請(qǐng)并初始化rtc_device
    發(fā)表于 03-18 10:20

    「正點(diǎn)原子Linux連載」第六十章Linux RTC驅(qū)動(dòng)實(shí)驗(yàn)

    RTC硬件原理部分我們已經(jīng)在裸機(jī)篇的第二十五章進(jìn)行了詳細(xì)的講解,這里就不再?gòu)U話了。Linux內(nèi)核將RTC設(shè)備抽象為rtc_device結(jié)構(gòu)體,因此RTC設(shè)備驅(qū)動(dòng)就是申請(qǐng)并初始化rtc_device
    發(fā)表于 03-23 09:52

    以rk808驅(qū)動(dòng)為例子講解i2c regmap方式讀寫

    I2C讀寫時(shí)序regmap i2cIntroRegmap主要目的是減少慢速I/O驅(qū)動(dòng)上的重復(fù)邏輯,提供一種通用的接口來(lái)操作底層硬件上的寄存器.Regmap除了能做到統(tǒng)一的I/O接口,還可以在驅(qū)動(dòng)
    發(fā)表于 08-11 16:43

    SSM2529 spk異常發(fā)熱怎么解決?

    _ read reg= 0x5, val= 0x40 , regmap_ reg= 0x5, val= 0x40 regmap_ read reg= 0x6, val= 0x40
    發(fā)表于 11-28 06:52

    基于JPEG在嵌入式Linux的應(yīng)用

    基于JPEG在嵌入式Linux的應(yīng)用
    發(fā)表于 10-31 08:39 ?6次下載
    基于JPEG在嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>中</b>的應(yīng)用

    Embeded linux的MMC驅(qū)動(dòng)

    Embeded linux的MMC驅(qū)動(dòng)
    發(fā)表于 05-14 16:08 ?1130次閱讀
    Embeded <b class='flag-5'>linux</b><b class='flag-5'>中</b>的MMC驅(qū)動(dòng)

    linux復(fù)制文件的方法

     linux如何復(fù)制文件?
    發(fā)表于 06-03 09:17 ?2186次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>中</b>復(fù)制文件的方法

    IoT Linux 選擇

    在物聯(lián)網(wǎng)的設(shè)備設(shè)計(jì),從低成本和低功耗的角度看,Android肯定比不過(guò)嵌入式Linux。但在選擇用于部署Linux的發(fā)行版本時(shí),卻一直飽受困擾。
    的頭像 發(fā)表于 12-25 18:24 ?497次閱讀

    linux實(shí)際使用的技巧

    本文主要介紹如何使用 Github 上的開(kāi)源項(xiàng)目 advcpmv 來(lái)實(shí)現(xiàn) Linux 的 「cp」 和 「mv」 命令的進(jìn)度條。
    的頭像 發(fā)表于 09-26 10:39 ?699次閱讀

    如何在Linux查找斷開(kāi)的符號(hào)鏈接

    在之前的文章,我們解釋了什么是 Linux 的符號(hào)鏈接。符號(hào)鏈接(Symbolic links 或 symlinks)或軟鏈接(soft links)用于在 Linux
    的頭像 發(fā)表于 02-06 18:23 ?1577次閱讀

    深入探索Linux的C語(yǔ)言

    本章將深入探索 Linux 的 C 語(yǔ)言。在本章,我們將學(xué)到更多關(guān)于編譯器、從源碼到二進(jìn)制程序的 4 個(gè)步驟、如何使用 Make 工具以及系統(tǒng)調(diào)用和 C 標(biāo)準(zhǔn)庫(kù)函數(shù)的差別的知識(shí)。我們也將學(xué)習(xí)一些
    的頭像 發(fā)表于 03-14 16:48 ?1511次閱讀

    Linux Regmap 驅(qū)動(dòng)框架

    ,regmap 向驅(qū)動(dòng)編寫人員提供的 API 接口,驅(qū)動(dòng)編寫人員使用這些API 接口來(lái)操作具體的芯片設(shè)備,也是驅(qū)動(dòng)編寫人員重點(diǎn)要掌握的。 2、regmap 結(jié)構(gòu)體 Linux 內(nèi) 核 將 regm
    的頭像 發(fā)表于 07-06 17:29 ?1019次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>Regmap</b> 驅(qū)動(dòng)框架

    Linux Regmap 操作函數(shù)

    Regmap 操作函數(shù) 1、Regmap 申請(qǐng)與初始化 regmap 支持多種物理總線,比如 I2C 和 SPI,我們需要根據(jù)所使用的接口來(lái)選擇合適的 regmap 初始化函數(shù)。
    的頭像 發(fā)表于 07-06 17:31 ?2639次閱讀