预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Linux可加载内核模块剖析 2.6内核透视图 M.TimJones是一名嵌入式固件架构师,同时也是ArtificialIntelligence:ASystemsApproach,GNU/LinuxApplicationProgramming(第二版)、AIApplicationProgramming(第二版)和BSDSocketsProgrammingfromaMultilanguagePerspective等书的作者。他的工程背景非常广泛,从同步宇宙飞船的内核开发到嵌入式架构设计,再到网络协议的开发。Tim是位于科罗拉多州Longmont的EmulexCorp.的一名顾问工程师。 简介:Linux®可加载内核模块(从内核的1.2版本开始引入)是Linux内核的最重要创新之一。它们提供了可伸缩的、动态的内核。探索隐藏在可加载模块后面的原理,并学习这些独立的对象如何动态地转换成Linux内核的一部分。 Linux就是通常所说的单内核(monolithickernel),即操作系统的大部分功能都被称为内核,并在特权模式下运行。它与微型内核不同,后者只把基本的功能(进程间通信[IPC]、调度、基本的输入/输出[I/O]和内存管理)当作内核运行,而把其他功能(驱动程序、网络堆栈和文件系统)排除在特权空间之外。因此,您可能认为Linux是一个完全静态的内核,但事实恰恰相反。通过Linux内核模块(LKM)可以在运行时动态地更改Linux。 developerWorks上Tim所著的其他剖析……系列文章 HYPERLINK"http://www.ibm.com/developerworks/cn/linux/l-flash-filesystems/"Linuxflash文件系统剖析 HYPERLINK"http://www.ibm.com/developerworks/cn/linux/l-selinux/"Security-EnhancedLinux(SELinux)剖析 HYPERLINK"http://www.ibm.com/developerworks/cn/linux/l-real-time-linux/"实时Linux架构剖析 HYPERLINK"http://www.ibm.com/developerworks/cn/linux/l-scsi-subsystem/"LinuxSCSI子系统剖析 HYPERLINK"http://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/"Linux文件系统剖析 HYPERLINK"http://www.ibm.com/developerworks/cn/linux/l-linux-networking-stack/"Linux网络栈剖析 HYPERLINK"http://www.ibm.com/developerworks/cn/linux/l-linux-kernel/"Linux内核剖析 HYPERLINK"http://www.ibm.com/developerworks/cn/linux/l-linux-slab-allocator"Linuxslab分配器剖析 HYPERLINK"http://www.ibm.com/developerworks/cn/linux/l-linux-synchronization.html"Linux同步方法剖析 HYPERLINK"http://www.ibm.com/developerworks/cn/views/linux/libraryview.jsp?search_by=Linux+%E5%89%96%E6%9E%90"Tim所著的所有剖析……系列文章 可动态更改是指可以将新的功能加载到内核、从内核去除某个功能,甚至添加使用其他LKM的新LKM。LKM的优点是可以最小化内核的内存占用,只加载需要的元素(这是嵌入式系统的重要特性)。 Linux不是可以进行动态更改的惟一(也不是第一个)单内核。BerkeleySoftwareDistribution(BSD)的变体、SunSolaris、更老的内核(比如OpenVMS),以及其他流行的操作系统(比如Microsoft®Windows®和AppleMacOSX)都支持可加载模块。 剖析内核模块 LKM与直接编译到内核或典型程序的元素有根本区别。典型的程序有一个main函数,其中LKM包含entry和exit函数(在2.6版本,您可以任意命名这些函数)。当向内核插入模块时,调用entry函数,从内核删除模块时则调用exit函数。因为entry和exit函数是用户定义的