《深度探索Linux作业系统》是一本王柏生编制,由机械工业出版社在2013-10-15出版的书籍。
基本介绍
- 作者:王柏生
- ISBN:9787111439011
- 页数:421页
- 定价:89.00元
- 出版社:机械工业出版社
- 出版时间:2013-10-15
- 装帧:平装
- 副标题:系统构建和原理解析
- 原作名:深度探索Linux作业系统
内容介绍
《深度探索linux作业系统:系统构建和原理解析》是探索linux作业系统原理的里程碑之作,在众多的同类书中独树一帜。它颠覆和摒弃了传统的从阅读linux核心原始码着手学习linux作业系统原理的方式,而是基于实践,以从零开始构建一个完整的linux作业系统的过程为依託,指引读者在实践中去探索作业系统的本质。这种方式的妙处在于,让读者先从巨观上全面认清一个完整的作业系统中都包含哪些组件,各个组件的作用,以及各个组件间的关係,从微观上深入理解系统各个组件的原理,帮助读者达到事半功倍的学习效果,这是作者潜心研究linux作业系统10几年的心得和经验,能避免后来者在学习中再走弯路。此外,本书还对编译连结技术(尤其是动态载入和连结技术)和图形系统进行了原理性的探讨,这部分内容非常珍贵。
全书一共8章:第1章介绍了如何準备工作环境。在第2章中构建了编译工具链,这是后面构建作业系统各个组件的基础。在这一章中,不仅详细讲解了工具链的构建过程,而且还通过对编译连结过程的探讨,深入讨论了工具链的组成及各个组件的作用,理解工具链的工作原理对理解作业系统至关重要。第3~4章,从零开始构建了一个具备用户字元界面的最小作业系统,详细讲解了构建的过程以及涉及的技术细节。第5章从理论的角度探讨了这一过程,从核心的载入、解压一直讨论到用户进程的载入,包括用户空间的动态连结器为载入程式所作的努力。第6~7章首先构建了作业系统的基础图形系统,然后在此基础上构建了桌面环境。第8章深入探讨了计算机图形的基础原理,包含2d和3d程式的渲染、软体渲染、硬体渲染等内容,同时也从作业系统的角度审视了pipeline。
作品目录
《深度探索linux作业系统:系统构建和原理解析》
前 言
第1章 準备基本环境 1
1.1 安装virtualbox 1
1.2 创建虚拟计算机 2
1.3 安装linux系统 2
1.4 使用root用户 5
1.5 启用自动登录 5
1.6 挂载实验分区 6
1.7 安装ssh伺服器 6
1.8 更改网路模式 7
1.9 安装增强模式 8
1.10 使用xephyr 8
第2章 工具链 10
2.1 编译过程 10
2.1.1 预编译 12
2.1.2 编译 14
2.1.3 彙编 17
2.1.4 连结 31
2.2 构建工具链 39
.2.2.1 gnu工具链组成 40
2.2.2 构建工具链的过程 40
2.2.3 準备工作 43
2.2.4 构建二进制工具 45
2.2.5 编译freestanding的交叉编译器 46
2.2.6 安装核心头档案 49
2.2.7 编译目标系统的c库 50
2.2.8 构建完整的交叉编译器 52
2.2.9 定义工具链相关的环境变数 54
2.2.10 封装“交叉”pkg-config 54
2.2.11 关于使用libtool程式库的讨论 56
2.2.12 启动代码 57
第3章 构建核心 62
3.1 核心映像的组成 62
3.1.1 一级推进系统——setup.bin 63
3.1.2 二级推进系统——核心非压缩部分 65
3.1.3 有效载荷——vmlinux 65
3.1.4 映像的格式 66
3.2 核心映像的构建过程 68
3.2.1 kbuild简介 68
3.2.2 构建过程概述 71
3.2.3 vmlinux的构建过程 71
3.2.4 vmlinux.bin的构建过程 75
3.2.5 setup.bin的构建过程 80
3.2.6 bzimage的组合过程 81
3.2.7 核心映像构建过程总结 82
3.3 配置核心 86
3.3.1 交叉编译核心设定 86
3.3.2 基本核心配置 87
3.3.3 配置处理器 88
3.3.4 配置核心支持模组 90
3.3.5 配置硬碟控制器驱动 91
3.3.6 配置档案系统 96
3.3.7 配置核心支持elf档案格式 97
3.4 构建基本根档案系统 99
3.4.1 根档案系统的基本目录结构 99
3.4.2 安装c库 100
3.4.3 安装shell 101
3.4.4 安装根档案系统到目标系统 102
第4章 构建initramfs 104
4.1 为什幺需要initramfs 104
4.2 initramfs原理探讨 105
4.2.1 挂载rootfs 106
4.2.2 解压initramfs到rootfs 110
4.2.3 挂载并切换到真正的根目录 116
4.3 配置核心支持initramfs 117
4.4 构建基本的initramfs 118
4.5 将硬碟驱动编译为模组 121
4.5.1 配置devtmpfs 121
4.5.2 将硬碟控制器驱动配置为模组 126
4.6 自动载入硬碟控制器驱动 130
4.6.1 核心向用户空间传送事件 131
4.6.2 udev载入驱动和建立设备节点 136
4.6.3 处理冷插拔设备 139
4.6.4 编译安装udev 141
4.6.5 配置核心支持netlink 142
4.6.6 配置核心支持inotify 143
4.6.7 安装modules.alias.bin档案 144
4.6.8 启动udevd和模拟热插拔 146
4.7 挂载并切换到根档案系统 147
4.7.1 挂载根档案系统 147
4.7.2 切换到根档案系统 149
第5章 从核心空间到用户空间 154
5.1 linux作业系统载入 154
5.1.1 grub映像构成 155
5.1.2 安装grub 160
5.1.3 grub启动过程 165
5.1.4 载入核心和initramfs 170
5.2 解压核心 181
5.2.1 移动核心映像 182
5.2.2 解压 186
5.2.3 重定位 187
5.3 核心初始化 190
5.3.1 初始化虚拟记忆体 190
5.3.2 初始化进程0 201
5.3.3 创建进程1 206
5.4 进程载入 209
5.4.1 载入可执行程式 211
5.4.2 进程的投入运行 223
5.4.3 按需载入指令和数据 234
5.4.4 载入动态连结器 243
5.4.5 载入动态库 246
5.4.6 重定位动态库 250
5.4.7 重定位可执行程式 268
5.4.8 重定位动态连结器 271
5.4.9 段relro 274
第6章 构建根档案系统 278
6.1 初始根档案系统 278
6.2 以读写模式重新挂载档案系统 280
6.3 配置核心支持网路 282
6.3.1 配置核心支持tcp/ip协定 282
6.3.2 配置核心支持网卡 283
6.4 启动udev 285
6.5 安装网路配置工具并配置网路 285
6.6 安装并配置ssh服务 287
6.7 安装procps 291
6.8 安装x视窗系统 291
6.8.1 安装m4宏定义 292
6.8.2 安装x协定和扩展 292
6.8.3 安装x相关库和工具 294
6.8.4 安装x伺服器 296
6.8.5 安装gpu的2d驱动 297
6.8.6 安装x的输入设备驱动 297
6.8.7 运行x伺服器 300
6.8.8 一个简单的x程式 302
6.8.9 配置核心支持drm 303
6.9 安装图形库 307
6.9.1 安装glib和libffi 307
6.9.2 安装atk 307
6.9.3 安装libpng 308
6.9.4 安装gdkpixbuf 308
6.9.5 安装fontconfig 308
6.9.6 安装cairo 311
6.9.7 安装pango 311
6.9.8 安装libxi 311
6.9.9 安装gtk 312
6.9.10 安装gtk图形库的善后工作 312
6.9.11 一个简单的gtk程式 313
6.10 安装字型 315
第7章 构建桌面环境 317
7.1 视窗管理器 317
7.1.1 基本原理 318
7.1.2 创建编译脚本 325
7.1.3 主要数据结构 328
7.1.4 初始化 331
7.1.5 为视窗“落户” 334
7.1.6 构建视窗装饰 337
7.1.7 绘製装饰视窗 341
7.1.8 配置视窗 343
7.1.9 移动视窗 345
7.1.10 改变视窗大小 348
7.1.11 切换视窗 348
7.1.12 最大化/最小化/关闭视窗 351
7.1.13 管理已存在的视窗 354
7.2 任务条和桌面 356
7.2.1 标识任务条的身份 357
7.2.2 更新任务条上的任务项 358
7.2.3 激活任务 359
7.2.4 高亮显示当前活动任务 360
7.2.5 显示桌面 361
7.2.6 桌面 362
第8章 linux图形原理探讨 364
8.1 渲染和显示 364
8.1.1 渲染 365
8.1.2 显示 365
8.2 显存 366
8.2.1 动态显存技术 367
8.2.2 buffer object 370
8.3 2d渲染 375
8.3.1 创建前缓冲 377
8.3.2 gpu渲染 381
8.3.3 cpu渲染 386
8.4 3d渲染 388
8.4.1 创建帧缓冲 390
8.4.2 渲染pipleline 399
8.4.3 交换前缓冲和后缓冲 414
8.5 wayland 421
前 言
第1章 準备基本环境 1
1.1 安装virtualbox 1
1.2 创建虚拟计算机 2
1.3 安装linux系统 2
1.4 使用root用户 5
1.5 启用自动登录 5
1.6 挂载实验分区 6
1.7 安装ssh伺服器 6
1.8 更改网路模式 7
1.9 安装增强模式 8
1.10 使用xephyr 8
第2章 工具链 10
2.1 编译过程 10
2.1.1 预编译 12
2.1.2 编译 14
2.1.3 彙编 17
2.1.4 连结 31
2.2 构建工具链 39
.2.2.1 gnu工具链组成 40
2.2.2 构建工具链的过程 40
2.2.3 準备工作 43
2.2.4 构建二进制工具 45
2.2.5 编译freestanding的交叉编译器 46
2.2.6 安装核心头档案 49
2.2.7 编译目标系统的c库 50
2.2.8 构建完整的交叉编译器 52
2.2.9 定义工具链相关的环境变数 54
2.2.10 封装“交叉”pkg-config 54
2.2.11 关于使用libtool程式库的讨论 56
2.2.12 启动代码 57
第3章 构建核心 62
3.1 核心映像的组成 62
3.1.1 一级推进系统——setup.bin 63
3.1.2 二级推进系统——核心非压缩部分 65
3.1.3 有效载荷——vmlinux 65
3.1.4 映像的格式 66
3.2 核心映像的构建过程 68
3.2.1 kbuild简介 68
3.2.2 构建过程概述 71
3.2.3 vmlinux的构建过程 71
3.2.4 vmlinux.bin的构建过程 75
3.2.5 setup.bin的构建过程 80
3.2.6 bzimage的组合过程 81
3.2.7 核心映像构建过程总结 82
3.3 配置核心 86
3.3.1 交叉编译核心设定 86
3.3.2 基本核心配置 87
3.3.3 配置处理器 88
3.3.4 配置核心支持模组 90
3.3.5 配置硬碟控制器驱动 91
3.3.6 配置档案系统 96
3.3.7 配置核心支持elf档案格式 97
3.4 构建基本根档案系统 99
3.4.1 根档案系统的基本目录结构 99
3.4.2 安装c库 100
3.4.3 安装shell 101
3.4.4 安装根档案系统到目标系统 102
第4章 构建initramfs 104
4.1 为什幺需要initramfs 104
4.2 initramfs原理探讨 105
4.2.1 挂载rootfs 106
4.2.2 解压initramfs到rootfs 110
4.2.3 挂载并切换到真正的根目录 116
4.3 配置核心支持initramfs 117
4.4 构建基本的initramfs 118
4.5 将硬碟驱动编译为模组 121
4.5.1 配置devtmpfs 121
4.5.2 将硬碟控制器驱动配置为模组 126
4.6 自动载入硬碟控制器驱动 130
4.6.1 核心向用户空间传送事件 131
4.6.2 udev载入驱动和建立设备节点 136
4.6.3 处理冷插拔设备 139
4.6.4 编译安装udev 141
4.6.5 配置核心支持netlink 142
4.6.6 配置核心支持inotify 143
4.6.7 安装modules.alias.bin档案 144
4.6.8 启动udevd和模拟热插拔 146
4.7 挂载并切换到根档案系统 147
4.7.1 挂载根档案系统 147
4.7.2 切换到根档案系统 149
第5章 从核心空间到用户空间 154
5.1 linux作业系统载入 154
5.1.1 grub映像构成 155
5.1.2 安装grub 160
5.1.3 grub启动过程 165
5.1.4 载入核心和initramfs 170
5.2 解压核心 181
5.2.1 移动核心映像 182
5.2.2 解压 186
5.2.3 重定位 187
5.3 核心初始化 190
5.3.1 初始化虚拟记忆体 190
5.3.2 初始化进程0 201
5.3.3 创建进程1 206
5.4 进程载入 209
5.4.1 载入可执行程式 211
5.4.2 进程的投入运行 223
5.4.3 按需载入指令和数据 234
5.4.4 载入动态连结器 243
5.4.5 载入动态库 246
5.4.6 重定位动态库 250
5.4.7 重定位可执行程式 268
5.4.8 重定位动态连结器 271
5.4.9 段relro 274
第6章 构建根档案系统 278
6.1 初始根档案系统 278
6.2 以读写模式重新挂载档案系统 280
6.3 配置核心支持网路 282
6.3.1 配置核心支持tcp/ip协定 282
6.3.2 配置核心支持网卡 283
6.4 启动udev 285
6.5 安装网路配置工具并配置网路 285
6.6 安装并配置ssh服务 287
6.7 安装procps 291
6.8 安装x视窗系统 291
6.8.1 安装m4宏定义 292
6.8.2 安装x协定和扩展 292
6.8.3 安装x相关库和工具 294
6.8.4 安装x伺服器 296
6.8.5 安装gpu的2d驱动 297
6.8.6 安装x的输入设备驱动 297
6.8.7 运行x伺服器 300
6.8.8 一个简单的x程式 302
6.8.9 配置核心支持drm 303
6.9 安装图形库 307
6.9.1 安装glib和libffi 307
6.9.2 安装atk 307
6.9.3 安装libpng 308
6.9.4 安装gdkpixbuf 308
6.9.5 安装fontconfig 308
6.9.6 安装cairo 311
6.9.7 安装pango 311
6.9.8 安装libxi 311
6.9.9 安装gtk 312
6.9.10 安装gtk图形库的善后工作 312
6.9.11 一个简单的gtk程式 313
6.10 安装字型 315
第7章 构建桌面环境 317
7.1 视窗管理器 317
7.1.1 基本原理 318
7.1.2 创建编译脚本 325
7.1.3 主要数据结构 328
7.1.4 初始化 331
7.1.5 为视窗“落户” 334
7.1.6 构建视窗装饰 337
7.1.7 绘製装饰视窗 341
7.1.8 配置视窗 343
7.1.9 移动视窗 345
7.1.10 改变视窗大小 348
7.1.11 切换视窗 348
7.1.12 最大化/最小化/关闭视窗 351
7.1.13 管理已存在的视窗 354
7.2 任务条和桌面 356
7.2.1 标识任务条的身份 357
7.2.2 更新任务条上的任务项 358
7.2.3 激活任务 359
7.2.4 高亮显示当前活动任务 360
7.2.5 显示桌面 361
7.2.6 桌面 362
第8章 linux图形原理探讨 364
8.1 渲染和显示 364
8.1.1 渲染 365
8.1.2 显示 365
8.2 显存 366
8.2.1 动态显存技术 367
8.2.2 buffer object 370
8.3 2d渲染 375
8.3.1 创建前缓冲 377
8.3.2 gpu渲染 381
8.3.3 cpu渲染 386
8.4 3d渲染 388
8.4.1 创建帧缓冲 390
8.4.2 渲染pipleline 399
8.4.3 交换前缓冲和后缓冲 414
8.5 wayland 421