功能:
请求中断
函数原型:
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char * name, void *dev);
参数含义:
irq:要请求的中断号(IRQ number软中断)。
handler:指向中断处理程序的函数指针。
flags:标志位,用于指定中断处理程序的行为和属性,如中断触发方式、中断共享等。
name:中断的名称,用于标识该中断。
dev:指向设备或数据结构的指针,可以在中断处理程序中使用。
返回值:
成功:0 或正数,表示中断请求成功。
失败:负数,表示中断请求失败,返回的负数值表示错误代码。
头文件:
#include <linux/interrupt.h>
功能:
将 GPIO 引脚的编号(GPIO pin number)转换为对应的中断请求号
函数原型:
unsigned int gpio_to_irq(unsigned int gpio);
参数说明:
gpio:要映射的 GPIO 引脚号。(根据具体平台计算)
返回值:
成功:返回值为该 GPIO 引脚所对应的中断号。
失败:返回值为负数,表示映射失败或无效的 GPIO 引脚号。
头文件:
#include <linux/gpio.h>
函数原型:释放中断
void free_irq(unsigned int irq, void *dev_id);
参数说明:
irq:要释放的中断号。
dev_id:设备标识,用于区分不同的中断请求。它通常是在 request_irq 函数中传递的设备特定数据指针
功能:
静态初始化tasklet
初始化状态为使能状态。
#define DECLARE_TASKLET(name,func,data)\
struct tasklet_struct name = { NULL,0,ATOMIC_INIT(0),func,data}
初始化状态为非使能状态。
#define DECLARE_TASKLET_DISABLED(name,func,data) \
struct tasklet_struct name = { NULL,0,ATOMIC_INIT(1),func,data}
参数说明
name 是 tasklet 的名称,func 是 tasklet 的处理函数,data 是传递给处理函数的参数
功能:
动态初始化tasklet
函数原型:
void tasklet_init(struct tasklet_struct *t, void (*func)(unsigned long), unsigned long data);
参数说明:
t 是指向 tasklet 结构体的指针,func 是 tasklet 的处理函数,data 是传递给处理函数的参数
功能:
使能一个已经初始化的 tasklet
函数原型:
void tasklet_disable(struct tasklet_struct *t)
功能:
非使能一个已经初始化的 tasklet
函数原型:
void tasklet_disable(struct tasklet_struct *t);
功能:
调度(触发)一个已经初始化的 tasklet执行
函数原型:
void tasklet_schedule(struct tasklet_struct *t);
功能:
销毁一个已经初始化的 tasklet
函数原型:
void tasklet_kill(struct tasklet_struct *t);
参数说明:
t 是指向 tasklet 结构体的指针。
功能:
初始化共享工作队列
静态初始化:
#define INIT_WORK(_work,_func)
动态初始化:
#define DECLARE_WORK(n, f)
参数:_work(w)工作项,_func(f)工作项的处理函数。
功能:
调度/取消调度工作队列函数
函数原型:
static inline bool schedule_work(struct work_struct *work)
参数:_work(w)工作项
bool cancel_work_sync(struct work_struct *work);
参数:_work(w)工作项
功能:
创建一个工作队列
函数原型:
struct workqueue_struct *create_workqueue(const char *name);
#define create_singlethread_workqueue(name) \ alloc_workqueue("%s", WQ_SINGLE_THREAD, 1, name)
参数:name 是创建的工作队列的名字
功能:
调度工作队列
函数原型:
bool queue_work(struct workqueue_struct *wq, struct work_struct *work);
参数:wq定义的工作队列 work工作项
功能:
取消一个已经调度的工作
函数原型:
bool cancel_work_sync(struct work_struct *work);
参数: work工作项
功能:
将刷新该工作队列中所有已提交但未执行的工作项
函数原型:
void flush_workqueue(struct workqueue_struct *wq);
参数: work工作队列
功能:
删除自定义的工作队列
函数原型:
void destroy_workqueue(struct workqueue_struct *wq);
参数: work工作队列
功能:
静态定义并初始化延迟工作
函数原型:
#define DECLARE_DELAYED_WORK(n,f) struct delayed_work n = { .work = __WORK_INITIALIZER(n.work, (f)) }
功能:
动态定义并初始化延迟工作
函数原型:
#define INIT_DELAYED_WORK(_work, _func) \
do { \
INIT_WORK(&(_work)->work, (_func)); \
(_work)->timer = TIMER_INITIALIZER((_work)->timer, 0, 0); \
} while (0)
参数:n(_work)代表延迟工作的变量名,f(_func)是延迟工作的处理函数。
功能:
调度 延迟工作函数
共享队列
函数原型:
static inline bool schedule_delayed_work(struct delayed_work *dwork,unsigned long delay )
自定义队列
函数原型:
static inline bool queue_delayed_work(struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay)
参数:delay:表示延迟的时间长度,以内核时钟节拍数 jiffies 为单位。
功能:
取消调度
函数原型:
extern bool cancel_delayed_work_sync(struct delayed_work *dwork);
参数:dwork延迟工作的变量名
并发管理工作队列
功能:
创建和分配一个工作队列
函数原型:
struct workqueue_struct *alloc_workqueue(const char *fmt, unsigned int flags, int max_active);
参数:
fmt:指定工作队列的名称格式。
flags:指定工作队列的标志,可以控制工作队列的行为和属性,如 WQ_UNBOUND 表示无绑定的
工作队列,WQ_HIGHPRI 表示高优先级的工作队列等。
max_active:指定工作队列中同时活跃的最大工作项数量。
功能:
中断线程化
函数原型:
int request_threaded_irq(unsigned int irq, irq_handler_t handler,
irq_handler_t thread_fn, unsigned long irqflags, const char *devname, void *dev_id);
参数:
irq:中断号,表示要请求的中断线路。
handler:是在发生中断时首先要执行的处理程序,非常类似于顶半部,该函数最后会返
回 IRQ_WAKE_THREAD 来唤醒中断,一般 handler 设为 NULL,用系统提供的默认处理。
thread_fn:线程化的中断处理函数,非常类似于底半部。如果此处设置为 NULL 则表示
没有使用中断线程化。
irqflags:中断标志,用于指定中断的属性和行为。
devname:中断的名称,用于标识中断请求的设备。
dev_id:设备标识符,用于传递给中断处理函数的参数。
函数返回值:
函数返回一个整数值,表示中断请求的结果。如果中断请求成功,返回值为 0,否则返回
一个负数错误代码。