作品简介

《深度探索linux操作系统:系统构建和原理解析》是探索linux操作系统原理的里程碑之作,在众多的同类书中独树一帜。它颠覆和摒弃了传统的从阅读linux内核源代码着手学习linux操作系统原理的方式,而是基于实践,以从零开始构建一个完整的linux操作系统的过程为依托,指引读者在实践中去探索操作系统的本质。这种方式的妙处在于,让读者先从宏观上全面认清一个完整的操作系统中都包含哪些组件,各个组件的作用,以及各个组件间的关系,从微观上深入理解系统各个组件的原理,帮助读者达到事半功倍的学习效果,这是作者潜心研究linux操作系统10几年的心得和经验,能避免后来者在学习中再走弯路。此外,本书还对编译链接技术(尤其是动态加载和链接技术)和图形系统进行了原理性的探讨,这部分内容非常珍贵。

全书一共8章:第1章介绍了如何准备工作环境。在第2章中构建了编译工具链,这是后面构建操作系统各个组件的基础。在这一章中,不仅详细讲解了工具链的构建过程,而且还通过对编译链接过程的探讨,深入讨论了工具链的组成及各个组件的作用,理解工具链的工作原理对理解操作系统至关重要。第3~4章,从零开始构建了一个具备用户字符界面的最小操作系统,详细讲解了构建的过程以及涉及的技术细节。第5章从理论的角度探讨了这一过程,从内核的加载、解压一直讨论到用户进程的加载,包括用户空间的动态链接器为加载程序所作的努力。第6~7章首先构建了操作系统的基础图形系统,然后在此基础上构建了桌面环境。第8章深入探讨了计算机图形的基础原理,包含2d和3d程序的渲染、软件渲染、硬件渲染等内容,同时也从操作系统的角度审视了pipeline。

王柏生,资深Linux技术专家,精通Linux操作系统,对Linux操作系统进行了超过10年的研究。10多年来,先后参与并带领团队开发Linux发行版、移动操作系统和车载操作系统。不仅深刻领悟了Linux操作系统的原理和本质,而且对学习Linux操作系统原理的方式和方法也有独到的认识和见解。

作品目录

  • 深度探索Linux操作系统
  • 前 言
  • 第1章 准备基本环境
  • 1.1 安装VirtualBox
  • 1.2 创建虚拟计算机
  • 1.3 安装Linux系统
  • 1.4 使用root用户
  • 1.5 启用自动登录
  • 1.6 挂载实验分区
  • 1.7 安装ssh服务器
  • 1.8 更改网络模式
  • 1.9 安装增强模式
  • 1.10 使用Xephyr
  • 第2章 工 具 链
  • 2.1 编译过程
  • 2.1.1 预编译
  • 2.1.2 编译
  • 2.1.3 汇编
  • 2.1.4 链接
  • 2.2 构建工具链
  • 2.2.1 GNU工具链组成
  • 2.2.2 构建工具链的过程
  • 2.2.3 准备工作
  • 2.2.4 构建二进制工具
  • 2.2.5 编译freestanding的交叉编译器
  • 2.2.6 安装内核头文件
  • 2.2.7 编译目标系统的C库
  • 2.2.8 构建完整的交叉编译器
  • 2.2.9 定义工具链相关的环境变量
  • 2.2.10 封装“交叉”pkg-config
  • 2.2.11 关于使用libtool链接库的讨论
  • 2.2.12 启动代码
  • 第3章 构建内核
  • 3.1 内核映像的组成
  • 3.1.1 一级推进系统——setup.bin
  • 3.1.2 二级推进系统——内核非压缩部分
  • 3.1.3 有效载荷——vmlinux
  • 3.1.4 映像的格式
  • 3.2 内核映像的构建过程
  • 3.2.1 kbuild简介
  • 3.2.2 构建过程概述
  • 3.2.3 vmlinux的构建过程
  • 3.2.4 vmlinux.bin的构建过程
  • 3.2.5 setup.bin的构建过程
  • 3.2.6 bzImage的组合过程
  • 3.2.7 内核映像构建过程总结
  • 3.3 配置内核
  • 3.3.1 交叉编译内核设置
  • 3.3.2 基本内核配置
  • 3.3.3 配置处理器
  • 3.3.4 配置内核支持模块
  • 3.3.5 配置硬盘控制器驱动
  • 3.3.6 配置文件系统
  • 3.3.7 配置内核支持ELF文件格式
  • 3.4 构建基本根文件系统
  • 3.4.1 根文件系统的基本目录结构
  • 3.4.2 安装C库
  • 3.4.3 安装shell
  • 3.4.4 安装根文件系统到目标系统
  • 第4章 构建initramfs
  • 4.1 为什么需要initramfs
  • 4.2 initramfs原理探讨
  • 4.2.1 挂载rootfs
  • 4.2.2 解压initramfs到rootfs
  • 4.2.3 挂载并切换到真正的根目录
  • 4.3 配置内核支持initramfs
  • 4.4 构建基本的initramfs
  • 4.5 将硬盘驱动编译为模块
  • 4.5.1 配置devtmpfs
  • 4.5.2 将硬盘控制器驱动配置为模块
  • 4.6 自动加载硬盘控制器驱动
  • 4.6.1 内核向用户空间发送事件
  • 4.6.2 udev加载驱动和建立设备节点
  • 4.6.3 处理冷插拔设备
  • 4.6.4 编译安装udev
  • 4.6.5 配置内核支持NETLINK
  • 4.6.6 配置内核支持inotify
  • 4.6.7 安装modules.alias.bin文件
  • 4.6.8 启动udevd和模拟热插拔
  • 4.7 挂载并切换到根文件系统
  • 4.7.1 挂载根文件系统
  • 4.7.2 切换到根文件系统
  • 第5章 从内核空间到用户空间
  • 5.1 Linux操作系统加载
  • 5.1.1 GRUB映像构成
  • 5.1.2 安装GRUB
  • 5.1.3 GRUB启动过程
  • 5.1.4 加载内核和initramfs
  • 5.2 解压内核
  • 5.2.1 移动内核映像
  • 5.2.2 解压
  • 5.2.3 重定位
  • 5.3 内核初始化
  • 5.3.1 初始化虚拟内存
  • 5.3.2 初始化进程0
  • 5.3.3 创建进程1
  • 5.4 进程加载
  • 5.4.1 加载可执行程序
  • 5.4.2 进程的投入运行
  • 5.4.3 按需载入指令和数据
  • 5.4.4 加载动态链接器
  • 5.4.5 加载动态库
  • 5.4.6 重定位动态库
  • 5.4.7 重定位可执行程序
  • 5.4.8 重定位动态链接器
  • 5.4.9 段RELRO
  • 第6章 构建根文件系统
  • 6.1 初始根文件系统
  • 6.2 以读写模式重新挂载文件系统
  • 6.3 配置内核支持网络
  • 6.3.1 配置内核支持TCP/IP协议
  • 6.3.2 配置内核支持网卡
  • 6.4 启动udev
  • 6.5 安装网络配置工具并配置网络
  • 6.6 安装并配置ssh服务
  • 6.7 安装procps
  • 6.8 安装X窗口系统
  • 6.8.1 安装M4宏定义
  • 6.8.2 安装X协议和扩展
  • 6.8.3 安装X相关库和工具
  • 6.8.4 安装X服务器
  • 6.8.5 安装GPU的2D驱动
  • 6.8.6 安装X的输入设备驱动
  • 6.8.7 运行X服务器
  • 6.8.8 一个简单的X程序
  • 6.8.9 配置内核支持DRM
  • 6.9 安装图形库
  • 6.9.1 安装GLib和libffi
  • 6.9.2 安装ATK
  • 6.9.3 安装libpng
  • 6.9.4 安装GdkPixbuf
  • 6.9.5 安装Fontconfig
  • 6.9.6 安装Cairo
  • 6.9.7 安装Pango
  • 6.9.8 安装libXi
  • 6.9.9 安装GTK
  • 6.9.10 安装GTK图形库的善后工作
  • 6.9.11 一个简单的GTK程序
  • 6.10 安装字体
  • 第7章 构建桌面环境
  • 7.1 窗口管理器
  • 7.1.1 基本原理
  • 7.1.2 创建编译脚本
  • 7.1.3 主要数据结构
  • 7.1.4 初始化
  • 7.1.5 为窗口“落户”
  • 7.1.6 构建窗口装饰
  • 7.1.7 绘制装饰窗口
  • 7.1.8 配置窗口
  • 7.1.9 移动窗口
  • 7.1.10 改变窗口大小
  • 7.1.11 切换窗口
  • 7.1.12 最大化/最小化/关闭窗口
  • 7.1.13 管理已存在的窗口
  • 7.2 任务条和桌面
  • 7.2.1 标识任务条的身份
  • 7.2.2 更新任务条上的任务项
  • 7.2.3 激活任务
  • 7.2.4 高亮显示当前活动任务
  • 7.2.5 显示桌面
  • 7.2.6 桌面
  • 第8章 Linux图形原理探讨
  • 8.1 渲染和显示
  • 8.1.1 渲染
  • 8.1.2 显示
  • 8.2 显存
  • 8.2.1 动态显存技术
  • 8.2.2 Buffer Object
  • 8.3 2D渲染
  • 8.3.1 创建前缓冲
  • 8.3.2 GPU渲染
  • 8.3.3 CPU渲染
  • 8.4 3D渲染
  • 8.4.1 创建帧缓冲
  • 8.4.2 渲染Pipleline
  • 8.4.3 交换前缓冲和后缓冲
  • 8.5 Wayland
展开全部