c6x Linux 内核中断分析

本文深入探讨了C6x处理器中Linux内核中断的处理,包括硬件中断、软中断的定义,中断处理过程,中断处理程序的结构及中断向量表的实现。介绍了中断子程序的生成,以及c6x_do_IRQ函数在中断处理流程中的作用,解析了中断处理数据结构和中断处理函数的注册与执行机制。

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

 

 

1. 内核中断介绍

 

1.1 中断简介

 

所有支持Linux的平台都采用了中断(interrupt)的概念,以便(因种种原因)引入周期性的中断。需要区分两种类型的中断。

 

1. 硬件中断(hardware interrupt):由系统自身和与之连接的外设自动产生。它们用于支持更高效地实现设备驱动程序,也用于引起处理器自身对异常或错误的关注,这些是需要与内核代码进行交互的。 

 

2. 软中断(SoftIRQ):用于有效实现内核中的延期操作。 

 

在Linux中用于处理中断和系统调用相关部分的代码中,汇编和C代码交织在一起, 以解决C语言无法独立处理的一些特殊问题。在中断处理中涉及到许多C代码和底层的硬件交互代码。

 

在C6678处理器上,硬件中断的最大数目通常是15,这个值可不怎么大,还有考虑到有些中断编号已经永久性地分配给了标准的系统组件(键盘、定时器等),因而限制了可用于其他外部设备的中断编号数目。

 

外设可共享同一个中断号这个现象称为中断共享(interrupt sharing)。但必须硬件和内核同时支持才能使用共享中断,因为必须要识别出中断来源于哪个设备。

 

1.2 中断处理

 

在CPU得知发生中断后,它将进一步的处理委托给一个软件例程,该例程可能会修复故障、提供专门的处理或将外部事件通知用户进程。

 

由于每个中断和异常都有唯一的编号,内核使用一个数组,数组项是指向处理程序函数的指针。相关的中断号根据数组项在数组中的位置判断。

 

▲图1.1 中断处理过程

 

因为需要C语言代码和汇编语言代码之间的交互,所以必须特别小心,才能正确设计在汇编语言层次和C语言层次上的数据交换。对应的代码位于arch/arch/kernel/entry.S中,彻底利用了各个处理器的具体特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值