Linux 驅(qū)動(dòng)開發(fā) / gpio子系統(tǒng) / 快速入門
[導(dǎo)讀]哈嘍,我是老吳,我來繼續(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)用層如...
哈嘍,我是老吳,我來繼續(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ò)的入門選擇。本文目錄:點(diǎn)擊查看大圖 gpio 的作用:點(diǎn)擊查看大圖 本文的關(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:
注:本文基于 Linux-4.19。
一、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)能力等;
- 作為輸入功能時(shí),支持讀引腳值;
- 作為輸出功能時(shí),支持輸出高低電平;
- 部分 gpio 還負(fù)責(zé)接收中斷;
| 文檔 | 簡(jiǎn)介 |
|---|---|
| index.rst | 文檔目錄和源碼清單 |
| intro.rst | gpio 簡(jiǎn)介 |
| 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 接口 |
二、內(nèi)核里如何引用 gpio
2 個(gè)步驟:
1) 設(shè)備樹里添加 gpio mappings
示例:foo_device {
compatible = "packt,gpio-descriptor-sample";
led-gpios = < 




