linux中断系列之中断子系统初始化(三)

本文深入探讨Linux内核中针对i386架构的中断子系统的初始化过程,重点关注init_ISA_irqs函数在arch/i386/kernel/i8259.c文件中的实现细节。
摘要由CSDN通过智能技术生成
    linux的中断处理机制主要包括3个方面:
(1) 中断子系统初始化:内核在自身初始化过程中对中断处理机制的初始化,包括中断描述符表的初始化和中断请求队列的初始化等。
(2) 中断或异常处理:一个实际中断或异常的处理过程。
(3) 中断API: 为设备驱动程序提供一组API,包括注册与释放、激活与禁止等函数
本节介绍第一个方面内容.
一、中断描述符表的初始化
1、第一阶段初始化(发生在内核引导过程)
  主要完成两项工作:为IDT(中断描述符表)分配2KB大小的空间(256个中断向量,每个中断向量对应一个8字节的门描述符,并初始化默认值;
                                       存储IDT的起始位置到IDTR寄存器。
  完成IDT初始化后,将EDX和EAX寄存器初始化为:
  EDX:ignore_int地址高16位  默认属性0x8E00
  EAX:段选择符16位          ignore_int地址低16位
  将EDX和EAX作为门描述符的高和低32位
2、第二阶段初始化(发生在内核初始化过程中)
  内核在初始化过程中的start_kernel函数,使用了trap_init和init_IRQ函数进行初始化,第一个完成对系统保留中断向量(异常、非屏蔽中断以及系统调用)的初始化。init_IRQ完成其余中断向量的初始化。
  (1) 调用trap_init函数,它是初始化中断向量为0~19,包括了异常和不可屏蔽中断,所以说所有异常均在在此完成;

      源码如下:       

//gate中断向量,type为门描述符属性(类型)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值