使用GPIO的子系統驅動程式¶
請注意,對於常見的GPIO任務,存在標準的核心驅動程式,它們將為該任務提供正確的核心和使用者空間API/ABI,並且這些驅動程式可以很容易地使用諸如裝置樹或ACPI之類的硬體描述與其他核心子系統互連
leds-gpio: drivers/leds/leds-gpio.c 將處理連線到GPIO線路的LED,為您提供LED sysfs介面
ledtrig-gpio: drivers/leds/trigger/ledtrig-gpio.c 將提供一個LED觸發器,即LED將響應於GPIO線路變為高電平或低電平而開啟/關閉(並且該LED可能反過來使用如上所述的leds-gpio)。
gpio-keys: drivers/input/keyboard/gpio_keys.c 在您的GPIO線路可以響應按鍵生成中斷時使用。 還支援去抖動。
gpio-keys-polled: drivers/input/keyboard/gpio_keys_polled.c 在您的GPIO線路無法生成中斷時使用,因此需要透過計時器定期輪詢它。
gpio_mouse: drivers/input/mouse/gpio_mouse.c 用於透過簡單地使用GPIO而無需滑鼠埠來提供最多三個按鈕的滑鼠。 您可以剪斷滑鼠電纜並將電線連線到GPIO線路,或者將滑鼠聯結器焊接到線路上,以獲得更永久的解決方案。
gpio-beeper: drivers/input/misc/gpio-beeper.c 用於從連線到GPIO線路的外部揚聲器提供嗶嗶聲。 (如果蜂鳴聲由開/關控制,對於實際的PWM波形,請參見下面的pwm-gpio。)
pwm-gpio: drivers/pwm/pwm-gpio.c 用於使用高解析度計時器切換GPIO,從而在GPIO線路上產生PWM波形,以及Linux高解析度計時器可以執行的操作。
extcon-gpio: drivers/extcon/extcon-gpio.c 在您需要讀取外部聯結器狀態時使用,例如音訊驅動程式的耳機線路或HDMI聯結器。 它將提供比GPIO更好的使用者空間sysfs介面。
restart-gpio: drivers/power/reset/gpio-restart.c 用於透過拉低GPIO線路來重啟/重新啟動系統,並將註冊一個重啟處理程式,以便使用者空間可以發出正確的系統呼叫來重啟系統。
poweroff-gpio: drivers/power/reset/gpio-poweroff.c 用於透過拉低GPIO線路來關閉系統電源,並將註冊一個pm_power_off()回撥,以便使用者空間可以發出正確的系統呼叫來關閉系統電源。
gpio-gate-clock: drivers/clk/clk-gpio.c 用於控制使用GPIO的門控時鐘(開/關),並與時鐘子系統整合。
i2c-gpio: drivers/i2c/busses/i2c-gpio.c 用於透過錘擊(位 banging)兩條GPIO線路來驅動I2C匯流排(兩條線,SDA和SCL線路)。 它將作為任何其他I2C匯流排出現在系統中,並使其可以像任何其他I2C匯流排驅動程式一樣連線總線上I2C裝置的驅動程式。
spi_gpio: drivers/spi/spi-gpio.c 用於使用GPIO錘擊(位 banging)來驅動SPI匯流排(可變數量的線,至少SCK和可選的MISO,MOSI和晶片選擇線)。 它將作為系統上的任何其他SPI匯流排出現,並使其可以像任何其他SPI匯流排驅動程式一樣連線總線上SPI裝置的驅動程式。 例如,然後可以使用MMC/SD卡子系統中的mmc_spi主機將任何MMC/SD卡連線到此SPI。
w1-gpio: drivers/w1/masters/w1-gpio.c 用於使用GPIO線路驅動單線匯流排,與W1子系統整合,並像任何其他W1裝置一樣處理總線上的裝置。
gpio-fan: drivers/hwmon/gpio-fan.c 用於控制用於冷卻系統的風扇,該風扇連線到GPIO線路(以及可選的GPIO報警線路),並提供所有正確的核心和sysfs介面,以使您的系統不會過熱。
gpio-regulator: drivers/regulator/gpio-regulator.c 用於透過拉低GPIO線路來控制提供特定電壓的穩壓器,與穩壓器子系統整合,併為您提供所有正確的介面。
gpio-wdt: drivers/watchdog/gpio_wdt.c 用於提供一個看門狗定時器,該定時器將透過從1到0到1切換GPIO線路來定期“ping”連線到GPIO線路的硬體。 如果該硬體未定期收到其“ping”,它將重置系統。
gpio-nand: drivers/mtd/nand/raw/gpio.c 用於將NAND快閃記憶體晶片連線到一組簡單的GPIO線路:RDY,NCE,ALE,CLE,NWP。 它與NAND快閃記憶體MTD子系統互動,並提供晶片訪問和分割槽解析,就像任何其他NAND驅動硬體一樣。
ps2-gpio: drivers/input/serio/ps2-gpio.c 用於透過位 banging 兩條 GPIO 線路來驅動 PS/2 (IBM) serio 匯流排、資料和時鐘線。 它將作為任何其他 serio 匯流排出現在系統中,並使連線驅動程式(例如鍵盤和其他基於 PS/2 協議的裝置)成為可能。
cec-gpio: drivers/media/platform/cec-gpio/ 用於僅使用 GPIO 與 CEC 消費電子控制匯流排互動。 它用於與 HDMI 總線上的裝置通訊。
gpio-charger: drivers/power/supply/gpio-charger.c 用於在您需要執行電池充電並且您唯一能做的就是檢查交流充電器的存在或更復雜的任務,例如僅使用 GPIO 線路指示充電狀態時,此驅動程式提供該功能,並且還提供了一種明確定義的方式來傳遞來自硬體描述(如裝置樹)的充電引數。
gpio-mux: drivers/mux/gpio.c 用於使用 n 個 GPIO 線路控制多路複用器,這樣您可以透過啟用不同的 GPIO 線路在 2^n 個不同的裝置中進行多路複用。 通常,GPIO 位於 SoC 上,而裝置是一些 SoC 外部實體,例如 PCB 上可以選擇性啟用的不同元件。
除此之外,MMC/SD等子系統中有特殊的GPIO驅動程式,用於讀取卡檢測和防寫GPIO線路,TTY序列子系統中也使用兩個GPIO線路來模擬MCTRL(調變解調器控制)訊號CTS/RTS。 MTD NOR快閃記憶體也有額外的GPIO線路附加元件,儘管地址匯流排通常直接連線到快閃記憶體。
請使用這些方法,而不是直接從使用者空間與GPIO通訊;它們與核心框架的整合比您的使用者空間程式碼更好。 無需贅述,僅使用適當的核心驅動程式將透過提供現成的元件來簡化和加速您的嵌入式駭客行為。