前言
本文基于S3C2440开发板。
一、Linux 异常的作用
打断cpu的正常运行流程,做一些其他事情,比如中断,未定义指令,之前说的用户程序使用open.read,write等等函数打开字符设备,最终是引起swi异常,也就是软件中断指令,进入内核态,调用我们的驱动程序。
二、异常结构体系
①异常发生的时候,就会停止当前的正常流程,自动跳转到异常向量表。
②异常向量就是一些被安放在固定位置的代码,发生异常时就会自动执行这些固定位置上的指令。
③以中断为例,发生中断后就会跳转到中断向量,执行那些放在固定位置的代码,最后那个位置的代码会调用中断处理的总入口函数asm_do_IRQ
。
④asm_do_IRQ
会根据发生的是什么中断,根据他的中断号调用结构体组中的一个结构体,这个结构体组叫做irq_desc
,使用结构体内的中断处理函数入口handl_irq
。
⑤handl_irq
使用chip结构中的函数来清除,屏蔽或者重新使能中断,清除中断,还逐个调用用户在action注册的中断处理函数,这个chip和action也是irq_desc
结构体里面的一个属性。