哈嘍,我是老吳,我來繼續(xù)分享我的學(xué)習(xí)心得啦。
gpio 和
pinctrl 子系統(tǒng)在內(nèi)核里的使用率非常高,和嵌入式產(chǎn)品的關(guān)聯(lián)非常大。從這兩個(gè)子系統(tǒng)開始學(xué)習(xí)
驅(qū)動(dòng)開發(fā)是個(gè)不錯(cuò)的入門選擇。
本文目錄:一、gpio?與?pinctrl
二、內(nèi)核里如何引用?gpio
三、gpio?子系統(tǒng)框架
四、應(yīng)用層如何訪問?gpio
一、gpio 與 pinctrl
本文主要關(guān)注 gpio 子系統(tǒng),但是老吳認(rèn)為必要先說明一下 pinctrl 子系統(tǒng)和 gpio 子系統(tǒng)的之間關(guān)系。
pinctrl 的作用:- 引腳復(fù)用,例如某個(gè)引腳即可用作為普通的gpio,也可以作為UART的TX;
- 引腳配置,一般包括上下拉、驅(qū)動(dòng)能力等;
gpio 的作用:- 作為輸入功能時(shí),支持讀引腳值;
- 作為輸出功能時(shí),支持輸出高低電平;
- 部分 gpio 還負(fù)責(zé)接收中斷;
gpio 的使用依賴于 pinctrl:本文的關(guān)注點(diǎn)是 gpio driver --> gpio subsystem core -> gpio consumer 這一路徑,讀者如果想更深入地了解 pinctrl 子系統(tǒng),可以參考內(nèi)核文檔:Documentation/driver-api/pinctl.rst。
gpio 子系統(tǒng)內(nèi)核文檔:Documentation/driver-api/gpio:
文檔 | 簡介 |
---|
index.rst | 文檔目錄和源碼清單 |
intro.rst | gpio 簡介 |
driver.rst | 描述如何編寫 gpio controller driver |
consumer.rst | 描述 gpio consumer 如何使用 gpio |
board.rst | 描述設(shè)備如何申請(qǐng) gpio |
drivers-on-gpio.rst | 列舉一些使用了gpio子系統(tǒng)的常見驅(qū)動(dòng),例如 leds-gpio.c、gpio_keys.c 等 |
legacy.rst | 描述 legacy gpio 接口 |
注:本文基于 Linux-4.19。
二、內(nèi)核里如何引用 gpio
2 個(gè)步驟:
1) 設(shè)備樹里添加 gpio mappings
示例:foo_device {
compatible = "packt,gpio-descriptor-sample";
led-gpios = <