linux内核分析及编程 倪继利

上传者: zhouyanke | 上传时间: 2022-12-08 10:06:01 | 文件大小: 43.06MB | 文件类型: PDF
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.1 hlist哈希链表 7 1.3.2 rcu操作保护的链表 8 1.4 at&t的汇编格式 9 1.5 内核中的时间延迟 11 第2章 进程及进程调度 13 2.1 进程结构 13 2.2 进程创建 24 2.2.1 对象缓存的分配 24 2.2.2 系统调用sys_fork 25 2.3 内核线程 26 2.4 工作队列 27 2.4.1 工作队列的结构及宏定义 28 .2.4.2 工作队列的建立 29 2.5 进程调度 33 2.5.1 runqueue结构 34 2.5.2 进程调度初始化 36 2.5.3 负载平衡的启动 38 2.5.4 负载平衡的方法 42 2.5.5 函数schedule分析 46 2.5.6 调度器的实时性能 51 2.6 linux内核抢占 51 第3章 内核同步机制 55 3.1 内核中的互斥机制 55 3.1.1 自旋锁 55 3.1.2 原子操作 59 3.1.3 信号量 60 3.2 rcu 64 3.2.1 rcu原理介绍 64 3.2.2 rcu应用实例 66 3.2.3 rcu相关数据结构 67 3.2.4 内核rcu机制的建立 68 3.2.5 rcu回调处理 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.2 80386的段页式管理机制 84 4.2.1 描述符及分段 84 4.2.2 物理内存分页机制 85 4.3 ia-64 linux地址空间划分 86 4.4 进程的内存组织 88 4.4.1 内存管理的数据结构 88 4.4.2 vma在/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 缓存及slab 125 4.6.6 缓存分配的应用 129 4.6.7 分配缓存函数的分析 129 4.6.8 交换空间 135 4.6.9 请页机制 137 4.6.10 守护进程kswapd 139 4.6.11 内存管理相关的高速缓存 144 4.6.12 内存缓冲池 144 4.6.13 大块内存页 147 第5章 虚拟文件系统 149 5.1 vfs的超级块、dentry和节点结构 150 5.2 与进程联系的文件系统相关结构 153 5.3 系统有关操作函数集的结构 155 5.3.1 super_operations 155 5.3.2 inode_operations 156 5.3.3 file_operations 156 5.3.4 dquot_operations 157 5.4 文件系统的建立过程 157 5.5 文件系统的注册、安装与卸载 159 5.5.1 文件系统的注册 159 5.5.2 文件系统的安装与卸载 160 5.6 文件系统的系统调用过程 160 5.6.1 系统调用open 161 5.6.2 read系统调用 170 5.7 文件系统的各种缓存 172 5.7.1 块缓存buffer 172 5.7.2 inode缓存 182 5.7.3 目录条目dentry缓存 185 5.8 缓存同步操作——sys_sync系统调用 189 5.8.1 多个节点同步回写操作函数 5.8.1 sync_inodes 189 5.8.2 单个节点同步回写操作函数sync_inodes_sb 190 5.8.3 节点地址空间数据回写操作函数 194 5.8.4 块设备节点映射的数据同步回写 5.8.4 函数sync_blockdev 200 5.9 pdflush线程池 203 5.9.1 pdflush线程池的实现 203 5.9.2 pdflush线程使用实例 5.9.2 ——wakeup_bdflush 206 5.10 限额机制 207 第6章 ext2文件系统 208 6.1 ext2文件系统的几个数据结构 210 6.1.1 ext2超级块 210 6.1.2 ext2超级块信息结构 211 6.1.3 超级块的操作函数结构 212 6.1.4 ext2的索引节点inode 212 6.1.5 ext2文件系统的节点信息结构 214 6.1.6 节点操作函数结构 215 6.1.7 文件操作函数结构 215 6.1.8 ext2文件系统的组描述符 215 6.2 ext2文件系统建立过程 215 6.3 ext2_read_inode函数分析 220 6.4 ext2_write_inode函数分析 221 6.5 文件的读写 223 6.6 文件扩展时的数据块分配策略 228 6.7 ext2的目录项及文件的定位 234 6.8 链接文件 237 第7章 其他文件系统 238 7.1 ramfs内存文件系统 238 7.1.1 ramfs文件系统模块初始化 238 7.1.2 ramfs文件系统操作函数集 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.3 vfat文件系统 255 7.3.1 fat文件系统的组成 255 7.3.2 引导记录区dbr及定义 256 7.3.3 fat文件系统结构定义 260 7.3.4 vfat文件系统的注册超级块 261 7.3.5 超级块操作函数集的实现 264 7.3.6 目录操作函数集 265 7.4 devfs文件系统 270 7.5 sysfs文件系统 275 7.5.1 内核对象相关结构 276 7.5.2 sysfs文件系统的建立过程 277 7.5.3 sysfs提供给对象模型的调用函数 278 7.5.4 sysfs建立bus子系统 280 7.5.5 bus子系统的接口函数 282 7.5.6 在sysfs中建立pci目录示例 283 第8章 i/o端口资源管理 288 8.1 i/o资源的描述 288 8.1.1 内存屏障 289 8.1.2 资源管理函数 290 8.2 中断处理 295 8.2.1 硬件提供的中断机制 295 8.2.2 linux的中断处理 297 8.2.3 中断向量的设置和相关数据的 8.2.3 初始化 298 8.2.4 中断处理全过程 299 8.2.5 tasklet机制 303 8.2.6 中断处理在/proc文件系统中的报告 311 8.2.7 并口中断处理程序示例 311 8.3 dma 315 8.3.1 dma控制器硬件结构 315 8.3.2 dma通道使用的地址 316 8.3.3 dma操作函数 317 8.3.4 dma映射 318 8.3.5 dma池 321 8.3.6 一个简单的使用dma例子 324 8.4 电源管理 325 8.4.1 acpi规范介绍 326 8.4.2 acpi的一些基本概念 328 8.4.3 acpi的运行 329 8.4.4 acpi驱动程序分析 332 8.4.5 pci的acpi电源管理的实现 337 8.4.6 apm电源管理模式 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.5 modutils介绍 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 通用硬盘genhd 398 10.6 通用块层 403 10.6.1 bio相关结构 404 10.6.2 bio_vec池 405 10.6.3 碎片链表 406 10.6.4 请求及请求队列结构 407 10.6.5 通用的命令标志请求 410 10.6.6 i/o调度器 411 10.7 块设备的读写请求队列及提交过程 415 10.7.1 初始化块设备的请求队列 415 10.7.2 块设备读写请求的传递过程 417 10.8 ioctl设备控制操作 423 10.9 编写设备驱动程序的基本步骤 425 10.9.1 如何添加一个字符设备 425 10.9.2 如何添加一个块设备 425 第11章 flash闪存及sd/mmc卡设备 第11章 驱动程序 427 11.1 mtd内存技术设备 427 11.1.1 mtd内存技术设备层次结构 428 11.1.2 设备层和原始设备层的函数 11.1.2 调用关系 430 11.1.3 mtd相关结构 430 11.1.4 mtd块设备初始化 432 11.1.5 mtd块设备的读写操作 439 11.1.6 mtd核心初始化 442 11.1.7 mtd字符设备 443 11.1.8 具体flash芯片的探测及映射 444 11.1.9 驱动程序实例分析 447 11.2 sd/mmc卡块设备驱动程序 449 11.2.1 mmc抽象设备层相关结构 449 11.2.2 mc抽象设备层mmc块设备 11.2.2 驱动程序 453 11.2.3 具体mmc控制器驱动程序示例 462 第12章 linux系统初始化 468 12.1 boot loader 468 12.1.1 pc的boot loader 468 12.1.2 嵌入式系统boot loader 473 12.2 linux内核启动过程 478 第13章 系统调用 481 13.1 设定0x80号中断 481 13.2 系统调用现场保护 482 13.3 linux系统调用的流程 484 13.3.1 系统调用过程 484 13.3.2 中断int 0x80入口处理 484 第14章 linux网络系统分层结构 488 14.1 linux网络系统分层结构 488 14.2 数据包结构 489 14.2.1 msghdr结构 489 14.2.2 socket结构 490 14.2.3 sk_buff结构及管理 490 14.2.4 sock结构 495 14.3 sockfs文件系统 497 14.4 利用socket通信 499 14.4.1 socket层 500 14.4.2 ip层收发数据包函数 506 14.4.3 网络核心层 513 14.5 网卡驱动程序 525 14.5.1 napi 525 14.5.2 8139cp网卡驱动程序 526 14.6 netlink 533 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.1 a.out文件格式分析 550 15.3.2 coff文件格式分析 551 15.3.3 elf文件格式分析 552 15.3.4 符号的重定位 557 15.3.5 elf文件加载过程 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.2 tmpfs文件系统 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.1 linux常用安全技术 618 17.1.1 pam机制 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.2 linux能力机制 621 17.3 flask安全体系结构概述 622 17.4 se linux安全策略配置语言 624 17.4.1 基本概念 625 17.4.2 linux与se linux在安全管理 17.4.2 上的区别 626 17.4.3 安全模型 626 17.4.4 策略语言及配置样例 626 17.5 selinux的内部结构 634 17.6 selinux的实现 636 17.6.1 任务的安全管理 637 17.6.2 avc分析 640 17.6.3 security_compute_av函数 644 17.7 策略库的结构 647 17.7.1 sidtab结构 648 17.7.2 symtab结构 649 17.7.3 avtab结构 649 17.7.4 class_datum结构 649 17.7.5 role_datum结构 650 17.7.6 user_datum结构 651 17.7.7 role_tran结构 651 17.7.8 cond_node结构 652 17.8 安全审计的管理 653 17.9 sel_fs文件系统 654 17.10 防火墙 660 17.10.1 netfilter框架 661 17.10.2 iptables管理工具 662 17.10.3 netfilter例子 663 第18章 内核配置与编译 664 18.1 配置文件的生成 664 18.2 配置语言 665 18.3 主makefile分析 667 18.3.1 主makefile中的分析 667 18.3.2 嵌入式内核的交叉编译 671 18.4 rule.make及子目录编译 673 18.4.1 编译选项变化引起增量编译 673 18.4.2 子目录的编译 673 18.4.3 rule.make分析 674 18.4.4 驱动程序配置示例 680 第19章 linux内核调试 683 19.1 strace命令 683 19.2 oops消息分析 683 19.3 调试工具 684 19.4 printk打印调试 688 19.4.1 printk 688 19.4.2 如何记录消息 689 19.4.3 sys_syslog系统调用 690 19.4.4 printk函数分析 692 19.4.5 控制台 694 19.4.6 tty代码分析 695 19.4.7 tty_register_ldisc函数 701 19.5 ptrace调试跟踪 702 19.5.1 调试寄存器 702 19.5.2 tss中的调度陷阱 704 19.5.3 int3 704 19.5.4 程序的单步执行 705 19.5.5 ptrace系统调用 705 19.5.6 系统调用跟踪 710 19.5.7 调试陷阱处理 711 19.5.8 调试器运行方法 712 第20章 usb总线驱动程序 715 20.1 usb的拓朴结构 715 20.2 usb 2.0协议 717 20.2.1 包标志符及传输控制概述 717 20.2.2 总线枚举 718 20.2.3 usb设备请求 719 20.2.4 描述符 719 20.2.5 otg规范 720 20.3 usb总线驱动程序结构 722 20.3.1 usb主机驱动程序的体系 722 20.3.2 usb驱动程序的编写 723 20.3.3 设备结构间的关系 725 20.4 usb驱动程序初始化 727 20.5 usbfs文件系统 729 20.5.1 usbfs文件系统初始化 729 20.5.2 usbfs文件操作 731 20.6 usb请求块(urb) 732 20.6.1 urb结构 732 20.6.2 urb的操作 733 20.7 同步消息处理 735 20.7.1 同步请求完成模型 736 20.7.2 控制与查询 737 20.8 用主机控制器驱动层(hcd层) 737 20.8.1 usb总线的注册与注销 738 20.8.2 hcd操作函数 739 20.8.3 注册根集线器 741 20.9 集线器hub 741 20.9.1 hub初始化 742 20.9.2 hub设备的各种事件处理 744 20.9.3 ehci-hcd控制器 752 20.10 usb大存储设备 758 20.10.1 bulk-only传输协议 759 20.10.2 scsi体系结构模型及命令描述块 761 20.10.3 大存储类主机驱动程序 765 20.11 usb从设备驱动程序(gadget) 779 20.11.1 gadget相关结构 781 20.11.2 gadget api 783 20.11.3 pxa2xx控制器 786 20.11.4 gadgetfs文件系统 794 20.11.5 大存储设备驱动程序 804 附录a linux系统调用 819 主要参考文献 823

文件下载

评论信息

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明