深度探索Linux操作系统

出版社:机械工业出版社
出版日期:2013-10-15
ISBN:9787111439011
作者:王柏生
页数:421页

书籍目录

《深度探索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

作者简介

《深度探索linux操作系统:系统构建和原理解析》是探索linux操作系统原理的里程碑之作,在众多的同类书中独树一帜。它颠覆和摒弃了传统的从阅读linux内核源代码着手学习linux操作系统原理的方式,而是基于实践,以从零开始构建一个完整的linux操作系统的过程为依托,指引读者在实践中去探索操作系统的本质。这种方式的妙处在于,让读者先从宏观上全面认清一个完整的操作系统中都包含哪些组件,各个组件的作用,以及各个组件间的关系,从微观上深入理解系统各个组件的原理,帮助读者达到事半功倍的学习效果,这是作者潜心研究linux操作系统10几年的心得和经验,能避免后来者在学习中再走弯路。此外,本书还对编译链接技术(尤其是动态加载和链接技术)和图形系统进行了原理性的探讨,这部分内容非常珍贵。
全书一共8章:第1章介绍了如何准备工作环境。在第2章中构建了编译工具链,这是后面构建操作系统各个组件的基础。在这一章中,不仅详细讲解了工具链的构建过程,而且还通过对编译链接过程的探讨,深入讨论了工具链的组成及各个组件的作用,理解工具链的工作原理对理解操作系统至关重要。第3~4章,从零开始构建了一个具备用户字符界面的最小操作系统,详细讲解了构建的过程以及涉及的技术细节。第5章从理论的角度探讨了这一过程,从内核的加载、解压一直讨论到用户进程的加载,包括用户空间的动态链接器为加载程序所作的努力。第6~7章首先构建了操作系统的基础图形系统,然后在此基础上构建了桌面环境。第8章深入探讨了计算机图形的基础原理,包含2d和3d程序的渲染、软件渲染、硬件渲染等内容,同时也从操作系统的角度审视了pipeline。


 深度探索Linux操作系统下载 更多精彩书评



发布书评

 
 


精彩书评 (总计6条)

  •     本人已经从事嵌入式开发大概有5年的时间,也做过3个较大的嵌入式项目。但对于一般的单位来说,系统构建这部分知识比较底层,很少有机会接触。一般都是应用层的代码编写,总觉得都在这个行业已经工作5年了,应该朝更高的方向发展下。所以一直尝试自己编译一个比较完善的系统。看了不少书籍和网站,知识都是很零散。后来在网上看到这本书,一看定价还真不便宜,但是想想自己在网上搜索的那些东西,经常浪费很多时间,就下定决心买了一本。说来,我对386/XP这种架构还是要比ARM敢兴趣一点,因为你不可能整天在办公室摆弄一个板子吧。这本书完整的介绍了编译一个完整的386结构的图像系统。开始的时候,希望大家用这个版本的Linux作为服务器ubuntu-11.10-server-i386.iso,用这个版本作为客户端ubuntu-11.10-desktop-i386.iso。对于初学者来说,希望大家能先向王老师索要一份电子版本的前几章的电子版,以免把个别命令敲错了。有时候编译了半天失败后,才发现是一个属性敲错了。还要说的一点就是,我开始的时候很怀疑书上所有的例子是否能全部编译过,经过了我的一个月的探索和实践,终于验证完可以全部通过。这个过程是一个很艰辛的过程,我本人由于兴趣,基本上一天投入10小时以上,就连周末也是。由于敢兴趣也不觉的累了,呵呵。到现在,我基本上掌握了书上的大部分知识,在这个过程中,真心的感谢王老师,每次遇见问题时都发邮件给他,都得到耐心有效的回答。对比下我们公司为Linux咨询机构每年所付的咨询费用觉得这本书真是物有所值。我准备给我们部门的童鞋做个类似方面的培训和分享,希望对Linux或者嵌入式开发的童鞋都能拥有这本书,在梦想的道路上少走弯路,呵呵。本人留个邮箱可以交流下llldddfffldf@163.com
  •     <<深度探索Linux操作系统>>是2013年才出版的新作.该书刚出版不久我就入手了. 要说的话, 本人对技术书籍其实是蛮挑的, 一方面是因为我个人的书柜已经快放不下了, 另一方面作为一个在Linux系统环境下工作有了几年经验的 C 程序员, 懂得识别技术书籍的好坏. 所以我从来不肯往自己的书柜中添加哪怕一本我认为不够好的书籍.其实我个人对于程序语言方面的涉猎还算广泛, 命令式的, 函数式的均略懂. 编译方面的书籍也翻过不少, 也尝试过自己写前端. 我称自己是一个 C 程序员的原因是我喜欢这门语言, 因为它强迫具有强烈好奇心的程序员去理解计算机系统和各种底层机制, 而这些东西在满足程序员的好奇心之后, 还会慢慢地令他着迷.对于程序员来说, Linux 系统太容易让其沉迷其中了. 在古老的命令行终端下有各式各样的脚本解释器, 随手写几行就是一个可解释执行的程序. 而对 C 程序员来说, 和命令行操作方式浑然一体的编辑, 编译, 以及执行环境, 配合 shell 脚本和 Makefile, 一切是如此轻便灵动和随心所欲. 当了解并习惯了命令行上的各种操作之后, 有些时刻甚至会觉得各种笨重缓慢并向程序员隐瞒程序构建过程的IDE显得有些可笑.从命令行和C语言开始, 程序员慢慢成长, 并开始越来越不满足. 看上去程序员所知道的越来越多, 知识亦日益丰富, 但是这些表面的知识越来越无法填满日益强烈的好奇心. 如果知识没有体系, 那么这些知识终究只是知识, 它们凌乱, 容易被忘却, 如同乡间田野中随处可见的小花朵. 而作为有智识的人类, 需要的是一整座种满各种品相花簇甚至奇珍异草的花园, 还要有一张花园的地图. 如此构建起来的体系, 方可称之为智慧.然而构建体系却并非易事. 语言, 数据结构和算法, 编译原理, 计算机系统以及其下的硬件构架, 它们之间相互交叉渗入, 各种各样的机制甚至 trick 令人眼花缭乱. 若非深入花园数年, 又怎能辨得各色花香? 对程序员来说, 确是路漫漫其修远兮.<<深度探索 Linux 操作系统>>一书的作者显然已经走过了足够漫长的道路. 当然, 其实我个人觉得本书的副标题更加切合其讲述的内容. 本书的优秀之处正是在于, 它以 Linux 系统为立足点, 讲述了一个完善的计算机系统体系. 更重要的是, 这种讲述不是大学那种照本宣科的讲述计算机系统的教材, 而是带有真正的实践意义的书籍.本书首先从C语言的工具链开始, 讲述了一个 C 程序从源代码到最终可执行程序的构建过程. 首先分清楚工具链中各个工具的工作, 然后从汇编代码, 二进制文件格式以及链接器的工作入手, 确切地让 C 程序员清楚地掌握自己所写的程序的每一个字节. 作者的经验是如此老到, 刚好讲解了最需要被 C程序员所了解的内容 -- 但是, 以我工作了这些年的经验来看, 我发现并不是所有的 C程序员都了解作者所讲述的这些内容(对这些东西完全不了解的 C程序员, 我很难认同他们是合格的).然后本书开始讲解内核的构建. 内核的映像如何组成, 内核的构建过程和配置. 该章讲述的脉络是如此的清晰可见, 确实印证了作者的话语, "实践检验真理". 接下来, 根文件系统, initramfs, 一步一步, 从内核开始, 一个可以实用的操作系统逐渐成型. 可能有的同学说, 这不跟 LFS(Linux From Scratch) 差不多的感觉么! 非也. LFS 确实也讲述系统构建, 然而在我看来, 二者虽形似, 而神远. 有没有听过"LFS 和 LFS 差距十万八千里"这句话? 对于一般的系统管理人员来说, 能够通过 LFS 构建一个可用系统已经相当不错了. 他们一般不会去深入到构建这些程序的细节, 以及内核的机理 -- 简单的说, 别想在 LFS 中看到代码啦. 但是本书则深入系统原理, 从内核本身的机制入手, 一些代码看似信手拈来, 实则若非深入实践, 绝无此等浑厚功力.而从内核到用户空间, 则是程序员理解程序执行环境及其底层机理之精要! 众所周知, 进程乃为操作系统所须提供之首要抽象(另一个重要抽象是文件). 总体上来说, 我们可以将计算机系统抽象为一个三层构架: Application Layer, Kernel, Hardware, 即应用, 内核, 硬件. 所谓操作系统, 就是内核管理了所有硬件资源, 内核之上则运行着众多进程. Linux 内核以 task_struct 簿记一个进程的所有信息, 将其列入优先级队列, 调度辗转, 以呈纷繁精彩. 此中涉及之要, 又以内存管理为首. 内核为进程提供虚拟空间这一抽象, 使得进程以为自己处于一个有限而平坦的私有的存储器中, 并可使用系统所提供的一切资源. 然则, 程序如何加载以使其成为进程? 虚拟空间到物理存储的的映射若何? user space 到 kernel space 切换时需要保存哪些上下文信息... 均可在此书中找到答案. 而关于动态运行库之机理, 亦为理解程序执行环境之极重要一环. 本书也提供了关于此问题的深入解答.本书后小半部分是关于构建一个实用的根文件系统, 以及, 建立图形环境. 有的同学觉得不应该讲这个 -- 而我的感觉正好相反. 要了解一个完整的系统是如何构建的, 图形环境是不可或缺的一部分. 即使是 Linus 本人看来, 在 Linux 之上构建图形环境也是一个好主意. 而且, 本书对图形环境的讲述正是从基础开始, 也是原理性的讲述. 这正好是我需要的. 本人 QT 和 GTK 都略懂, 能写点儿花里胡哨又没用的小程序. 可惜一直对 x11 不算清楚, 而本书的讲述解决了我不少疑问.最后, 给本书做个总评.其一. 本书的立足点是系统的构建和原理. 这意味着, 不能将本书当着是 Linux 内核源码解析一类来看. 某种程度上来说, 本书的立足点更高一些, 正如本文的标题所言, 是要宏观地俯瞰 Linux 系统的全局, 包括内核和应用层, 以及其相互交互的机制. 然而作者对 Linux 内核以及应用层机制的全面了解, 使得本书闪光点非常多, 信手拈来的代码和作者的深厚功底, 确实令人佩服.其二. 本书的内容对读者亦有相当的要求. 要求读者对 Linux 系统, C语言, Shell, Makefile等等都有一定的熟识程度, 而且对 Linux 内核和计算机系统理论要有一些基本认识, 否则本书就是明珠暗投了.鉴于本书对于初级程序员(而且本书主要针对 Linux 系统环境下的 C程序员)来说确实有一定难度, 这注定了本书的受众不会太广泛. 而本书对于 Linux 系统构建和原理方面的讲述确实非常出众, 是不可多得的优秀书籍. 对于 Linux 环境下喜欢 Linux 内核或者正在学习内核的同学或者Linux 内核驱动工程师等, 本书值得5星力荐!
  •     这本书是我能够坚持基本从头看到尾的一本书(构建桌面环境那章大致看了看,基本是跳过去的),所以随便罗嗦几句。和深入理解Linux内核那类书比较,这本书理论高度没有那些书高。但是这本书的突出之处就是实践,相比只是通过理论学习,按照这本书操作,别有一番领悟。看完后有些不过瘾,希望这位实战派的作者,能将内核内部一些子系统也能从这个角度分享一下。

精彩短评 (总计17条)

  •     内容还是非常充实的. 不过, 可能是因为自己的知识有限, 在读的过程中, 太容易被绕晕了, 而且缺少一些总结.
  •     受益匪浅,不是纯理论,消除了系统底层的神秘和抽象。
  •     如何从0开始编译, 安装并运行一个linux, 正是我需要的. linux kernel 的编译过程涉及到对kernel的调试, 所以做一次lfs非常重要; 浏览了一遍, 构建过程, 链接, 装载和库的内容, 源代码分析, 混合在一起了; 深度还是够的, 多看看, 总是有收获. 每次看的时候需要有所侧重, 可以重点关注交叉编译, 也可以重点关注linux的二进制文件elf格式, 也可以重点关注linux的动态链接器实现.
  •     很好,有时间再阅览一遍
  •     初略读了前四章。后续有需要时查阅。
  •     文笔扣分。但由于后半本书不是熟悉的方向,整体不做评价
  •     读这本书,有点像小时候读四大名著,只要到了诗歌的那一段,就会自动跳过去,因为不影响理解情节。等到后来再读到很多次之后,才逐渐开始欣赏诗歌。这本书也是,我基本上是跳过了所有的代码段,我觉得这是第一次读的正常反应。我特别期待这本书的后续版本,作者可能会根据新的Linux内核更新相关代码,我也许那时能够认真读这些代码。 我看得不是很懂,感觉此书还是超越了我的理解能力,所以给4个星。
  •     从加电到init启动的讲解尤为精彩。
  •     great book !!! give me a new way to thinking about linux kernel. i read a lot of books about linux kernel source code. but this books change my mind. not only read the code, but run these codes. you will understand more...
  •     作者挺负责的,见到豆瓣阅读状态改变,主动发来了勘误的图片。整本书借着构筑Linux系统顺便讲解了部分原理,收获还是挺多的呢,感觉结合《程序员的自我修养》读起来风味更佳。作者的观点我非常同意,从构建Linux系统来学习Linux无疑是一条非常有效率的了解Linux整体结构的方式而不是盲人摸象,只知道大象的局部而对整体一抹黑
  •     本来是点错了不小心买的书电子书,竟然捡到宝贝了。lfs cookbook 只告诉你 how,这本书不但有 更详细的 how 还有大篇幅的 why ,不打五星对不起作者啊
  •     稍微翻了一下,主要是介绍怎么从头编译配置 Linux 操作系统的,不过现在云计算时代,很多这种上古神迹对大部分程序员来说都没啥用了。
  •     讲得比较详细和实用,不过对于完全的新人来说,想要按照里面的过程来做还是有些难度的。
  •     前面写的还可以,最后面几章居然是讲图形界面.
  •     动态的讲解了Linux工作机制的书,作者语言也不错,没有那种舶来的生硬的英语式汉语的感觉。
  •     这本书可以减少linux系统级开发的很多困惑,好书,读过后,对从零开始构建一个可以启动的linux系统有较深的理解
  •     曾经对国人写的技术书籍失望透顶:假话、大话、空话,不求甚解的到处复制粘贴,洋文式的中文... 但是这本书真的要赞一个。
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024