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

    你可能感兴趣的文章
    Python:调用复制函数时调用 Python 对象时超出了最大递归深度
    查看>>
    Python:这两个 import 语句有什么区别?
    查看>>
    Python:通过串口从 Velleman k8090 读取数据
    查看>>
    python:遍历具有列表值的字典
    查看>>
    Python:降低精度 pandas 时间戳数据帧
    查看>>
    python:非阻塞子进程,检查标准输出
    查看>>
    PythonABC多重继承
    查看>>
    Pythonargparse中的多个参数
    查看>>
    Python关于 *args 和 **kwargs 参数的详解(全)
    查看>>
    Pythonfrozenset散列算法/实现
    查看>>
    PythonGTK+3:通过单击列对树视图进行排序
    查看>>
    pythonnumpy生成二进制流_python/numpy生成的二进制文件,由C读取
    查看>>
    pythonsign函数_对python函数签名的方法详解 用python怎么写一个自签名证书
    查看>>
    PythonStudy
    查看>>
    Pythons__IMPORT__未按预期工作
    查看>>
    Pythont通过request以及BeautifulSoup爬取几千条情话
    查看>>
    pythonweb django的学习
    查看>>
    pythonweb网站开发基础django安装
    查看>>
    pythonweb网站开发基础创建django项目
    查看>>
    pythonweb网站开发基础添加应用
    查看>>