news 2026/4/23 13:50:15

Linux设备驱动之gpio-keys(3)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux设备驱动之gpio-keys(3)

接前一篇文章:Linux设备驱动之gpio-keys(2)

本文内容参考:

Linux设备驱动之gpio-keys_linux gpio-keys-CSDN博客

Linux gpio-keys驱动解析-CSDN博客

GPIO-KEY的实现原理及使用方法_gpio-keys-CSDN博客

linux gpio key 实现方式_llinux gpio key 长按-CSDN博客

Linux设备树深度剖析

特此致谢!

上一回开始对于gpio-keys的核心功能与架构进行详细解析,讲了设备树(DTS)相关配置,本回继续沿着流程往下进行解析。

二、详细解析

2. gpio-keys的platform驱动

前文书已经讲过,gpio-keys驱动基于input子系统及平台架构(platform_bus、platform_driver、platform_device),其主文件为<Linux内核源码根目录>/drivers/input/keyboard/gpio_keys.c。

先来看gpio_keys.c的入口代码:

static int __init gpio_keys_init(void) { return platform_driver_register(&gpio_keys_device_driver); } static void __exit gpio_keys_exit(void) { platform_driver_unregister(&gpio_keys_device_driver); } late_initcall(gpio_keys_init); module_exit(gpio_keys_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Phil Blundell <pb@handhelds.org>"); MODULE_DESCRIPTION("Keyboard driver for GPIOs"); MODULE_ALIAS("platform:gpio-keys");

gpio_keys_device_driver的定义就在上边,代码如下:

static struct platform_driver gpio_keys_device_driver = { .probe = gpio_keys_probe, .shutdown = gpio_keys_shutdown, .driver = { .name = "gpio-keys", .pm = &gpio_keys_pm_ops, .of_match_table = gpio_keys_of_match, .dev_groups = gpio_keys_groups, } };

首先重点关注以下一行代码:

.of_match_table = gpio_keys_of_match,

gpio_keys_of_match的定义和初始化代码也在同文件(drivers/input/keyboard/gpio_keys.c)中,如下:

static const struct of_device_id gpio_keys_of_match[] = { { .compatible = "gpio-keys", }, { }, }; MODULE_DEVICE_TABLE(of, gpio_keys_of_match);

设备树通过compatible属性实现与驱动的匹配,反过来也就是,这里的平台驱动(platform_driver)通过成员.of_match_table对应的struct of_device_id gpio_keys_of_match中的compitable字段实现与设备树的匹配。

这里以Linux内核中的arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts(应该是以RK3399为主芯片的香橙派)为例,看一下驱动和设备树是如何对应起来的。

rk3399-orangepi.dts中的对应代码(片段)如下:

keys: gpio-keys { compatible = "gpio-keys"; autorepeat; key-power { debounce-interval = <100>; gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>; label = "GPIO Power"; linux,code = <KEY_POWER>; linux,input-type = <1>; pinctrl-names = "default"; pinctrl-0 = <&pwr_btn>; wakeup-source; }; };

由代码可知,在香橙派中,PA5对应的为按键,使用了gpio-keys驱动。

再举一例,以笔者最近使用的米尔电子T113开发板为例,看一下其中的gpio-keys的相关代码,在device/config/chips/t113_i/configs/myir_image_yt113i/linux-5.4/board.dts中,如下所示:

gpio-keys { compatible = "gpio-keys"; status = "okay"; vol-down-key { gpios = <&pio PE 1 GPIO_ACTIVE_LOW>; linux,code = <114>; label = "user key"; debounce-interval = <10>; wakeup-source = <0x1>; }; };

由代码可知,在米尔开发板中,PE1为按键,使用了gpio-keys驱动。米尔开发板这部分的原理图如下:

更多内容请看下回。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:08:19

【MCP Tool Calling Agent 开发实战】从零构建高效 AI 代理

文章目录目录引言MCP 概述&#xff1a;为什么选择 MCP 构建 Tool Calling Agent&#xff1f;环境安装与项目设置Prerequisites构建 MCP Server 和 Tool实战&#xff1a;集成数据库查询工具文件系统资源集成集成 LLM 与 Agent 开发代码执行优化&#xff1a;Anthropic风格实战示例…

作者头像 李华
网站建设 2026/4/20 9:02:24

UG NX 光顺曲线串合并G1相切线

在 UG NX 中&#xff0c;将多条曲线光顺地合并成一条满足 G1 连续性&#xff08;切线连续&#xff09;的曲线&#xff0c;是进行高质量曲面建模的基础。核心概念&#xff1a;G1 连续性 G1 连续性意味着在两条曲线的连接点处&#xff0c;不仅位置重合&#xff0c;且切线方向相同…

作者头像 李华
网站建设 2026/4/20 13:48:56

论文相似度过高?五个实用技巧帮你高效优化文本内容

科学研究证实&#xff0c;全球变暖与极端气候事件频发具有显著关联性&#xff0c;量化分析显示环境温度升高会直接导致异常天气现象发生概率大幅提升。 首先&#xff0c;咱们聊聊人工降重的基本功 根据最新调研数据&#xff0c;近年来人工智能技术呈现出迅猛的发展态势&#…

作者头像 李华
网站建设 2026/4/19 13:40:16

学术研究加速器:9款AI写作工具从初稿到终稿实测

在学术论文撰写过程中&#xff0c;开题报告与正文的高效完成是研究者常见的难题。传统人工撰写模式虽然灵活性较高&#xff0c;但存在效率瓶颈&#xff0c;而现代人工智能技术能够实现内容的快速生成、重复率控制以及文本逻辑优化。实验数据显示&#xff0c;对9种主流智能写作平…

作者头像 李华
网站建设 2026/4/20 19:46:13

强烈安利!10款AI论文平台测评,本科生毕业论文必备

强烈安利&#xff01;10款AI论文平台测评&#xff0c;本科生毕业论文必备 2026年AI论文平台测评&#xff1a;为何值得一看&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文平台逐渐成为本科生撰写毕业论文的重要辅助工具。然而&#xff0c;面对市场上琳琅满目的选择…

作者头像 李华
网站建设 2026/4/23 12:36:36

9大AI写作工具横向对比:覆盖学术论文全周期的高效解决方案

学术论文写作中&#xff0c;开题报告与正文撰写往往面临效率挑战。相比传统人工写作的灵活性优势&#xff0c;AI技术显著提升了文本生成速度、重复率管理和逻辑结构优化能力。研究表明&#xff0c;通过对9类主流智能写作平台的评估&#xff0c;合理使用AI工具可提升学术创作效率…

作者头像 李华