易截截图软件、单文件、免安装、纯绿色、仅160KB

linux 2.6源代码情景分析笔记之中断与异常3

初始化中断描述符表
内核启用中断以前,必须把idt表的初始地址装到idtr寄存器,并初始化表中的每一项。这项工作是在初始化系统时完成。
int指令允许用户态进程发出一个中断信号,其值可以是0-255的任意一个向量。因此。为了防止用户通过int指令模拟非法的中断和异常,idt的初始化必须非常小心。这可以通过把中断或者陷阱门描述符的dpl字段设置成0来实现。如果进程试图发出其中的一个中断信号,控制单元将检查出cpl的数值与dpl的字段有冲突,并且产生一个general protection异常。
intel提供了三种类型的中断描述符:任务门,中断门,以及陷阱门描述符。linux使用与inetl不同的细目分类和术语:
中断门(interrupt gate)所有linux中断处理程序都通过中断门激活,全部限制在内核态。
系统门(system gate)用户态的进程可以访问一个intel陷阱门dpl字段为3.通过系统门来激活三个linux异常处理程序,向量是4,5,128.在用户态下,可以发布into,bound,int $0x80三条汇编语言指令。
系统中断门(system interrtup gate)能够被用户态进程访问的intel中断门(门的dpl字段为3)。与向量3相关的异常处理程序是由系统门中断门激活的,在用户态下,可以使用汇编语言指令int3.
陷阱门(trap gate)用户态的进程不能访问一个intel陷阱门(门的dpl字段为0)。大部分linux异常处理程序都通过陷阱门来激活。
任务门(task gate)不能被用户态进程访问的intel任务门(门的dpl字段为0)。linux对“double fault”异常处理程序是由任务门激活的。
下列体系结构相关的函数用来在idt中插入门。
在idt的第n个表项中插入一个中断门。门中的段选择符设置成内核代码的段选择符,偏移量设置为中断处理程序的地址addr,dpl字段设置为0.
void set_intr_gate(unsigned int n, void *addr)
{
        _set_gate(idt_table+n,14,0,addr,__KERNEL_CS);
}
在idt的第n个表项中插入一个陷阱门。门中的段选择符设置成为内核代码的段选择符,偏移量设置为异常处理程序的地址addr,dpl字段设置为3.
static void __init set_system_gate(unsigned int n, void *addr)
{
        _set_gate(idt_table+n,15,3,addr,__KERNEL_CS);
}
在idt的第n个表项插入一个中断门。门中的段选择符设置成内核代码的段选择符,偏移量设置为异常处理程序的地址addr,dpl字段设置为3.
static inline void set_s


相关文档:

实战Linux Bluetooth编程(三) HCI层编程

1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI)  就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......

Linux设备模型之input子系统详解

一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......

袁老谈linux的10年发展

 本世纪第一个十年,即将过去。回顾以往,才能看清现在,我有几句话要说。
      记得,在十年之前,人们只能玩玩美国红帽的 Linux 桌面(特别是 6.2 版本),整天 sudo (即 Super User do ),任凭激情泛滥。到了 2001 年 1 月, Linux 2.4 正式发布,首次支持 USB 和蓝牙技术,以及 ext ......

Linux发送arp请求与接收arp响应

Linux 中获得本机网卡MAC地址很简单,ioctl()就OK。可如何获得局域网其他主机的MAC地址呢…链路层广播ARP请求,然后接收ARP响应。实现介个功能其实已有现成三方库可用,如libnet。不过想加深对协议的理解和Linux网络编程API的理解,jiayi 还是决定用Linux的PF_PACKET自己实现,改啊改,终于成功~以下是大体思路
1. ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号