traps.c.txt
来自「这是一个牛人的linux学习内核时分析内核的笔记」· 文本 代码 · 共 40 行
TXT
40 行
any questions,send email to netxiong@eyou.com
相关文件
/include/asm-i386/unistd.h
/arch/i386/kernel/entry.S
*****************调用门的初始化***************************
(1)void __init trap_init(void) //主要完成各种调用门的初始化
set_trap_gate(x,&xxxx_xxxx); //陷阱门
……
set_system_gate(SYSCALL_VECTOR,&system_call); //系统调用的入口
**********************************************************
*****************辅助函数**********************************
(1)void set_intr_gate(unsigned int n, void *addr)
_set_gate(idt_table+n,14,0,addr);
(2)static void __init set_trap_gate(unsigned int n, void *addr)
_set_gate(idt_table+n,15,0,addr);
(3)static void __init set_system_gate(unsigned int n, void *addr)
_set_gate(idt_table+n,15,3,addr);
(4)static void __init set_call_gate(void *a, void *addr)
_set_gate(a,12,3,addr);
以上的函数就是设置各种门的函数,他们都调用同一个函数 _set_gate
(5)#define _set_gate(gate_addr,type,dpl,addr)
参数type是类型,12是386调用门,14是386中断门,15是386陷阱门
参数dpl是级别,0是内核级,3是用户级
***********************************************************
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?