Linux驱动中断API总结

功能:
    请求中断
函数原型:
	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,否则返回
	一个负数错误代码。

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值