Linux init/main.c 初始化中硬件中断向量初始化 tra(2)

//n为中断向量号,addr中断程序的偏移地址    //&idt[n]对应中断号在中断描述符表中的偏移值    //中断描述符的类型是 14,特权级是 0。    #define set_trap_gate(n,addr) \        _set_gate(&idt[n],15,0,addr)    //设置中断宏函数    //参数:gate_addr -描述符地址;type -描述符中类型域值;dpl -描述符特权层值;addr -偏移地址    // %0 - (由 dpl,type 组合成的类型标志字);%1 - (描述符低 4 字节地址);    // %2 - (描述符高 4 字节地址);%3 - edx(程序偏移地址 addr);%4 - eax(高字中含有段选择符)。    #define _set_gate(gate_addr,type,dpl,addr) \    __asm__ ("movw %%dx,%%ax\n\t" \        "movw %0,%%dx\n\t" \        "movl %%eax,%1\n\t" \        "movl %%edx,%2" \        : \        : "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \        "o" (*((char *) (gate_addr))), \        "o" (*(4+(char *) (gate_addr))), \        "d" ((char *) (addr)),"a" (0x00080000))  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxpfg.html