博客
关于我
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/

    你可能感兴趣的文章
    Nginx 负载均衡与权重配置解析
    查看>>
    Nginx 负载均衡详解
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置https(一)—— 自签名证书
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nginx 配置清单(一篇够用)
    查看>>
    Nginx 配置解析:从基础到高级应用指南
    查看>>
    nginx+php的搭建
    查看>>
    nginx+tomcat+memcached
    查看>>
    nginx+Tomcat性能监控
    查看>>
    nginx+uwsgi+django
    查看>>
    Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
    查看>>
    nginx-vts + prometheus 监控nginx
    查看>>
    Nginx下配置codeigniter框架方法
    查看>>
    Nginx之二:nginx.conf简单配置(参数详解)
    查看>>
    Nginx代理websocket配置(解决websocket异常断开连接tcp连接不断问题)
    查看>>
    Nginx代理初探
    查看>>
    nginx代理地图服务--离线部署地图服务(地图数据篇.4)
    查看>>
    Nginx代理外网映射
    查看>>
    Nginx代理模式下 log-format 获取客户端真实IP
    查看>>