先總結(jié)一句:不管是單片機(jī)還是高端 ARM 平臺(tái),最底層都是寄存器,硬件之上就是寄存器,任何封裝形式到最底層就是操作寄存器。
對(duì)于上了 Linux 系統(tǒng)的平臺(tái),我們有其他方法,讓它可以像單片機(jī)一樣簡(jiǎn)單的操作 IO 口,這得益于各路 Linux 大神對(duì)系統(tǒng)底層的封裝。
在 Linux 中有 pinctrl 和 gpio 子系統(tǒng),它們提供了 API 接口給你使用,讓你方便的操控 GPIO 口。
Linux 內(nèi)核針對(duì) PIN 的配置推出了 pinctrl 子系統(tǒng),對(duì) GPIO 的配置推出了 gpio 子系統(tǒng)。
上面這句話很重要,我詳細(xì)解釋一下:這里是將 pin 腳和控制 IO 口輸入輸出分離。
pinctrl 子系統(tǒng)管理 200 個(gè) IO 口的上拉下拉電阻,電流驅(qū)動(dòng)能力,是硬件底層的存在。如果 pinctrl 將某個(gè) pin 腳初始化成了普通GPIO 而不是 IIC 或者 SPI,那么接下來我們就可以使用 gpio 子系統(tǒng)的 API 去操作 IO 口輸出高低電平。
傳統(tǒng)的配置 pin 的方式就是直接操作相應(yīng)的寄存器,但是這種配置 方式比較繁瑣、而且容易出問題(比如 pin 功能沖突)。pinctrl子系統(tǒng)就是為了解決這個(gè)問題而引入的,pinctrl 子系統(tǒng)主要工作內(nèi)容如下:
①、獲取設(shè)備樹中 pin 信息。
②、根據(jù)獲取到的 pin 信息來設(shè)置 pin 的復(fù)用功能
③、根據(jù)獲取到的 pin 信息來設(shè)置 pin 的電氣特性,比如上/下拉、速度、驅(qū)動(dòng)能力等。
對(duì)于我們使用者來講,只需要在設(shè)備樹里面設(shè)置好某個(gè) pin 的相關(guān)屬性即可,其他的初始化工作均由 pinctrl 子系統(tǒng)來完成,pinctrl子系統(tǒng)源碼目錄為 drivers/pinctrl。
注意,pinctrl 子系統(tǒng)也是一個(gè)標(biāo)準(zhǔn)的 platform 驅(qū)動(dòng),當(dāng)設(shè)備和驅(qū)動(dòng)匹配的時(shí)候,probe 函數(shù)會(huì)執(zhí)行,只是 pinctrl 子系統(tǒng)采用的arch_initcall 去聲明,而不是module_init(device_initcall),所以在系統(tǒng)起來的時(shí)候它會(huì)先加載。(具體原因看下面這篇文章)
Linux 驅(qū)動(dòng)掛載順序分析
gpio
可以看出其實(shí)兩者軟件框架一樣的,主要是 HW Abstract layer 具體實(shí)現(xiàn)不一樣。
你以為兩者是分離的,實(shí)際上不是的,gpio 子系統(tǒng)是基于 pinctrl 子系統(tǒng)的,gpio 的 API 接口的實(shí)現(xiàn)很多都是基于 pinctrl子系統(tǒng)的函數(shù)。
-
嵌入式
+關(guān)注
關(guān)注
5152文章
19676瀏覽量
317700 -
Linux
+關(guān)注
關(guān)注
87文章
11511瀏覽量
213865 -
軟件
+關(guān)注
關(guān)注
69文章
5154瀏覽量
89232 -
GPIO
+關(guān)注
關(guān)注
16文章
1280瀏覽量
54126 -
系統(tǒng)
+關(guān)注
關(guān)注
1文章
1032瀏覽量
21822
發(fā)布評(píng)論請(qǐng)先 登錄
一文搞懂Linux pinctrl/gpio子系統(tǒng)
如何從linux控制SCU GPIO?
從需求的角度去理解Linux系列:總線、設(shè)備和驅(qū)動(dòng)
從Windows平臺(tái)遷移到Linux平臺(tái)怎么實(shí)現(xiàn)?
Linux系統(tǒng)的功耗研究
Linux 驅(qū)動(dòng) = 軟件框架 + 硬件操作
基于Linux的XFRM框架下IPSec VPN的研究
基于Linux的實(shí)時(shí)平臺(tái)的研究
嵌入式Linux軟件測(cè)試框架的研究
第8章 Linux軟件開發(fā)平臺(tái)及軟件配置
Linux DMA Engine框架的介紹
嵌入式Linux驅(qū)動(dòng)開發(fā)從基礎(chǔ)到框架

Linux驅(qū)動(dòng)分析之RTC框架

從硬件軟件角度理解Gadget框架

評(píng)論