第三步:初步建立中断异常处理机制

建立中断异常处理机制,主要就是对8259A的初始化,建立中断描述符表。因为要对十来个已定义的异常进行处理,再加上16个外部中断的处理,代码量就显得很庞大了。

因为一时间也想不出更好的处理方案,所以就照搬《自己动手写操作系统》里的那一套方法用着先……

 

具体的初始化流程为:

 kernel -> init_prot() 

     //在 init_prot()  调用init_8259A(),对8259A进行初始化,与以前的代码一样的,只是换成了c形式了。

     //调用init_8259A()后 就是重复init_idt_desc()函数对ide表进行初始化话,前十多个是异常处理,后16个是外部中断处理,最后是自定义中断

     //值得注意的是为外部中断处理函数建立了一个函数处理表,如此可以在之后灵活的设置修改中断的最终处理函数。

 

建立中断异常处理机制后(尽管是最简单的),就可以对其进行简单测试。

在kernel.c的main函数里,分别取消以下三个异常测试项的注释符,就可以看到异常信息显示在屏幕上。

  //测试异常
  //int 3        //测试调试断点异常
  //jmp 0x40:0   //测试常规保护错误异常
  //ud2            //测试无效操作码异常

 

对外部中断的测试:

  //测试外部中断
  //enable_irq(KEYBOARD_IRQ);  //开键盘中断
  //enable_irq(CLOCK_IRQ);  //开时钟中断

 

注意:因为一下子添加了很多代码,超出了最初在boot.c里设定加载4个扇区大小内核到内存的限制,因此需要将加载的扇区数调大一些……

 

code:kernel.c(改)

 

 

code:klib.h(新)

 

code:klib.c(新)

 

code:i8259.h(新)

 

code:i8259.c(新)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值