GPIO子系统驱动程序
在Linux内核中,有许多标准的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线无法产生中断时使用,需要通过定时器进行轮询。 - gpio_mouse:
drivers/input/mouse/gpio_mouse.c
用于通过GPIO提供具有最多三个按钮的鼠标,无需鼠标端口。 - gpio-beeper:
drivers/input/misc/gpio-beeper.c
用于通过连接到GPIO线的外部扬声器提供蜂鸣声。 - extcon-gpio:
drivers/extcon/extcon-gpio.c
用于读取外部连接器状态,例如音频驱动的耳机线或HDMI连接器。 - restart-gpio:
drivers/power/reset/gpio-restart.c
用于通过拉动GPIO线重新启动系统。 - poweroff-gpio:
drivers/power/reset/gpio-poweroff.c
用于通过拉动GPIO线关闭系统电源。 - gpio-gate-clock:
drivers/clk/clk-gpio.c
用于控制使用GPIO的门控时钟,并与时钟子系统集成。 - i2c-gpio:
drivers/i2c/busses/i2c-gpio.c
用于通过GPIO线驱动I2C总线。 - spi_gpio:
drivers/spi/spi-gpio.c
用于通过GPIO线驱动SPI总线。 - w1-gpio:
drivers/w1/masters/w1-gpio.c
用于通过GPIO线驱动一线总线。 - gpio-fan:
drivers/hwmon/gpio-fan.c
用于通过GPIO线控制风扇。 - gpio-regulator:
drivers/regulator/gpio-regulator.c
用于通过拉动GPIO线控制稳压器。 - gpio-wdt:
drivers/watchdog/gpio_wdt.c
用于提供定时“ping”硬件的看门狗定时器。 - gpio-nand:
drivers/mtd/nand/raw/gpio.c
用于连接NAND闪存芯片到一组简单的GPIO线。 - ps2-gpio:
drivers/input/serio/ps2-gpio.c
用于通过GPIO线驱动PS/2总线。 - cec-gpio:
drivers/media/platform/cec-gpio/
用于使用GPIO与CEC消费电子控制总线进行通信。 - gpio-charger:
drivers/power/supply/gpio-charger.c
用于检测AC充电器状态和指示充电状态。 - gpio-mux:
drivers/mux/gpio.c
用于控制多路复用器。
除此之外,在子系统中还有特殊的GPIO驱动程序,例如MMC/SD子系统中用于读取卡检测和写保护GPIO线,以及在TTY串行子系统中通过两个GPIO线模拟MCTRL(调制解调器控制)信号CTS/RTS。MTD NOR闪存也有额外的GPIO线附加功能。
在使用嵌入式系统时,建议使用这些标准的GPIO驱动程序,而不是直接从用户空间操作GPIO。这样做可以更好地集成到内核框架中,简化和加快嵌入式系统开发过程。
本文来自博客园,作者:摩斯电码,未经同意,禁止转载