描述
开 本: 128开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787115558497丛书名: 中国自主产权芯片技术与应用丛书
手把手教你Fedora 发行版移植技巧
可拓展,在系统制作中掌握方法与思路
作者长期从事Linux 系统移植、定制和开发工作,经验丰富。能够帮助大家更好地理解Linux 系统制作的关键技术,学会解决更多问题。
本书通过讲解如何在龙芯CPU下制作Linux系统及其发行版来介绍Linux操作系统的组成,同时为读者提供了一种为非x86架构CPU制作和移植发行版的思路。本书将制作Linux系统的过程分为准备、制作临时系统、制作目标系统、制作发行版4个阶段。准备阶段可让读者对实际制作过程中用到的技术细节有所了解;制作临时系统阶段介绍如何为没有可用系统的机器制作一个可用的系统;制作目标系统阶段介绍如何在一个临时系统的基础上将Fedora系统移植到目标机器上;制作发行版阶段配合软件仓库、安装系统、包构建管理制作等对目标系统进行扩展,完成一个相对完整的发行版的制作。
第 一阶段 准备
第01章 龙芯CPU和Linux发行版
1.1 龙芯CPU 003
1.1.1 龙芯CPU的分类 003
1.1.2 龙芯CPU的指令集架构和微架构 004
1.1.3 龙芯CPU的兼容性问题 005
1.2 GNU/Linux操作系统和发行版 006
1.2.1 GNU简介 006
1.2.2 Linux简介 007
1.2.3 GNU/Linux的发行版 008
1.3 基础发行版和衍生发行版 010
1.3.1 基础发行版 010
1.3.2 衍生发行版 010
1.3.3 如何选择发行版 011
1.4 Linux相关标准 012
1.4.1 POSIX标准 012
1.4.2 LSB——Linux系统兼容的新起点 012
1.4.3 FHS——文件存放标准 013
1.5 本书的目标 013
1.6 版权,关于开源协议 014
第02章 基础知识
2.1 方案选择 017
2.1.1 初始系统与目标系统 017
2.1.2 初始系统的基本要求 017
2.1.3 目标系统的制作方法 018
2.1.4 本地编译和交叉编译 018
2.2 交叉编译的原理 020
2.2.1 了解CPU 020
2.2.2 交叉编译的定义 021
2.2.3 交叉编译的适用范围 022
2.2.4 常用术语解释 022
2.2.5 交叉编译目标系统 023
2.2.6 Sysroot与DESTDIR 027
2.3 Fedora Linux发行版 030
2.3.1 Fedora Linux简介 030
2.3.2 Fedora Linux的包管理工具 031
2.3.3 DNF软件仓库工具 031
2.3.4 RPM文件简介 035
2.3.5 操作包文件的命令 037
2.3.6 RPM包文件构建工具 041
2.3.7 SPEC描述文件介绍 043
2.3.8 Fedora Linux实用网站 045
2.4 软件包配置常见参数 046
2.4.1 安装路径设置 046
2.4.2 程序名称定义 047
2.4.3 平台系统定义 047
2.4.4 功能开关选项和软件设置选项 048
2.4.5 环境变量 049
第03章 制作方案设计
3.1 外援阶段 051
3.1.1 选择制作系统平台 051
3.1.2 交叉编译临时系统 051
3.1.3 阶段要领 052
3.2 可启动阶段 053
3.2.1 移动介质启动系统 053
3.2.2 安装临时系统 054
3.2.3 阶段要领 054
3.3 自立阶段 054
3.3.1 临时系统完善阶段 055
3.3.2 RPM打包环境阶段 055
3.3.3 工具链制作阶段 056
3.3.4 临时系统替换阶段 056
3.3.5 重构系统阶段 057
3.4 补充阶段 057
3.5 完成阶段 057
3.6 准备开工 058
第二阶段 制作临时系统
第04章 创作基地
4.1 搭建初始系统 061
4.1.1 安装一个系统环境 061
4.1.2 配置初始系统 062
4.1.3 下载全部源代码 063
4.1.4 登录初始系统 064
4.1.5 配置软件仓库 065
4.2 创作基地的搭建和设置 067
4.2.1 设置环境变量 067
4.2.2 建立创作基地目录 068
4.2.3 创建必要的目录 068
4.2.4 创建制作用户 069
4.2.5 设置制作用户 070
第05章 交叉工具链
5.1 准备工作 076
5.1.1 交叉工具链制作的目的 076
5.1.2 交叉工具链中软件的编译方法 076
5.1.3 安装交叉工具链所需的源代码包 077
5.2 开始制作 078
5.2.1 内核头文件 078
5.2.2 Binutils交叉工具 080
5.2.3 任意精度算法库(GMP) 084
5.2.4 高精度浮点数算法库(MPFR) 084
5.2.5 任意高精度的复数计算库(LibMPC) 085
5.2.6 集合和关系的数学算法库(ISL) 086
5.2.7 多面体数据转换程序库(CLooG) 086
5.2.8 GCC交叉工具(仅支持C语言) 087
5.2.9 目标系统的Glibc 091
5.2.10 GCC交叉工具(支持C语言和C 语言) 096
5.2.11 测试交叉工具链 098
5.2.12 Pkgconf软件包 101
5.2.13 Grub软件包 103
第06章 制作一个临时系统
6.1 准备工作 107
6.1.1 制作环境设置 107
6.1.2 准备软件包 110
6.2 临时系统的工具链 111
6.2.1 任意精度算法库(GMP) 111
6.2.2 高精度浮点数算法库(MPFR) 112
6.2.3 任意高精度的复数计算库(LibMPC) 113
6.2.4 集合和关系算法库(ISL) 113
6.2.5 多面体参数算法库(CLooG) 114
6.2.6 ZIP格式支持库(Zlib) 114
6.2.7 汇编工具集(Binutils) 115
6.2.8 编译器(GCC) 117
6.3 基础库软件包 120
6.3.1 文本环境交互函数库(Ncurses) 120
6.3.2 压缩工具(Bzip2) 121
6.3.3 压缩工具(XZ) 124
6.3.4 行编辑支持库(Readline) 124
6.3.5 加密算法支持库(OpenSSL) 125
6.3.6 正则表达式处理库(PCRE) 126
6.3.7 SELinux策略库(Libsepol) 126
6.3.8 SELinux文件级安全策略库(LibSELinux) 127
6.3.9 小型数据库(GDBM) 127
6.3.10 便携式多功能库(NSPR) 128
6.3.11 SQL数据库(SQLite) 129
6.3.12 网络安全服务(NSS) 130
6.3.13 命令行参数解析库(Popt) 132
6.3.14 多种归档格式库(Libarchive) 133
6.3.15 伯克利数据库(LibDB) 133
6.3.16 权限管理库(Libcap) 134
6.3.17 HTTP协议服务库(Libmicrohttpd) 135
6.3.18 传输数据协议库(CURL) 136
6.3.19 ELF格式支持工具(ELFUtils) 136
6.3.20 压缩工具(LZ4) 137
6.3.21 压缩工具(Zstd) 138
6.3.22 XML解析库(Expat) 138
6.4 基本命令软件包 139
6.4.1 用户交互环境工具(Bash) 139
6.4.2 常用命令工具集(Coreutils) 141
6.4.3 文件类型查询工具(File) 141
6.4.4 文件查找工具(Findutils) 142
6.4.5 文本处理工具(Gawk) 142
6.4.6 国际化语言支持工具(Gettext) 143
6.4.7 文本匹配搜索工具(Grep) 144
6.4.8 压缩工具(Gzip) 145
6.4.9 文本流编辑工具(Sed) 145
6.4.10 Linux系统常用工具集
(Util-linux) 145
6.4.11 Linux内核模块管理工具
(Kmod) 146
6.4.12 文本编辑器(VIM) 148
6.4.13 命令路径查询工具(Which) 150
6.4.14 网络管理工具(IPRoute) 150
6.4.15 网络地址自动获取工具
(DHCPCD) 151
6.4.16 验证工具(FIPSCheck) 152
6.4.17 主机互联工具(OpenSSH) 152
6.4.18 提权执行工具(Sudo) 153
6.5 文件系统工具 155
6.5.1 Ext文件系统工具(E2fsprogs) 155
6.5.2 Xfs文件系统工具(Xfsprogs) 156
6.5.3 Dos文件系统工具(Dosfstools) 157
6.6 开发相关工具 158
6.6.1 语法分析工具(Bison) 158
6.6.2 测试工具(Check) 158
6.6.3 文件比较工具(Diffutils) 159
6.6.4 编译过程控制工具(Make) 159
6.6.5 补丁文件使用工具(Patch) 160
6.6.6 文件打包工具(Tar) 160
6.6.7 信息阅读工具(Texinfo) 161
6.6.8 宏处理工具(M4) 161
6.6.9 软件包安装信息读取工具
(Pkgconf) 162
6.6.10 自动化配置脚本生成工具
(Autoconf) 163
6.6.11 自动化编译脚本生成工具
(Automake) 164
6.6.12 GNU通用库支持工具(Libtool) 164
6.6.13 程序生成工具(Flex) 165
6.6.14 脚本语言(TCL) 166
6.6.15 编程语言(Lua) 167
6.6.16 文件打包工具(Cpio) 167
6.6.17 用户交互环境工具(TCSH) 168
6.7 包管理工具 169
6.7.1 RPM包管理工具(RPM) 169
6.7.2 配置RPM包管理工具 171
6.8 系统启动的支持 172
6.8.1 启动管理器(Systemd) 172
6.8.2 消息总线系统(D-Bus) 174
6.8.3 密码管理工具(Shadow-Utils) 175
6.8.4 Linux内核 176
6.8.5 启动器(GRUB) 179
第07章 在龙芯上启动临时系统
7.1 设置临时系统 182
7.2 打包临时系统 189
7.3 制作基于U盘的启动系统 190
7.4 遗漏的软件包 195
7.5 安装临时系统 196
7.6 启动龙芯机器 203
第三阶段 制作目标系统
第08章 目标系统工具链
8.1 为编译做准备 209
8.2 完善临时系统 211
8.2.1 脚本语言工具(Perl) 212
8.2.2 脚本语言(Python3) 214
8.2.3 版本管理工具(Git) 215
8.2.4 文件下载工具(Wget) 215
8.2.5 文本匹配搜索工具(Grep) 216
8.2.6 程序调试工具(GDB) 216
8.2.7 DWARF调试信息工具(DWZ) 217
8.2.8 进程查询工具(Procps-ng) 218
8.3 编译第 一个RPM源代码包 218
8.3.1 编译方法 218
8.3.2 软件版本和修订版本 220
8.3.3 SPEC描述文件的修改 220
8.3.4 使用SPEC描述文件进行编译 221
8.3.5 重新制作RPM源代码包 222
8.3.6 RPM文件的安装 222
8.4 RPM文件制作环境完善 225
8.4.1 RPM扩展包
(Redhat-Rpm-Config) 225
8.4.2 修改源代码包 225
8.4.3 强制编译源代码包 226
8.5 发行版信息包 228
8.5.1 发行版仓库源信息包
(Fedora-Repos) 228
8.5.2 发行版版本信息包
(Fedora-Release) 228
8.5.3 安装循环依赖 229
8.6 循环依赖 231
8.6.1 什么是循环依赖 231
8.6.2 依赖条件的类型 232
8.6.3 破坏与还原 233
8.6.4 循环依赖解决建议 237
8.7 标准化系统软件包 239
8.7.1 ISO代码标准(ISO-Codes) 239
8.7.2 基础配置文件集合(Setup) 239
8.7.3 根目录结构(Filesystem) 240
8.7.4 基础系统虚包(Basesystem) 243
8.8 目标系统的工具链 243
8.8.1 内核头文件(Kernel-Header) 244
8.8.2 基础C库(Glibc) 247
8.8.3 调整工具链 253
8.8.4 ZIP格式支持库(Zlib) 255
8.8.5 哈希密码函数库(Libxcrypt) 257
8.8.6 汇编工具集(Binutils) 259
8.8.7 任意精度算法库(GMP) 264
8.8.8 高精度浮点数算法库(MPFR) 267
8.8.9 任意高精度的复数计算库
(LibMPC) 267
8.8.10 集合和关系的数学算法库(ISL) 268
8.8.11 压缩工具(XZ) 269
8.8.12 压缩工具(LZ4) 269
8.8.13 压缩工具(ZSTD) 269
8.8.14 编译器(GCC) 270
8.8.15 重新编译工具链 278
第09章 残破的目标系统
9.1 制作阶段须知 286
9.1.1 多库支持(Multilib) 286
9.1.2 修改SRPM文件 286
9.1.3 自举(BootStrap) 287
9.1.4 循环依赖 288
9.1.5 补丁文件 289
9.1.6 制作顺序 289
9.1.7 软件包的测试 289
9.2 基础目标系统 290
9.2.1 系统交互环境 290
9.2.2 常用系统工具 293
9.2.3 系统基础软件包 303
9.2.4 图形相关软件包 317
9.2.5 文档相关软件包 326
9.2.6 系统安全组件 336
9.2.7 包管理工具 348
9.2.8 启动相关软件包 355
9.2.9 配置和重启系统 372
第 10章 完善目标系统
10.1 临时软件仓库 376
10.1.1 仓库管理工具 376
10.1.2 创建本地仓库 383
10.1.3 仓库配置文件 384
10.1.4 仓库索引文件 386
10.1.5 使用本地仓库 387
10.2 坚硬的自依赖 395
10.2.1 逆交叉工具链 396
10.2.2 回归创作基地 407
10.2.3 解决自依赖 411
10.3 家族类软件包 416
10.3.1 循环构建脚本 416
10.3.2 准备循环构建环境 418
10.3.3 Perl家族类软件包 419
10.3.4 Python家族类软件包 424
10.4 图形桌面交互环境 427
10.4.1 图形桌面基础软件包 427
10.4.2 Xwindow图形系统 440
10.4.3 登录管理器 444
10.4.4 图形桌面环境 448
10.4.5 中文支持 463
10.4.6 声音支持 467
10.4.7 主题和图标 473
10.4.8 启动桌面 478
10.5 再次编译 479
10.5.1 准备工作 479
10.5.2 重构软件包 481
10.5.3 分布式编译 485
10.5.4 重构当前系统 492
10.5.5 构建全部软件包 495
第四阶段 制作发行版
第 11章 软件仓库
11.1 分组文件 507
11.1.1 下载分组文件 507
11.1.2 分组文件的内容 507
11.1.3 分组文件的修改 508
11.1.4 分组文件的使用 508
11.1.5 分组文件的验证 509
11.2 签名 510
11.2.1 签名的作用 510
11.2.2 生成密钥对 510
11.2.3 密钥签名配置 512
11.2.4 RPM文件签名 513
11.2.5 软件仓库签名 514
11.2.6 发布公钥 514
11.2.7 验证安装签名软件 516
11.3 发布软件仓库 517
11.3.1 安装Web服务 517
11.3.2 配置软件仓库 519
11.3.3 动态仓库地址 521
11.3.4 同步软件仓库 527
11.3.5 维护软件仓库 529
第 12章 制作安装镜像
12.1 启动镜像制作工具 532
12.1.1 相关准备 532
12.1.2 制作启动镜像文件 534
12.1.3 使用启动镜像文件 536
12.2 操作系统的安装 538
12.2.1 相关准备 538
12.2.2 图形桌面的Live系统 539
12.2.3 安装操作系统 541
12.3 查看和修改Live系统 544
第 13章 包构建管理系统
13.1 包构建工具 546
13.1.1 Mock的工作原理 546
13.1.2 Mock的安装 547
13.1.3 Mock的配置 547
13.1.4 Mock的初始化 549
13.1.5 Mock的使用 550
13.2 包管理系统 551
13.2.1 了解Koji 551
13.2.2 Koji的安装 552
13.2.3 Koji的使用 568
结束语
本书有两个鲜明的特点。
一是易读。一个大型Linux 发行版在一个新体系结构上的移植和制作,是一件很有挑战性的事情,但本书将这个过程讲得明明白白。许多复杂的概念,作者都用简单的语言将其解释得清清楚楚。
二是实用。本书是实战经验的结晶,覆盖了Linux 发行版移植和制作的各个环节。但它又不是简单的过程罗列,作者总结了很多方法和思路,能够帮助大家更好地理解Linux 系统制作的关键技术,学会解决更多问题。
目前国产CPU 和操作系统的发展蒸蒸日上,正是用人之际,但是相关的专业人才非常稀缺。我很
评论
还没有评论。