1.原理 基础,从调试Linux内核到动手编写一个简单的内核模块,真正从零始学习Linux内核。 2.实验 案例,70余个创新实验贯穿全书,与你分享业内一线项目经验。 3.课件 视频,教学资源丰富,视频讲解透彻,与你共享精品在线配套资源(可在异步社区下载)。 4.涵盖当前Linux社区中新的发工具和社区运作方式,反映Linux内核社区新发展。
售 价:¥
纸质售价:¥66.20购买纸书
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
内容提要
序一
序二
前言
资源与支持
第1章 Linux系统入门
1.1 Linux的发展历史
1.2 Linux发行版
1.2.1 Red Hat Linux
1.2.2 Debian Linux
1.2.3 SuSE Linux
1.2.4 优麒麟Linux
1.3 Linux内核
1.3.1 宏内核和微内核
1.3.2 Linux内核概貌
1.4 如何学习Linux内核
1.5 Linux内核实验入门
1.5.1 实验1:在虚拟机中安装优麒麟Linux 18.04系统
1.5.2 实验2:给优麒麟Linux系统更换“心脏”
1.5.3 实验3:使用定制的内核runninglinuxkernel
1.5.4 实验4:如何编译和运行一个ARM Linux内核
第2章 Linux内核基础知识
2.1 Linux常用的编译工具
2.1.1 GCC工具
2.1.2 ARM GCC
2.1.3 GCC编译
2.2 Linux内核中常用的C语言技巧
2.3 Linux内核中常用的数据结构和算法
2.3.1 链表
2.3.2 红黑树
2.3.3 无锁环形缓冲区
2.4 Vim工具的使用
2.4.1 Vim 8介绍
2.4.2 Vim的基本模式
2.4.3 Vim中3种模式的切换
2.4.4 Vim光标的移动
2.4.5 删除、复制和粘贴
2.4.6 查找和替换
2.4.7 文件相关
2.5 git工具的使用
2.5.1 安装git
2.5.2 git基本操作
2.5.3 分支管理
2.6 实验
2.6.1 实验1:GCC编译
2.6.2 实验2:内核链表
2.6.3 实验3:红黑树
2.6.4 实验4:使用Vim工具
2.6.5 实验5:把Vim打造成一个强大的IDE编辑工具
2.6.6 实验6:建立一个git本地仓库
2.6.7 实验7:解决合并分支冲突
2.6.8 实验8:利用git来管理Linux内核开发
2.6.9 实验9:利用git来管理项目代码
第3章 内核编译和调试
3.1 内核配置
3.1.1 内核配置工具
3.1.2 .config文件
3.2 实验1:通过QEMU调试ARM Linux内核
3.3 实验2:通过QEMU调试ARMv8的Linux内核
3.4 实验3:通过Eclipse+QEMU单步调试内核
3.5 实验4:在QEMU中添加文件系统的支持
第4章 内核模块
4.1 从一个内核模块开始
4.2 模块参数
4.3 符号共享
4.4 实验
4.4.1 实验1:编写一个简单的内核模块
4.4.2 实验2:向内核模块传递参数
4.4.3 实验3:在模块之间导出符号
第5章 简单的字符设备驱动
5.1 实验1:从一个简单的字符设备开始
5.2 字符设备驱动详解
5.2.1 字符设备驱动的抽象
5.2.2 设备号的管理
5.2.3 设备节点
5.2.4 字符设备操作方法集
5.3 实验2:使用misc机制来创建设备
5.4 一个简单的虚拟设备
5.4.1 实验3:为虚拟设备编写驱动
5.4.2 实验4:使用KFIFO改进设备驱动
5.5 阻塞I/O和非阻塞I/O
5.5.1 实验5:把虚拟设备驱动改成非阻塞模式
5.5.2 实验6:把虚拟设备驱动改成阻塞模式
5.6 I/O多路复用
5.6.1 Linux的I/O多路复用
5.6.2 实验7:向虚拟设备中添加I/O多路复用支持
5.7 实验8:为什么不能唤醒读写进程
5.8 实验9:向虚拟设备中添加异步通知
5.9 本章小结
第6章 系统调用
6.1 系统调用概念
6.1.1 系统调用和POSIX标准
6.1.2 系统调用表
6.1.3 用程序访问系统调用
6.1.4 新增系统调用
6.2 实验
6.2.1 实验1:在ARM32机器上新增一个系统调用
6.2.2 实验2:在优麒麟Linux机器上新增一个系统调用
第7章 内存管理
7.1 从硬件角度看内存管理
7.1.1 内存管理的“远古时代”
7.1.2 分段机制
7.1.3 分页机制
7.1.4 虚拟地址到物理地址的转换
7.2 从软件角度看内存管理
7.2.1 free命令
7.2.2 从应用编程角度看内存管理
7.2.3 从内存布局图角度看内存管理
7.2.4 从进程角度看内存管理
7.3 物理内存管理
7.3.1 物理页面
7.3.2 内存管理区
7.3.3 分配和释放页面
7.3.4 分配小块内存
7.4 虚拟内存管理
7.4.1 进程地址空间
7.4.2 内存描述符mm_struct
7.4.3 VMA管理
7.4.4 malloc分配函数
7.4.5 mmap
7.5 缺页异常
7.5.1 do_page_fault函数
7.5.2 匿名页面缺页异常
7.5.3 文件映射缺页中断
7.5.4 写时复制缺页异常
7.5.5 缺页异常小结
7.6 内存短缺
7.6.1 页面回收算法
7.6.2 OOM Killer机制
7.7 内存管理实验
7.7.1 实验1:查看系统内存信息
7.7.2 实验2:获取系统的物理内存信息
7.7.3 实验3:分配内存
7.7.4 实验4:slab
7.7.5 实验5:VMA
7.7.6 实验6:mmap
7.7.7 实验7:映射用户内存
7.7.8 实验8:OOM
第8章 进程管理
8.1 进程
8.1.1 进程的来由
8.1.2 进程描述符
8.1.3 进程的生命周期
8.1.4 进程标识
8.1.5 进程间的家族关系
8.1.6 获取当前进程
8.2 进程的创建和终止
8.2.1 写时复制技术
8.2.2 fork()函数
8.2.3 vfork()函数
8.2.4 clone()函数
8.2.5 内核线程
8.2.6 do_fork()函数
8.2.7 终止进程
8.2.8 僵尸进程和托孤进程
8.2.9 进程0和进程1
8.3 进程调度
8.3.1 进程分类
8.3.2 进程优先级
8.3.3 时间片
8.3.4 经典调度算法
8.3.5 Linux O(n)调度算法
8.3.6 Linux O(1)调度算法
8.3.7 Linux CFS调度算法
8.3.8 进程切换
8.3.9 与调度相关的数据结构
8.4 多核调度
8.4.1 调度域和调度组
8.4.2 负载计算
8.4.3 负载均衡算法
8.5 实验
8.5.1 实验1:fork和clone
8.5.2 实验2:内核线程
8.5.3 实验3:后台守护进程
8.5.4 实验4:进程权限
8.5.5 实验5:设置优先级
8.5.6 实验6:per-cpu变量
第9章 同步管理
9.1 原子操作与内存屏障
9.1.1 原子操作
9.1.2 内存屏障
9.2 自旋锁机制
9.2.1 自旋锁定义
9.2.2 自旋锁变种
9.2.3 自旋锁和raw_spin_lock
9.2.4 自旋锁的改进
9.3 信号量
9.4 互斥体
9.5 读写锁
9.5.1 读写锁定义
9.5.2 读写信号量
9.6 RCU
9.7 等待队列
9.7.1 等待队列头
9.7.2 等待队列节点
9.8 实验
9.8.1 实验1:自旋锁
9.8.2 实验2:互斥锁
9.8.3 实验3:RCU
第10章 中断管理
10.1 Linux中断管理机制
10.1.1 ARM中断控制器
10.1.2 硬件中断号和Linux中断号的映射
10.1.3 注册中断
10.2 软中断和tasklet
10.2.1 SoftIRQ软中断
10.2.2 tasklet
10.2.3 local_bh_disable/local_bh_enable
10.2.4 本节小结
10.3 工作队列机制
10.3.1 工作队列类型
10.3.2 使用工作队列
10.3.3 本节小结
10.4 实验
10.4.1 实验1:tasklet
10.4.2 实验2:工作队列
10.4.3 实验3:定时器和内核线程
第11章 调试和性能优化
11.1 printk和动态输出
11.1.1 printk输出函数
11.1.2 动态输出
11.1.3 实验1:printk
11.1.4 实验2:动态输出
11.2 proc和debugfs
11.2.1 proc文件系统
11.2.2 sys文件系统
11.2.3 debugfs
11.2.4 实验3:procfs
11.2.5 实验4:sysfs
11.2.6 实验5:debugfs
11.3 ftrace
11.3.1 irqs跟踪器
11.3.2 preemptoff跟踪器
11.3.3 preemptirqsoff跟踪器
11.3.4 function跟踪器
11.3.5 动态ftrace
11.3.6 事件跟踪
11.3.7 实验6:使用frace
11.3.8 实验7:添加一个新的跟踪点
11.3.9 实验8:使用示踪标志
11.3.10 实验9:使用kernelshark来分析数据
11.4 实验10:分析oops错误
11.5 perf性能分析工具
11.5.1 实验11:使用perf工具来进行性能分析
11.5.2 实验12:采集perf数据生成火焰图
11.6 内存检测
11.6.1 实验13:使用slub_debug检查内存泄漏
11.6.2 实验14:使用kmemleak检查内存泄漏
11.6.3 实验15:使用kasan检查内存泄漏
11.6.4 实验16:使用valgrind检查内存泄漏
11.7 实验17:kdump
11.8 性能和测试
11.8.1 性能测试概述
11.8.2 实验18:使用lkp-tests工具进行性能测试
第12章 开源社区
12.1 什么是开源社区
12.1.1 开源软件的发展历史
12.1.2 Linux基金会
12.1.3 开源协议
12.1.4 Linux内核社区
12.1.5 国内开源社区
12.2 参与开源社区
12.2.1 参与开源项目的好处
12.2.2 如何参与开源项目
12.3 实验1:使用cppcheck检查代码
12.4 实验2:提交第一个Linux内核补丁
12.5 实验3:管理和提交多个补丁组成的补丁集
12.6 实验4:在Gitee中创建一个开源项目
参考文献
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜