linux中断下文之软中断(中断三)

编程入门 行业动态 更新时间:2024-10-09 20:30:11

linux中断<a href=https://www.elefans.com/category/jswz/34/1762193.html style=下文之软中断(中断三)"/>

linux中断下文之软中断(中断三)

  软中断对应的中断号不多,一般用在网络设备驱动,块设备驱动当中。

一、概述

  Linux 源码 linux_sdk/kernel/include/linux/interrupt.h 文件中定义了一个枚举类型,用于标识软中断的不同类型或优先级。每个枚举常量对应一个特定的软中断类型。

enum
{HI_SOFTIRQ=0,TIMER_SOFTIRQ,NET_TX_SOFTIRQ,NET_RX_SOFTIRQ,BLOCK_SOFTIRQ,IRQ_POLL_SOFTIRQ,TASKLET_SOFTIRQ,SCHED_SOFTIRQ,HRTIMER_SOFTIRQ, /* Unused, but kept as tools rely on thenumbering. Sigh! */RCU_SOFTIRQ,    /* Preferable RCU should always be the last softirq */NR_SOFTIRQS
};

  每个枚举常量的含义:

HI_SOFTIRQ:高优先级软中断
TIMER_SOFTIRQ:定时器软中断
NET_TX_SOFTIRQ:网络传输发送软中断
NET_RX_SOFTIRQ:网络传输接收软中断
BLOCK_SOFTIRQ:块设备软中断
IRQ_POLL_SOFTIRQ:中断轮询软中断
TASKLET_SOFTIRQ:任务软中断
SCHED_SOFTIRQ:调度软中断
HRTIMER_SOFTIRQ, /* Unused, but kept as tools rely on the numbering. Sigh! */
RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */
NR_SOFTIRQS:表示软中断的总数,用于指示软中断类型的数据

  中断号的优先级越小,代表优先级越高。在驱动代码中,我们可以使用Linux 驱动代码中上述的软中断。
  这里要注意:Linux 内核的开发者并不希望我们添加一个自定义的软中断,如果我们要用软中断,建议使用 tasklet。Linux 内核开发者不建议自定义软中断

二、软中断接口函数

2.1、open_softirq函数

  注册软中断,使用 open_softirq 函数,函数原型如下所示:

void open_softirq(int nr,void (*action)(struct softirq_action *));

  nr: 软中断的编号或优先级。它是一个整数,表示要注册的软中断的标识符。
  action: 指向一个函数的指针,这个函数将作为软中断的处理程序。该函数接受一个structsoftirq_action 类型的参数。

2.2、raise_softirq函数

  触发软中断,使用 raise_softirq 函数,函数原型如下所示:

void raise_softirq(unsigned int nr);

  nr: 软中断的编号或优先级。它是一个整数,表示要注册的软中断的标识符。

2.3、raise_softirq_irqoff函数

  在禁用硬件中断的情况下,触发软中断使用 raise_softirq_irqoff 函数,函数原型如下所示:

void raise_softirq_irqoff(unsigned int nr);

  nr: 软中断的编号或优先级。它是一个整数,表示要注册的软中断的标识符。

更多推荐

linux中断下文之软中断(中断三)

本文发布于:2023-12-03 08:06:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1653024.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:下文   linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!