Linux 下大部分設(shè)備的驅(qū)動(dòng)開(kāi)發(fā)都是操作其內(nèi)部寄存器,比如 I2C/SPI 設(shè)備的本質(zhì)都是一樣的,通過(guò) I2C/SPI 接口讀寫(xiě)芯片內(nèi)部寄存器。芯片內(nèi)部寄存器也是同樣的道理,比如 I.MX6ULL的 PWM、定時(shí)器等外設(shè)初始化,最終都是要落到寄存器的設(shè)置上。
Linux 下使用 i2c_transfer 來(lái)讀寫(xiě) I2C 設(shè)備中的寄存器,SPI 接口的話(huà)使用 spi_write/spi_read等。I2C/SPI 芯片又非常的多,因此 Linux 內(nèi)核里面就會(huì)充斥了大量的 i2c_transfer 這類(lèi)的冗余代碼,再者,代碼的復(fù)用性也會(huì)降低。比如 icm20608 這個(gè)芯片既支持 I2C 接口,也支持 SPI 接口。假設(shè)我們?cè)诋a(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 將寄存器訪(fǎng)問(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)訪(fǎng)問(wèn)器件的寄存器,SOC 內(nèi)部的寄存器也可以使用 regmap 接口函數(shù)來(lái)訪(fǎng)問(wèn)。
regmap 是 Linux 內(nèi)核為了減少慢速 I/O 在驅(qū)動(dòng)上的冗余開(kāi)銷(xiāo),提供了一種通用的接口來(lái)操作硬件寄存器。另外,regmap 在驅(qū)動(dòng)和硬件之間添加了 cache,降低了低速 I/O 的操作次數(shù),提高了訪(fǎng)問(wèn)效率,缺點(diǎn)是實(shí)時(shí)性會(huì)降低。
什么情況下會(huì)使用 regmap:
①、硬件寄存器操作,比如選用通過(guò) I2C/SPI 接口來(lái)讀寫(xiě)設(shè)備的內(nèi)部寄存器,或者需要讀寫(xiě) SOC 內(nèi)部的硬件寄存器。
②、提高代碼復(fù)用性和驅(qū)動(dòng)一致性,簡(jiǎn)化驅(qū)動(dòng)開(kāi)發(fā)過(guò)程。
③、減少底層 I/O 操作次數(shù),提高訪(fǎng)問(wèn)效率。
-
Linux
+關(guān)注
關(guān)注
87文章
11456瀏覽量
212750 -
模型
+關(guān)注
關(guān)注
1文章
3483瀏覽量
49968 -
系統(tǒng)
+關(guān)注
關(guān)注
1文章
1028瀏覽量
21701
發(fā)布評(píng)論請(qǐng)先 登錄
飛凌嵌入式ElfBoard ELF 1板卡-Regmap子系統(tǒng)之Regmap簡(jiǎn)介
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Regmap子系統(tǒng)之Regmap框架結(jié)構(gòu)
飛凌嵌入式ElfBoard ELF 1板卡-Regmap的優(yōu)勢(shì)
飛凌嵌入式ElfBoard ELF 1板卡-Regmap使用

#硬聲創(chuàng)作季 #Linux 學(xué)Linux-4.35.1 Regmap驅(qū)動(dòng)框架詳解-1

#硬聲創(chuàng)作季 #Linux 學(xué)Linux-4.35.1 Regmap驅(qū)動(dòng)框架詳解-2
「正點(diǎn)原子Linux連載」第六十章Linux RTC驅(qū)動(dòng)實(shí)驗(yàn)
「正點(diǎn)原子Linux連載」第六十章Linux RTC驅(qū)動(dòng)實(shí)驗(yàn)
以rk808驅(qū)動(dòng)為例子講解i2c regmap方式讀寫(xiě)
IoT 中的 Linux 選擇
如何在Linux中查找斷開(kāi)的符號(hào)鏈接
Linux Regmap 驅(qū)動(dòng)框架

評(píng)論