05_GPIO子系統層次與數據結構

資料下載

由于coding平臺不支持通過瀏覽器直接打開,必須使用git工具進行下載:

代碼語言:JavaScript 代碼運行次數:0

運行 復制 “`javascript git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git “`

視頻觀看百問網驅動大全

GPIO子系統層次與數據結構參考資料:

linux 5.x內核文檔 Linux-5.4Documentationdriver-api Linux-5.4Documentationdevicetreebindingsgpiogpio.txt Linux-5.4driversgpiogpio-74×164.c Linux 4.x內核文檔 Linux-4.9.88Documentationgpio Linux-4.9.88Documentationdevicetreebindingsgpiogpio.txt Linux-4.9.88driversgpiogpio-74×164.c

  1. GPIO子系統的層次

1.1 層次 05_GPIO子系統層次與數據結構

1.2 GPIOLIB向上提供的接口

descriptor-based legacy 說明

獲得GPIO | gpiod_get | gpio_request | | gpiod_get_index | | gpiod_get_array | gpio_request_array | | devm_gpiod_get | | devm_gpiod_get_index | | devm_gpiod_get_array | 設置方向 | gpiod_direction_input | gpio_direction_input | | gpiod_direction_output | gpio_direction_output | 讀值、寫值 | gpiod_get_value | gpio_get_value | | gpiod_set_value | gpio_set_value | 釋放GPIO | gpio_free | gpio_free | | gpiod_put | gpio_free_array | | gpiod_put_array | | devm_gpiod_put | | devm_gpiod_put_array |

1.3 GPIOLIB向下提供的接口 05_GPIO子系統層次與數據結構

  1. 重要的3個核心數據結構

記住GPIO Controller的要素,這有助于理解它的驅動程序:

一個GPIO Controller里有多少個引腳?有哪些引腳?需要提供函數,設置引腳方向、讀取/設置數值需要提供函數,把引腳轉換為中斷以Linux面向對象編程的思想,一個GPIO Controller必定會使用一個結構體來表示,這個結構體必定含有這些信息:

GPIO引腳信息 控制引腳的函數 中斷相關的函數

2.1 gpio_device 每個GPIO Controller用一個gpio_device來表示:

里面每一個gpio引腳用一個gpio_desc來表示 gpio引腳的函數(引腳控制、中斷相關),都放在gpio_chip里 05_GPIO子系統層次與數據結構

2.2 gpio_chip 我們并不需要自己創建gpio_device,編寫驅動時要創建的是gpio_chip,里面提供了:

控制引腳的函數 中斷相關的函數 引腳信息:支持多少個引腳?各個引腳的名字? 05_GPIO子系統層次與數據結構

2.3 gpio_desc 我們去使用GPIO子系統時,首先是獲得某個引腳對應的gpio_desc。

gpio_device表示一個GPIO Controller,里面支持多個GPIO。

在gpio_device中有一個gpio_desc數組,每一引腳有一項gpio_desc。 05_GPIO子系統層次與數據結構

  1. 如何編寫GPIO Controller驅動程序

分配、設置、注冊gpioc_chip結構體,示例:driversgpiogpio-74×164.c

05_GPIO子系統層次與數據結構

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享