快速业务通道

linux中断处理之初始化

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-15
void __init start_kernel(void)

  {

  ……

  //设定系统规定的异常/中断

  trap_init();

  //设置外部IRQ中断

  init_IRQ();

  ……

  }

  在start_kernel中,调用trap_init()来设置系统规定的异常与中断,调用init_IRQ()来设置外部中断.

  void __init trap_init(void)

  {

  ……

  set_trap_gate(0,&divide_error);

  set_intr_gate(1,&debug);

  set_intr_gate(2,&nmi);

  set_system_intr_gate(3, &int3); /* int3-5 can be called from all */

  set_system_gate(4,&overflow);

  set_system_gate(5,&bounds);

  set_trap_gate(6,&invalid_op);

  set_trap_gate(7,&device_not_available);

  set_task_gate(8,GDT_ENTRY_DOUBLEFAULT_TSS);

  set_trap_gate(9,&coprocessor_segment_overrun);

  set_trap_gate(10,&invalid_TSS);

  set_trap_gate(11,&segment_not_present);

  set_trap_gate(12,&stack_segment);

  set_trap_gate(13,&general_protection);

  set_intr_gate(14,&page_fault);

  set_trap_gate(15,&spurious_interrupt_bug);

  set_trap_gate(16,&coprocessor_error);

  set_trap_gate(17,&alignment_check);

  #ifdef CONFIG_X86_MCE

  set_trap_gate(18,&machine_check);

  #endif

  set_trap_gate(19,&simd_coprocessor_error);

  set_system_gate(SYSCALL_VECTOR,&system_call); //系统调用

  ……

  }

  如上所示,设置了0~19的中断/异常处理程序,这些都是intel所规定的,除些之后设置了系统调用入口(用户空间的 int SYSCALL_VECTOR )

  那, set_trap_gate()/set_intr_gate()/set_system_gata()都有一些什么样的区别呢?继续看代码:

  void set_intr_gate(unsigned int n, void *addr)

  {

  _set_gate(idt_table n,14,0,addr,__KERNEL_CS);

  }

  static inline void set_system_intr_gate(unsigned int n, void *addr)

  {

  _set_gate(idt_table n, 14, 3, addr, __KERNEL_CS);

  }

  void __init set_trap_gate(unsigned int n, void *addr)

  {

  _set_gate(idt_table n,15,0,addr,__KERNEL_CS);

  }

  void __init set_system_gate(unsigned int n, void *addr)

  {

  _set_gate(idt_table n,15,3,addr,__KERNEL_CS);

  }

  都是通过统一的接口_set_gate().在i386中,这段代码是用嵌入式汇编完成的,如下所示:

  #define _set_gate(gate_addr,type,dpl,addr,seg)

  do {

  int __d0, __d1;

  __asm__ __volatile__ ("movw %%dx,%%axnt"

  "movw %4,%%dxnt"

  "movl %

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号