手把手教你配置内核编译工具链
📚 共计 30 章节
01
内核编译工具链概述
什么是交叉编译工具链 · 为什么需要交叉编译 · 工具链的组成
编译器
链接器
库
02
主机环境准备
安装Ubuntu 22.04 · 配置国内源 · 基础开发包
build-essential
git
wget
03
获取源码
GCC · Linux内核 · binutils · glibc 源码下载
ARM
kernel.org
sourceware
04
配置编译环境
环境变量 PREFIX/TARGET/SYSROOT · 构建目录 · sysroot概念
环境变量
sysroot
05
编译binutils
配置 --target/--prefix/--with-sysroot · 编译安装 · 验证
binutils
汇编器
06
安装内核头文件
make defconfig · headers_install · 验证完整性
ARM64
内核头文件
07
编译gcc第一阶段 (C语言)
--enable-languages=c · --without-headers · 验证简单C程序
gcc
C语言
08
编译glibc
配置 --host/--build/--prefix · 编译安装 · 常见错误解决
glibc
autoconf
09
编译gcc第二阶段 (完整版)
--enable-languages=c,c++ · --with-sysroot · 链接glibc
C++
完整工具链
10
验证工具链
Hello World · 交叉编译 · QEMU模拟 · 问题排查
QEMU
测试
11
使用crosstool-NG自动化构建
安装crosstool-NG · 配置.config · 一键编译 · 对比手动
自动化
crosstool-NG
12
工具链的目录结构分析
bin · lib/gcc · lib · include 目录详解
目录结构
库
13
理解sysroot
什么是sysroot · 作用 · 指定方式 · 与--prefix关系
sysroot
交叉编译
14
多架构支持
ARM · AArch64 · RISC-V · x86_64 · ABI差异
多架构
ABI
15
工具链的调试
gdb调试 · --verbose · 分析编译日志 · 链接错误
gdb
调试
16
优化工具链
--enable-optimize · LTO · glibc配置 · 减小体积
LTO
优化
17
工具链的测试
gcc测试套件 · glibc测试套件 · 分析结果 · 修复失败
测试套件
质量
18
工具链的打包与分发
make install DESTDIR · tar.gz · 安装脚本 · 分发
打包
分发
19
使用Docker构建工具链
Dockerfile · 容器编译 · 导出镜像 · 容器化使用
Docker
容器
20
工具链的版本管理
git管理 · tag · 回滚 · 多版本共存
git
版本
21
工具链的交叉编译实战
C++程序 · pthread · socket网络程序
pthread
socket
22
工具链与构建系统集成
Makefile · CMake(toolchain.cmake) · Yocto/Buildroot
CMake
Yocto
23
常见问题与解决方案
找不到头文件/库 · 链接错误 · 运行时错误
FAQ
segfault
24
工具链的安全加固
fortify-source · stack-protector · relro · bind-now
安全
加固
25
静态与动态链接
glibc静态链接 · 静态/动态程序 · ldd输出
静态链接
ldd
26
musl libc替代方案
下载musl · --enable-wrapper · 编译musl工具链 · 对比glibc
musl
轻量
27
uClibc-ng替代方案
下载uClibc-ng · 配置 · 嵌入式优化
uClibc-ng
嵌入式
28
LLVM/Clang替代方案
下载LLVM · --enable-targets · Clang工具链 · 编译内核
LLVM
Clang
29
工具链的持续集成
GitHub Actions · Jenkins · 自动化测试 · 构建报告
CI
GitHub Actions
30
工具链的未来趋势
RISC-V · LLVM普及 · 容器化 · 云编译服务
RISC-V
云编译