1. 项目概述
在嵌入式系统开发中,中断机制是实现高效硬件事件响应的核心技术。本文将以RK3568平台为例,详细讲解Linux中断驱动的完整开发流程,从设备树配置到内核驱动实现,再到HAL层适配和安卓应用开发,构建一个完整的按键中断处理系统。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 中断机制基础
2.1 中断的本质与优势
中断是CPU响应硬件事件的机制,它允许外设在需要时主动通知处理器,而不是让处理器不断轮询检查状态。这种机制带来了三大核心优势:
- 资源利用率高:CPU仅在事件发生时被唤醒,其余时间可处理其他任务或进入低功耗状态
- 响应实时性强:中断触发到处理的延迟通常在微秒级别
- 系统扩展性好:新增外设不会显著增加CPU负载
2.2 Linux中断处理架构
Linux内核将中断处理分为两个关键部分:
上半部(Top Half)
- 立即响应的硬中断处理
- 执行时间必须极短(通常<100μs)
- 禁止睡眠或调用可能导致睡眠的函数
- 典型操作:清除中断标志、记录时间戳、调度下半部
下半部(Bottom Half)
- 延迟执行的软中断处理
- 可进行较耗时的操作(如数据处理、用户空间通信)
- 允许调用可能睡眠的函数
- 实现方式:工作队列(workqueue)、软中断(softirq)、任务队列(tasklet)
3. 硬件准备与设备树配置
3.1 硬件连接方案
使用RK3568开发板的GPIO0_A1引脚连接机械按键:
- 按键一端接GPIO0_A1
- 另一端接GND
- 内部上拉电阻确保默认高电平
按键状态检测原理:
- 按下时:GPIO接地,电平由高变低(下降沿)
- 释放时:GPIO恢复高电平(上升沿)
3.2 设备树节点配置
dts复制/ {
my_key_irq: key_irq@0 {
compatible = "my-key,irq";
status = "okay";
key-gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&key_irq
