从零开始之驱动发开、linux驱动(十、linux的中断初始化流程和基本调用流程分析)

本文深入探讨Linux内核中断处理流程,从usr模式进入中断的步骤,包括中断初始化的各个阶段,如irq_desc数组配置、machine_desc的使用、 vic_init及相关函数的调用,以及中断处理函数的设置和执行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节我们已经对linux中ram的异常处理有了一个大概流程有了一个了解。

本节我们主要来分析中断的处理流程。

正常情况下会有两种情况进入irq模式,一种是从usr模式,另一种是svc模式。

我们这里就以usr模式来分析。

__irq_usr:
	usr_entry                    /* 保存中断上下文 */
	kuser_cmpxchg_check          /* 空函数 */
	irq_handler                  /* 中断 */
	get_thread_info tsk          /* 获取保存当前task的地址 */
	mov	why, #0
	b	ret_to_user_from_irq    
 UNWIND(.fnend		)
ENDPROC(__irq_usr)


__irq_svc:
	svc_entry
	irq_handler

#ifdef CONFIG_PREEMPT        /* 没定义 */
	get_thread_info tsk
	ldr	r8, [tsk, #TI_PREEMPT]		@ get preempt count
	ldr	r0, [tsk, #TI_FLAGS]		@ get flags
	teq	r8, #0				@ if preempt count != 0
	movne	r0, #0				@ force flags to 0
	tst	r0, #_TIF_NEED_RESCHED
	blne	svc_preempt
#endif

	svc_exit r5, irq = 1			@ return fr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的小刺猬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值