博客
关于我
Linux中断相关函数
阅读量:504 次
发布时间:2019-03-07

本文共 1393 字,大约阅读时间需要 4 分钟。

request_irq 函数使用说明

函数申请

使用 devm_request_irq 是基于设备树的正式推荐方法。对于传统不支持设备树的内核开发者,可以通过查找 Fayette 的 "irqs.h" 文件获取平台具体中的中断号。支持设备树的内核中,中断号不直接暴露,需通过设备树配置文件获取并映射中断号。

功能概述

request_irq 函数用于申请中断号,注册中断处理函数(handler),并处理相关配置参数。该函数必须与 free_irq 配合使用,确保正确释放占用中的中断号。

功能参数

  • unsigned int irq:申请的硬件中断号。在支持设备树的内核中,需通过 device tree 获取实际使用的中断号。
  • irq_handler_t handler:系统注册的中断处理函数,需在处理完毕后返回 IRQ_HANDLED
  • unsigned long flags:中断处理属性,建议根据具体中断特性选择。支持 flags 值包括 IRQF_SHARED(多个设备共享中断)、IRQF_SAMPLE_RANDOM(有助于随机数生成)等。
  • *const char name:中断名称,通常为设备驱动名称,在 /proc/interrupts 查看确认。
  • *void dev:中断处理函数所关联的设备引用。若不使用,可设为 NULL,但需与 free_irq 对应参数配合使用。

返回值

  • 0:表示申请成功。
  • -EINVAL:参数无效或 handler 函数指针为空。
  • -EBUSY:表示中断号已占用,且不可共享。

使用注意事项

  • 在设备树支持的内核中,勿直接指定硬中断号,需通过 devicetree 映射获取。
  • 设备树中,中断号的获取需注意共享与私有中断的区别。如例子中,i2c0 的中断号为 89,设备树中 interrupt 节点给出的值为 57,需加上 32(共享中断)或 16(私有中断)。

驱动代码示例

static int i2c_probe(struct platform_device *pdev) {    struct device_node *node;    int irq;    node = pdev->node;    irq = platform_get_irq(pdev, 0);    if (irq < 0) {        dev_err(&pdev->dev, "failed to get IRQ number");        return 0;    }    if (request_irq(irq, i2c0_int_irq_handler, IRQF_SHARED, "i2c0-test", &pdev->dev)) {        printk(KERN_DEBUG "request irq failed\n");        return 0;    }    return 0;}

使用建议

  • 设备树支持内核:建议优先使用 irq_desc 数据结构,获取平台具体的中断号。
  • 传统内核处理:对于不支持设备树的内核,仍需手动查找中断号配置文件,或参考底板文档。
  • 中断处理优化:在处理函数中尽量减少延迟,避免占用CPU资源。
  • 通过遵循上述使用规范和注意事项,可以顺利申请和管理硬中断号,确保设备正常运行。

    转载地址:http://umvjz.baihongyu.com/

    你可能感兴趣的文章
    MySQL集群解决方案(4):负载均衡
    查看>>
    mysql颠覆实战笔记(八)--mysql的自定义异常处理怎么破
    查看>>
    MySQL高级-MySQL并发参数调整
    查看>>
    MySQL高级-视图
    查看>>
    MySQL:判断逗号分隔的字符串中是否包含某个字符串
    查看>>
    Nacos在双击startup.cmd启动时提示:Unable to start embedded Tomcat
    查看>>
    Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    Nacos配置中心集群原理及源码分析
    查看>>
    nacos配置自动刷新源码解析
    查看>>
    Nacos集群搭建
    查看>>
    nacos集群搭建
    查看>>
    Navicat for MySQL 查看BLOB字段内容
    查看>>
    Neo4j电影关系图Cypher
    查看>>
    Neo4j的安装与使用
    查看>>
    Neo4j(2):环境搭建
    查看>>
    Neo私链
    查看>>
    nessus快速安装使用指南(非常详细)零基础入门到精通,收藏这一篇就够了
    查看>>
    Nessus漏洞扫描教程之配置Nessus
    查看>>
    Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
    查看>>
    NetApp凭借领先的混合云数据与服务把握数字化转型机遇
    查看>>