综合能力训练:在树莓派上动手写一个小OS(5):实验16-4:中断实验

本文介绍了如何在树莓派上进行中断实验,以ARM Core的generic timer为中断源,涉及ARM64汇编、异常等级处理、中断处理流程等内容。实验目标包括熟悉ARM64汇编、中断处理和树莓派系统定时器的使用。通过实验步骤,指导读者在树莓派3B和4B上实现和测试中断处理程序。

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

本文节选自《实验指导手册》第二版第16.6章
实验指导手册是奔跑吧Linux内核入门篇第二版配套实验书,pdf版本已经release,可以免费下载和自由打印!
下载方法:
登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。

本文是《奔跑吧Linux内核 入门篇》第二版中第16章的实验16-4:中断实验。在实现操作系统基本功能之前,我们先实现中断处理功能,我们以树莓派上ARM Core里面的generic timer为中断源,把中断这条路径先打通,以后在做进程创建和进程切换的时候也是需要用的,可以作为时钟中断来使用。

1.实验目的

1)了解和熟悉ARM64汇编语言。
2)了解和熟悉ARM64的异常等级处理。
3)了解和熟悉ARM64的中断处理流程。
4)了解和熟悉树莓派中系统定时器(system timer)的用法。

2.实验要求

1)在boot.s中实现对ARM64异常向量表的支持。
2)将树莓派中的系统定时器作为中断源,编写中断处理程序,每当有定时器中断到来时输出“Timer interrupt occured”。

3.实验详解

本实验对初学者有一定难度,读者需要熟悉如下几个方面。

  • ARMv8体系结构中的中断处理过程。

  • 树莓派3B以及树莓派4B上的中断控制器。

  • 树莓派上的定时器外设

  • ARMv8上的generic timer

  • 中断上下文保存与恢复

3.1 中断处理过程

ARM64处理器核心一般都有两个和中断相关的管脚:nIRQ 和 nFIQ,并且是每个处理器核心都有一对这样的管脚。

另外,PSTATE状态中有两个比特位和中断相关:

  • I:用来屏蔽IRQ中断

  • F:用来屏蔽FIQ中断

下图是ARM64处理器发生中断的处理流程。

3.2 树莓派上的中断控制器

ARM公司提供了标准的GIC控制器,例如树莓派4b上支持GIC-400,树莓派3b上支持传统的中断方式(legacy interrupt)。

树莓派4b上提供和支持两种中断控制器,而树莓派3b只支持传统的中断控制器。

  • GIC-400 (默认)

  • 传统的中断控制器(legacy interrupt controller)

树莓派3b和4b支持多种中断源,如图所示。

  • ARM Core N:ARM Core本身的中断源,例如Core里面的generic timer

  • ARMC:可以被VPU和CPU访问的中断源,例如mailbox等

  • ARM_LOCAL:只能被CPU访问的中断源,例如本地timer等

下面这个图是树莓派传统中断控制器的路由情况。

从图上可以看到,ARM core N和ARM_LOCAL的中断都会路由到ARM_LOCAL routing的硬件单元,而ARMC中断会被路由到ARMC routing的硬件单元。
下面这个图是中断状态的路由情况。

中断状态寄存器 路由过程:

  • 先读SOURCEn中断状态寄存器

  • SOURCEn寄存器 bit 8 是否置位,若置位,读取PENDING2寄存器

  • 若PENDING2的bit24置位,则读PENDING0寄存器

  • 若PENDING2的bit25置位,则读PENDING1寄存器

树莓派4b上还支持GIC-400的中断控制器,这个留给读者自己去学习。

3.3  ARM Core的generic timer
我们以ARM core上的generic timer为例来说明,如何在树莓派上使用timer中断。
Cortex-A72支持4个ARM Core的generic timer:

  • CNT_PS_IR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值