Linux中断子系统分析之(一):整体架构

Linux中断子系统分析之(一):整体框架
Linux中断子系统分析之(二):通用的中断处理
Linux中断子系统分析之(三):irq domain
Linux中断子系统分析之(四):驱动程序申请中断

中断的硬件框架

处理器一般只有两根左右的中断引脚,而管理的外设却很多。为了解决这个问题,现代设备的中断信号线并不是与处理器直接相连,而是与一个称为中断控制器的设备相连接,后者才跟处理器的中断引脚直接连接。一个中断硬件组成架构的示例,如下图:
在这里插入图片描述
中断控制器有的是支持多个CPU,如ARM的GIC、x86的APIC,有的不支持。

在庞大复杂的硬件系统中,外设很多,硬件系统中可能就不止一个中断控制器了,中断控制器可以级联。一个中断级联的硬件框架示例,如下图:
在这里插入图片描述
Linux的中断子系统的软件框架图如下所示:
在这里插入图片描述
最上面的driver层,是中断的使用者,使用Linux kernel通用中断处理模块的API。

通用中断处理层,是硬件代码无关,抽象了一套数据结构与接口实现irq相关的管理,提供了通用的中断处理函数。

CPU arch相关的中断处理,如异常向量表相关设置、中断上下文的保护与恢复等,和系统使用的具体的CPU arch相关。

中断控制器驱动,实现中断控制器的编程接口,与系统使用的中断控制器相关。

最底层的就是硬件层,包括CPU和中断控制器。

基本概念

IRQ number

在Linux kernel中,使用IRQ number标识一个中断,每个IRQ number在系统中是唯一的。当发送中断时,内核可以根据IRQ number找到对应的中断服务例程。这个IRQ number是一个虚拟的interrupt ID,和硬件无关,仅仅是被CPU用来标识一个中断,也被叫做软件中断号。

HW interrupt ID

对于中断控制器而言,它收集了多个外设的中断并向上传递,因此,中断控制器需要对外设中断进行编号。中断控制器使用HW interrupt ID来标识外设的中断。HW interrupt ID也被叫做硬件中断号。

irq domain

在一个硬件相对简单的系统里,只有一个中断控制器,硬件中断号可以直接作为软件中断号,但在一个有中断控制器级联的系统里,就不能这样这么做了。比如控制器A接有一个外设,对应的硬件中断号为1,而控制器B接有的一外设,对应的硬件中断号同样为1,所以需要将硬件中断号映射为软件中断号。面对越来越复杂的系统,Linux中断子系统提供了相应的映射机制,通过irq domain来解决映射的问题。所谓domain,就是领域,范围的意思,也就是说,任何的定义出了这个范围就没有意义了。每个中断控制器都可以连接若干个外设的中断请求(interrupt source),中断控制器会对连接其上的interrupt source进行编号(硬件中断号),但这个编号仅仅限制在本中断控制器,所以每个中断控制器都相当于一个irq domain,irq domain是由中断控制器驱动创建和负责维护的。

中断流控处理

因为各种中断请求的电气特性会有所不同,又或者中断控制器的特性也不同,这会导致以下这些处理也会有所不同:

  • 何时对中断控制器发出ack回应;
  • 对于电平中断触发的中断,mask_irq和unmask_irq的处理,
  • 有些中断控制器需要eoi回应,有些不用;

这叫做中断的流控处理。
为此,通用中断子系统把几种常用的流控类型进行了抽象,并为它们实现了相应的标准函数。
目前的通用中断子系统实现了以下这些标准流控回调函数:

  • handle_simple_irq 用于简易流控处理;
  • handle_level_irq 用于电平触发中断的流控处理;
  • handle_edge_irq 用于边沿触发中断的流控处理;
  • handle_fasteoi_irq 用于需要响应eoi的中断控制器;
安装Docker安装插件,可以按照以下步骤进行操作: 1. 首先,安装Docker。可以按照官方文档提供的步骤进行安装,或者使用适合您操作系统的包管理器进行安装。 2. 安装Docker Compose插件。可以使用以下方法安装: 2.1 下载指定版本的docker-compose文件: curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose 2.2 赋予docker-compose文件执行权限: chmod +x /usr/local/bin/docker-compose 2.3 验证安装是否成功: docker-compose --version 3. 在安装插件之前,可以测试端口是否已被占用,以避免编排过程中出错。可以使用以下命令安装netstat并查看端口号是否被占用: yum -y install net-tools netstat -npl | grep 3306 现在,您已经安装Docker安装Docker Compose插件,可以继续进行其他操作,例如上传docker-compose.yml文件到服务器,并在服务器上安装MySQL容器。可以参考Docker的官方文档或其他资源来了解如何使用DockerDocker Compose进行容器的安装和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Docker安装docker-compose插件](https://blog.youkuaiyun.com/qq_50661854/article/details/124453329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Docker安装MySQL docker安装mysql 完整详细教程](https://blog.youkuaiyun.com/qq_40739917/article/details/130891879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值