Linux:用clang编译带sched_ext功能内核
- 人工智能
- 2025-09-07 10:54:01

文章目录 1. 前言2. 编译过程2.1 准备内核源代码2.2 安装编译工具2.3 配置、编译、运行2.3.1 配置2.3.2 编译2.3.3 运行 3. 参考资料 1. 前言
限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。
2. 编译过程本文基于 Ubuntu 20.04 LTS Desktop 系统进行编译。编译生成代码的目标架构为 ARM64,使用 QEMU 运行。
2.1 准备内核源代码到 kernel.org 下载 Linux 6.13.2 内核:
2.2 安装编译工具安装 clang + llvm,pahole:
sudo apt-get update sudo apt-get install clang-18 lld-18 sudo apt install dwarves如果是 Ubuntu 22.04 LTS Desktop 系统下,可通过如下操作安装高版本 clang :
wget apt.llvm.org/llvm.sh chmod u+x llvm.sh sudo ./llvm.sh 18 sudo apt-get install libelf-dev参考链接:
如何在 Ubuntu 22.04 中安装 Clang 17 或 16 | 20.04 Easy Steps To Install Clang LLVM on Ubuntu 22.04
2.3 配置、编译、运行 2.3.1 配置首先生成默认配置:
# 指定使用 clang-18 make LLVM=-18 ARCH=arm64 O=output defconfig然后通过命令修改配置:
make LLVM=-18 ARCH=arm64 O=output menuconfig开启 sched_ext 配置和其依赖配置:
CONFIG_BPF=y CONFIG_SCHED_CLASS_EXT=y CONFIG_BPF_SYSCALL=y CONFIG_BPF_JIT=y CONFIG_DEBUG_INFO_BTF=y还有一些建议但不是必须开启的配置:
CONFIG_BPF_JIT_ALWAYS_ON=y CONFIG_BPF_JIT_DEFAULT_ON=y CONFIG_PAHOLE_HAS_SPLIT_BTF=y CONFIG_PAHOLE_HAS_BTF_TAG=y其中 CONFIG_PAHOLE_HAS_SPLIT_BTF 和 CONFIG_PAHOLE_HAS_BTF_TAG 都对工具 pahole 的版本有要求,Ubuntu 20.04 安装的 pahole 的版本为 1.21,无法支持 CONFIG_PAHOLE_HAS_BTF_TAG 特性,但不影响 sched_ext 的使用。
另外还可以开启一些调试配置:
# useful debug features for sched_ext CONFIG_DEBUG_INFO=y CONFIG_SCHED_DEBUG=y CONFIG_DEBUG_INFO_DWARF5=y CONFIG_DEBUG_INFO_BTF_MODULES=y 2.3.2 编译 make LLVM=-18 ARCH=arm64 O=output -j8 make LLVM=-18 ARCH=arm64 O=output -j8 modules编译后生成的 vmlinux 编译器信息是 clang-18:
2.3.3 运行 qemu-system-aarch64 -machine virt,virtualization=true,gic-version=3 \ -cpu cortex-a53 -smp 2 -m 1024M \ -nographic \ -kernel linux-6.13.2/arch/arm64/boot/Image \ -append "console=ttyAMA0 root=/dev/vda rw rootfstype=ext4 init=/init" \ -drive file=arm64-ubuntu-20.04.1.img,format=raw,index=0,media=disk其中 arm64-ubuntu-20.04.1.img 为根文件系统镜像,读者可自行通过 busybox,buildroot 等工具进行构建,本文不做涉及。
看一下运行后效果:
$ uname -r 6.13.2 $ ls -l /sys/kernel/sched_ext/ total 0 -r--r--r-- 1 root root 4096 Feb 16 17:41 enable_seq -r--r--r-- 1 root root 4096 Feb 16 17:41 hotplug_seq -r--r--r-- 1 root root 4096 Feb 16 17:41 nr_rejected -r--r--r-- 1 root root 4096 Feb 16 17:41 state -r--r--r-- 1 root root 4096 Feb 16 17:41 switch_all 3. 参考资料 内核文档:Documentation/kbuild/llvm.rst内核文档:Documentation/scheduler/sched-ext.rst内核文档:tools/sched_ext/README.mdLinux:用clang编译带sched_ext功能内核由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Linux:用clang编译带sched_ext功能内核”
上一篇
Golang官方编程指南
下一篇
Java运算符