資料下載
由于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
- GPIO子系統的層次
1.1 層次
1.2 GPIOLIB向上提供的接口
獲得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向下提供的接口
- 重要的3個核心數據結構
記住GPIO Controller的要素,這有助于理解它的驅動程序:
一個GPIO Controller里有多少個引腳?有哪些引腳?需要提供函數,設置引腳方向、讀取/設置數值需要提供函數,把引腳轉換為中斷以Linux面向對象編程的思想,一個GPIO Controller必定會使用一個結構體來表示,這個結構體必定含有這些信息:
GPIO引腳信息 控制引腳的函數 中斷相關的函數
2.1 gpio_device 每個GPIO Controller用一個gpio_device來表示:
里面每一個gpio引腳用一個gpio_desc來表示 gpio引腳的函數(引腳控制、中斷相關),都放在gpio_chip里
2.2 gpio_chip 我們并不需要自己創建gpio_device,編寫驅動時要創建的是gpio_chip,里面提供了:
控制引腳的函數 中斷相關的函數 引腳信息:支持多少個引腳?各個引腳的名字?
2.3 gpio_desc 我們去使用GPIO子系統時,首先是獲得某個引腳對應的gpio_desc。
gpio_device表示一個GPIO Controller,里面支持多個GPIO。
在gpio_device中有一個gpio_desc數組,每一引腳有一項gpio_desc。
- 如何編寫GPIO Controller驅動程序
分配、設置、注冊gpioc_chip結構體,示例:driversgpiogpio-74×164.c