当前位置: 首页 > news >正文

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 https://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_BTFCONFIG_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 为根文件系统镜像,读者可自行通过 busyboxbuildroot 等工具进行构建,本文不做涉及。

看一下运行后效果:

$ 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. 参考资料

  1. 内核文档:Documentation/kbuild/llvm.rst
  2. 内核文档:Documentation/scheduler/sched-ext.rst
  3. 内核文档:tools/sched_ext/README.md

相关文章:

  • 与传统光伏相比 城电科技的光伏太阳花有什么优势?
  • 最新智能优化算法: 阿尔法进化(Alpha Evolution,AE)算法求解23个经典函数测试集,MATLAB代码
  • 利用亚马逊AI代码助手生成、构建和编译一个游戏应用(下)
  • auto关键字的作用
  • Deepseek高效使用指南
  • 每日一题——最长上升子序列与最长回文子串
  • 渗透测试方向的就业前景怎么样?
  • PHP基础部分
  • 人工智能学习(八)之注意力机制原理解析
  • 赖莎莎:创意总监的跨洋之旅
  • 【数据采集】基于Selenium爬取猫眼Top100电影信息
  • 如何搭建Wi-Fi CVE漏洞测试环境:详细步骤与设备配置
  • 第四章 Vue 中的 ajax
  • 基于图像处理的裂缝检测与特征提取
  • easyCode代码模板配置
  • 【ESP32】ESP-IDF开发 | WiFi开发 | HTTPS服务器 + 搭建例程
  • Java 运算符
  • 【第11章:生成式AI与创意应用—11.1 文本生成与创意写作辅助的实现与优化】
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第三节】
  • 什么是 DeepSeek?
  • 购车补贴、“谷子”消费、特色产品,这些活动亮相五五购物节
  • 七部门联合发布《终端设备直连卫星服务管理规定》
  • 荣盛发展股东所持1.17亿股将被司法拍卖,起拍价约1.788亿元
  • 浪尖计划再出发:万亿之城2030课题组赴九城调研万亿产业
  • 中国科学院院士张泽民已任重庆医科大学校长
  • 看见“看得见的手”,看见住房与土地——读《央地之间》