这是一本基于龙芯平台,结合Linux-5.4.x 版本的内核源代码来解析Linux 内核的书籍。本书首先介绍了有关龙芯处理器和Linux 内核的基础知识,然后重点讲解了内核启动、异常与中断、内存管理、进程管理、显卡驱动、网卡驱动和电源管理这7 大板块的内容。本书甚少涉及代码的细枝末节,而是重点关注代码实现的主干流程,并且创造性地引入了树形视图和链式视图这两种比流程图更好用的代码解析方法。
本书适合Linux 系统相关的开发人员,特别是基于龙芯处理器做内核开发的技术人员学习参考。
第01 章 基础知识
1.1 龙芯处理器简介 002
1.1.1 龙芯3 号功能特征 004
1.1.2 龙芯3 号处理器核 008
1.1.3 龙芯电脑基本结构 015
1.2 Linux 内核简介 018
1.2.1 Linux 内核发展简史 019
1.2.2 Linux 内核的开发模式 021
1.2.3 关于长期维护稳定版 025
1.2.4 龙芯的内核版本选型 025
1.3 如何高效阅读代码 027
1.3.1 找准入口点 028
1.3.2 理清主脉络 029
1.3.3 顾名思义看功能 040
1.3.4 理解补丁文件 042
1.4 如何开发健壮内核 045
1.4.1 内核代码风格 046
1.4.2 合理生成补丁 048
1.4.3 谨慎对待创新 049
第02 章 内核启动解析
2.1 内核源代码目录结构 054
2.2 内核启动过程:主核视角 055
2.2.1 第一入口:kernel_entry 056
2.2.2 第二入口:start_kernel() 063
2.2.3 重要函数:setup_arch() 070
2.2.4 重要函数:trap_init() 083
2.2.5 重要函数:init_IRQ() 087
2.2.6 重要函数:time_init() 092
2.2.7 1 号进程:kernel_init() 096
2.3 内核启动过程:辅核视角 104
2.3.1 第一入口:smp_bootstrap 105
2.3.2 第二入口:start_secondary() 107
2.4 本章小结 110
第03 章 异常与中断解析
3.1 寄存器操作 113
3.2 异常处理解析 114
3.2.1 复位异常和NMI 115
3.2.2 缓存错误异常 116
3.2.3 TLB/XTLB 异常 117
3.2.4 其他通用异常 126
3.3 中断处理解析 137
3.3.1 中断处理的入口 137
3.3.2 中断处理的分派 140
3.4 软中断、小任务与工作队列 151
3.4.1 软中断softirq 151
3.4.2 小任务tasklet 154
3.4.3 工作队列workqueue 156
3.5 本章小结 159
第04 章 内存管理解析
4.1 内存管理相关概念 161
4.1.1 龙芯3 号的高速缓存 161
4.1.2 龙芯3 号的TLB 168
4.1.3 龙芯的虚拟地址空间 170
4.2 物理内存页帧管理 171
4.2.1 物理地址空间 177
4.2.2 伙伴系统算法 183
4.3 内核内存对象管理 201
4.3.1 数据结构与API 202
4.3.2 核心函数解析 209
4.4 分页映射内存管理 217
4.4.1 持久内核映射 221
4.4.2 临时内核映射 226
4.4.3 非连续内存管理 229
4.5 进程地址空间管理 241
4.5.1 数据结构与API 241
4.5.2 内存映射 250
4.5.3 堆区管理 257
4.5.4 缺页异常处理 258
4.6 内存管理其他话题 266
4.6.1 反向映射 267
4.6.2 内存回收 271
4.6.3 巨页机制 274
4.7 本章小结 275
第05 章 进程管理解析
5.1 进程描述符 278
5.1.1 运行状态相关 285
5.1.2 标识调度相关 289
5.1.3 其他重要部分 295
5.2 进程创建 296
5.2.1 复制新进程 296
5.2.2 执行新程序 308
5.3 进程销毁 314
5.3.1 退出程序执行 314
5.3.2 清理进程资源 317
5.4 进程调度 327
5.4.1 基本概念 328
5.4.2 发展历史 330
5.4.3 公平调度策略 334
5.4.4 调度核心解析 347
5.4.5 进程切换解析 360
5.5 其他话题 364
5.5.1 CPU 负载 364
5.5.2 调度域与调度组 370
5.5.3 NUMA 均衡调度 374
5.6 本章小结 380
第06 章 显卡驱动解析
6.1 显卡概述 382
6.1.1 发展简史及有关概念 382
6.1.2 现代显卡的硬件结构 385
6.2 Linux 图形系统架构 388
6.2.1 X-Window 和Wayland 388
6.2.2 直接渲染、间接渲染和显卡驱动 391
6.3 Linux 内核显卡驱动 392
6.3.1 寄存器读写 393
6.3.2 常用数据结构 394
6.3.3 显卡初始化 411
6.3.4 命令流处理 435
6.3.5 存储区域间数据交换 439
6.3.6 GPU 重置(Reset) 443
6.4 本章小结 446
第07 章 网卡驱动解析
7.1 网络子系统概述 448
7.2 Linux 以太网卡驱动 449
7.2.1 常用数据结构 449
7.2.2 网卡初始化 452
7.2.3 网卡的开与关 456
7.2.4 数据发送与接收 457
7.2.5 故障检测与修复(看门狗) 466
7.3 本章小结 468
第08 章 电源管理解析
8.1 电源管理概述 470
8.2 运行时电源管理 473
8.2.1 动态变频 474
8.2.2 自动调核 488
8.3 系统级睡眠管理 507
8.3.1 睡眠到内存(待机) 509
8.3.2 睡眠到磁盘(休眠) 520
8.4 本章小结 527
附录A 并发与同步原语
A.1 内存屏障 529
A.2 每CPU 变量 533
A.3 原子操作 535
A.4 开关抢占 539
A.5 自旋锁 540
A.6 顺序锁 544
A.7 信号量 546
A.8 互斥量 548
A.9 RCU 机制 549
A.10 其他原语 556
附录B Linux 内核大事记
B.1 史前时代 560
B.2 奇偶时代 560
B.3 快速演进时代 562
B.4 极速演进时代 564
后记
参考文献
猜您喜欢
评论