词条 | LInux内核分析及编程 |
释义 | 基本信息作 者:倪继利 著 丛 书 名:出 版 社:电子工业出版社ISBN:9787121015182 出版时间:2005-09-01 版 次:1 页 数:822 装 帧:平装 开 本:16开 所属分类:图书 > 计算机与互联网 > 编程语言与程序设计 内容简介本书作者在整理自己多年研发笔记的基础上,以精心挑选的典型开发实例,向读者详细讲述了Linux内核源代码的各部分结构、原理及组成框架,主要分析了Linux最新版本(2.6.11)的内核源代码,帮助读者深入理解Linux内核,精通Linux内核编程。全书分为20章,内容包括进程管理、进程间通信、内存管理、文件系统、I/O接口及资源管理、内核的编译及调试原理、网络通信、内核安全、USB驱动程序等。 对于想了解Linux开发,以及从事Linux内核编程的开发人员来说,本书是一本集大成之作,它既有讲解透彻的原理,也有详细实用的示例,更有作者多年从事实际开发工作的心得。本书主要针对从事Linux内核编程的中高级读者及软件工程师,也很合适作为大学教材和参考书。 目录第1章数据类型及链表1 1.1数据类型所占空间1 1.2有关移植性的其他问题3 1.2.1时间间隔3 1.2.2页面大小3 1.2.3字节存储顺序3 1.2.4数据对齐4 1.3内核通用链表4 1.3.1hlist哈希链表7 1.3.2RCU操作保护的链表8 1.4AT&T的汇编格式9 1.5内核中的时间延迟11 第2章进程及进程调度13 2.1进程结构13 2.2进程创建24 2.2.1对象缓存的分配24 2.2.2系统调用sys_fork25 2.3内核线程26 2.4工作队列27 2.4.1工作队列的结构及宏定义28 2.4.2工作队列的建立29 2.5进程调度33 2.5.1runqueue结构34 2.5.2进程调度初始化36 2.5.3负载平衡的启动38 2.5.4负载平衡的方法42 2.5.5函数schedule分析46 2.5.6调度器的实时性能51 2.6Linux内核抢占51 第3章内核同步机制55 3.1内核中的互斥机制55 3.1.1自旋锁55 3.1.2原子操作59 3.1.3信号量60 3.2RCU64 3.2.1RCU原理介绍64 3.2.2RCU应用实例66 3.2.3RCU相关数据结构67 3.2.4内核RCU机制的建立68 3.2.5RCU回调处理73 3.3内核与用户空间的通信机制74 3.3.1热插拔操作74 3.3.2内核发消息到用户空间通信机制75 3.3.3内核空间调用用户空间程序78 第4章内存管理81 4.1内存地址类型和内存保护82 4.1.1地址类型82 4.1.2内存保护83 4.280386的段页式管理机制84 4.2.1描述符及分段84 4.2.2物理内存分页机制85 4.3IA-64Linux地址空间划分86 4.4进程的内存组织88 4.4.1内存管理的数据结构88 4.4.2VMA在/proc文件系统中的显示90 4.5虚拟内存管理91 4.5.1大容量对象缓存91 4.5.2内存映射94 4.5.3物理内存的反向映射110 4.5.4虚拟内存的加锁和保护113 4.6物理内存管理114 4.6.1物理内存的结构114 4.6.2物理页位图116 4.6.3物理内存的初始化过程117 4.6.4物理页面的分配和回收121 4.6.5缓存及slab125 4.6.6缓存分配的应用129 4.6.7分配缓存函数的分析129 4.6.8交换空间135 4.6.9请页机制137 4.6.10守护进程kswapd139 4.6.11内存管理相关的高速缓存144 4.6.12内存缓冲池144 4.6.13大块内存页147 第5章虚拟文件系统149 5.1VFS的超级块.dentry和节点结构150 5.2与进程联系的文件系统相关结构153 5.3系统有关操作函数集的结构155 5.3.1super_operations155 5.3.2inode_operations156 5.3.3file_operations156 5.3.4dquot_operations157 5.4文件系统的建立过程157 5.5文件系统的注册.安装与卸载159 5.5.1文件系统的注册159 5.5.2文件系统的安装与卸载160 5.6文件系统的系统调用过程160 5.6.1系统调用open161 5.6.2read系统调用170 5.7文件系统的各种缓存172 5.7.1块缓存buffer172 5.7.2inode缓存182 5.7.3目录条目dentry缓存185 5.8缓存同步操作——sys_sync系统调用189 5.8.1多个节点同步回写操作函数 5.8.1sync_inodes189 5.8.2单个节点同步回写操作函数sync_inodes_sb190 5.8.3节点地址空间数据回写操作函数194 5.8.4块设备节点映射的数据同步回写 5.8.4函数sync_blockdev200 5.9pdflush线程池203 5.9.1pdflush线程池的实现203 5.9.2pdflush线程使用实例 5.9.2——wakeup_bdflush206 5.10限额机制207 第6章EXT2文件系统208 6.1EXT2文件系统的几个数据结构210 6.1.1EXT2超级块210 6.1.2EXT2超级块信息结构211 6.1.3超级块的操作函数结构212 6.1.4EXT2的索引节点inode212 6.1.5EXT2文件系统的节点信息结构214 6.1.6节点操作函数结构215 6.1.7文件操作函数结构215 6.1.8EXT2文件系统的组描述符215 6.2EXT2文件系统建立过程215 6.3ext2_read_inode函数分析220 6.4ext2_write_inode函数分析221 6.5文件的读写223 6.6文件扩展时的数据块分配策略228 6.7EXT2的目录项及文件的定位234 6.8链接文件237 第7章其他文件系统238 7.1ramfs内存文件系统238 7.1.1ramfs文件系统模块初始化238 7.1.2ramfs文件系统操作函数集240 7.1.3文件读写操作240 7.1.4目录及节点操作函数集241 7.2/proc文件系统242 7.2.1/proc文件系统在调试中的作用243 7.2.2/proc文件系统实现分析245 7.2.3在/proc中读写设备信息示例250 7.3VFAT文件系统255 7.3.1FAT文件系统的组成255 7.3.2引导记录区DBR及定义256 7.3.3FAT文件系统结构定义260 7.3.4VFAT文件系统的注册超级块261 7.3.5超级块操作函数集的实现264 7.3.6目录操作函数集265 7.4Devfs文件系统270 7.5sysfs文件系统275 7.5.1内核对象相关结构276 7.5.2sysfs文件系统的建立过程277 7.5.3sysfs提供给对象模型的调用函数278 7.5.4sysfs建立bus子系统280 7.5.5bus子系统的接口函数282 7.5.6在sysfs中建立pci目录示例283 第8章I/O端口资源管理288 8.1I/O资源的描述288 8.1.1内存屏障289 8.1.2资源管理函数290 8.2中断处理295 8.2.1硬件提供的中断机制295 8.2.2Linux的中断处理297 8.2.3中断向量的设置和相关数据的 8.2.3初始化298 8.2.4中断处理全过程299 8.2.5tasklet机制303 8.2.6中断处理在/proc文件系统中的报告311 8.2.7并口中断处理程序示例311 8.3DMA315 8.3.1DMA控制器硬件结构315 8.3.2DMA通道使用的地址316 8.3.3DMA操作函数317 8.3.4DMA映射318 8.3.5DMA池321 8.3.6一个简单的使用DMA例子324 8.4电源管理325 8.4.1ACPI规范介绍326 8.4.2ACPI的一些基本概念328 8.4.3ACPI的运行329 8.4.4ACPI驱动程序分析332 8.4.5pci的ACPI电源管理的实现337 8.4.6APM电源管理模式341 第9章模块机制348 9.1简单模块示例348 9.2内核空间和用户空间349 9.2.1处理器保护级349 9.2.2用户空间和内核空间权限350 9.2.3用户空间和内核空间范围及函数 9.2.3参数传递350 9.2.4内核态和用户态之间数据传递352 9.3模块的使用过程353 9.4实现机制354 9.4.1模块在/proc文件系统中的显示354 9.4.2模块结构354 9.4.3模块数据宏操作356 9.4.4实现函数的分析359 9.5modutils介绍369 第10章设备驱动程序371 10.1设备文件及设备访问方式372 10.1.1轮询与中断372 10.1.2直接内存访问(DMA)372 10.1.3设备驱动使用内存372 10.1.4设备文件及接口372 10.2设备驱动程序模型374 10.2.1驱动模型中的描述结构374 10.2.2驱动程序向新的模型上迁移383 10.2.3即插即用386 10.2.4文件系统中与设备驱动相关 10.2.4的结构389 10.3字符设备操作过程390 10.4块设备伪文件系统393 10.4.1块设备文件系统初始化393 10.4.2文件操作函数集394 10.5通用硬盘GENHD398 10.6通用块层403 10.6.1bio相关结构404 10.6.2bio_vec池405 10.6.3碎片链表406 10.6.4请求及请求队列结构407 10.6.5通用的命令标志请求410 10.6.6I/O调度器411 10.7块设备的读写请求队列及提交过程415 10.7.1初始化块设备的请求队列415 10.7.2块设备读写请求的传递过程417 10.8IOCTL设备控制操作423 10.9编写设备驱动程序的基本步骤425 10.9.1如何添加一个字符设备425 10.9.2如何添加一个块设备425 第11章FLASH闪存及SD/MMC卡设备 第11章驱动程序427 11.1MTD内存技术设备427 11.1.1MTD内存技术设备层次结构428 11.1.2设备层和原始设备层的函数 11.1.2调用关系430 11.1.3MTD相关结构430 11.1.4MTD块设备初始化432 11.1.5MTD块设备的读写操作439 11.1.6MTD核心初始化442 11.1.7MTD字符设备443 11.1.8具体flash芯片的探测及映射444 11.1.9驱动程序实例分析447 11.2SD/MMC卡块设备驱动程序449 11.2.1MMC抽象设备层相关结构449 11.2.2MC抽象设备层MMC块设备 11.2.2驱动程序453 11.2.3具体MMC控制器驱动程序示例462 第12章Linux系统初始化468 12.1BootLoader468 12.1.1PC的BootLoader468 12.1.2嵌入式系统BootLoader473 12.2Linux内核启动过程478 第13章系统调用481 13.1设定0x80号中断481 13.2系统调用现场保护482 13.3Linux系统调用的流程484 13.3.1系统调用过程484 13.3.2中断INT0x80入口处理484 第14章Linux网络系统分层结构488 14.1Linux网络系统分层结构488 14.2数据包结构489 14.2.1msghdr结构489 14.2.2socket结构490 14.2.3sk_buff结构及管理490 14.2.4sock结构495 14.3sockfs文件系统497 14.4利用socket通信499 14.4.1socket层500 14.4.2IP层收发数据包函数506 14.4.3网络核心层513 14.5网卡驱动程序525 14.5.1NAPI525 14.5.28139CP网卡驱动程序526 14.6netlink533 14.6.1内核netlink调用函数535 14.6.2示例536 第15章执行文件的运行过程544 15.1动态链接与静态链接544 15.2位置无关代码(PIC)的汇编 15.2语言编程548 15.3可执行文件格式550 15.3.1a.out文件格式分析550 15.3.2COFF文件格式分析551 15.3.3ELF文件格式分析552 15.3.4符号的重定位557 15.3.5ELF文件加载过程558 15.4可执行文件加载代码分析559 第16章进程间通信567 16.1管道567 16.2消息队列575 16.2.1消息队列结构575 16.2.2消息队列文件系统576 16.2.3消息队列系统调用函数579 16.3共享内存585 16.3.1共享内存相关结构586 16.3.2tmpfs文件系统587 16.3.3共享内存系统调用593 16.4信号599 16.4.1信号相关的结构600 16.4.2设置信号响应601 16.4.3信号分发603 16.4.4信号响应607 16.5用户空间信号量操作610 16.5.1信号量相关结构610 16.5.2系统调用函数的实现611 第17章Linux的安全策略618 17.1Linux常用安全技术618 17.1.1PAM机制618 17.1.2入侵检测系统618 17.1.3加密文件系统619 17.1.4安全审计620 17.1.5基于ACL的自主访问控制620 17.1.6强制访问控制621 17.1.7防火墙621 17.2Linux能力机制621 17.3Flask安全体系结构概述622 17.4SELinux安全策略配置语言624 17.4.1基本概念625 17.4.2Linux与SELinux在安全管理 17.4.2上的区别626 17.4.3安全模型626 17.4.4策略语言及配置样例626 17.5SELinux的内部结构634 17.6SELinux的实现636 17.6.1任务的安全管理637 17.6.2AVC分析640 17.6.3security_compute_av函数644 17.7策略库的结构647 17.7.1sidtab结构648 17.7.2symtab结构649 17.7.3avtab结构649 17.7.4class_datum结构649 17.7.5role_datum结构650 17.7.6user_datum结构651 17.7.7role_tran结构651 17.7.8cond_node结构652 17.8安全审计的管理653 17.9sel_fs文件系统654 17.10防火墙660 17.10.1Netfilter框架661 17.10.2iptables管理工具662 17.10.3Netfilter例子663 第18章内核配置与编译664 18.1配置文件的生成664 18.2配置语言665 18.3主Makefile分析667 18.3.1主Makefile中的分析667 18.3.2嵌入式内核的交叉编译671 18.4Rule.make及子目录编译673 18.4.1编译选项变化引起增量编译673 18.4.2子目录的编译673 18.4.3Rule.make分析674 18.4.4驱动程序配置示例680 第19章Linux内核调试683 19.1strace命令683 19.2oops消息分析683 19.3调试工具684 19.4printk打印调试688 19.4.1printk688 19.4.2如何记录消息689 19.4.3sys_syslog系统调用690 19.4.4printk函数分析692 19.4.5控制台694 19.4.6tty代码分析695 19.4.7tty_register_ldisc函数701 19.5ptrace调试跟踪702 19.5.1调试寄存器702 19.5.2TSS中的调度陷阱704 19.5.3INT3704 19.5.4程序的单步执行705 19.5.5ptrace系统调用705 19.5.6系统调用跟踪710 19.5.7调试陷阱处理711 19.5.8调试器运行方法712 第20章USB总线驱动程序715 20.1USB的拓朴结构715 20.2USB2.0协议717 20.2.1包标志符及传输控制概述717 20.2.2总线枚举718 20.2.3USB设备请求719 20.2.4描述符719 20.2.5OTG规范720 20.3USB总线驱动程序结构722 20.3.1USB主机驱动程序的体系722 20.3.2USB驱动程序的编写723 20.3.3设备结构间的关系725 20.4USB驱动程序初始化727 20.5usbfs文件系统729 20.5.1usbfs文件系统初始化729 20.5.2usbfs文件操作731 20.6USB请求块(URB)732 20.6.1URB结构732 20.6.2URB的操作733 20.7同步消息处理735 20.7.1同步请求完成模型736 20.7.2控制与查询737 20.8用主机控制器驱动层(HCD层)737 20.8.1USB总线的注册与注销738 20.8.2HCD操作函数739 20.8.3注册根集线器741 20.9集线器Hub741 20.9.1Hub初始化742 20.9.2Hub设备的各种事件处理744 20.9.3ehci-hcd控制器752 20.10USB大存储设备758 20.10.1Bulk-Only传输协议759 20.10.2SCSI体系结构模型及命令描述块761 20.10.3大存储类主机驱动程序765 20.11USB从设备驱动程序(Gadget)779 20.11.1Gadget相关结构781 20.11.2GadgetAPI783 20.11.3pxa2xx控制器786 20.11.4gadgetfs文件系统794 20.11.5大存储设备驱动程序804 附录ALinux系统调用819 主要参考文献823 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。