主页 > 人工智能  > 

Linux:用clang编译带sched_ext功能内核

Linux:用clang编译带sched_ext功能内核

文章目录 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.md
标签:

Linux:用clang编译带sched_ext功能内核由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Linux:用clang编译带sched_ext功能内核