使用 Clang/LLVM 构建 Linux 内核

概述

Linux 内核是用 C 语言编写的,但其并不完全符合 ANSI C 标准,实际上,内核开发者使用的 C 语言涵盖了 ISO C99 标准和 GNU C 扩展特性,这使得内核的构建长期依赖 gcc。

ClangLLVM 的持续性工作改变了这种现状,使得其可作为构建内核的替代工具。一些发行版,例如 Android、ChromwOS、OpenMandriva 等都在使用 Clang 编译的内核。

关于 LLVM 的简单介绍,参考 [LLVM 项目介绍]。Clang 是 LLVM 的前端,支持 C 语言和内核所需要的 GNU C 扩展。

使用 LLVM 构建

工具准备

安装 LLVM 和 对应的链接器 lld: $ sudo apt-get install clang lld,该命令会自动安装所依赖的其他软件包。

构建

1
2
3
$ make CC=clang LD=ld.lld AR=llvm-ar NM=llvm-nm STRIP=llvm-strip \
OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump READELF=llvm-readelf AS=llvm-as \
HOSTCC=clang HOSTCXX=clang++ HOSTAR=llvm-ar HOSTAS=llvm-as HOSTLD=ld.lld

目前支持的架构参考 使用 Clang/LLVM 构建 Linux

使用 lldb 调试

安装 LLVM 的调试器 lldb