linux 在中断处理时,要进去SVC模式,请问这到底是什么原因

linux 在中断处理时,要进去SVC模式,请问这到底是什么原因,第1张

对ARM来说,当发生中断的时候,CPU进入的是中断mode, 只是Linux在SVC mode下处理中断了. 当然,理论上来说,不在SVC下,而在 中断mode下处理也可以。我猜想Linux这样做的原因是,Linux要兼容绝大多数的ARCH,每一个ARCH相关的代码都放在arch/目录下,比如ARM是放在arch/arm下。所以,如果arm要是不利用现有Linux的框架,把绝大多数的代码都放在arch/arm下(中断处理的代码也放在arch/arm下的irq mode中处理),那linux就非常臃肿。所以,arm Linux为了最大程度的利用Linux已有的架构,就放在SVC模式下处理了(Linux最早是在i386上开发的,i386只利用了2个ring, 即,ring0 和 ring 3, ring 0,对应于ARM的svc mode)。 事实上,到了现在的ARMV8,AARCH64已经取消了这么多的MODE,而采取了4个Level, 分别是 0,1,2,3. 对于OS来说,支持0和1 两个Level就可以了, Level 2 是用于虚拟化,Level 3 是用于monitor.

当fiq中断发生的时候,也会进入FIQ mode, 只是 在ARM SOC中,很少有FIQ的外设。所以,Linux中,没有对FIQ进行处理,但接口还是有的。

第一:uboot初始化时,要对系统硬件资源进行初始化,就要获取尽量多的权限,以便 *** 作硬件,对硬件进行初始化,从这个角度来说,设置为SVC模式,更有利于工作的开展。

第二:uboot是一种bootloader,目的是为了引导linux的Kernel,在进入Kernel之前,本身就要满足一些条件,其中有一条就是CPU必须是SVC模式。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7334633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存