本文介绍了如何安装 Project-C 维护的带有
Alternative CPU Schedulers
的 Linux Kernel
下载源代码
下载 kernel 源代码,默认为 5.15-lts 分支
1 | git clone https://gitlab.com/songqianli/linux-prjc.git |
安装软件包
1 | sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison |
内核代码配置
-
进入源代码目录
1 | cd linux-prjc/ |
-
从当前机器的启动目录拷贝配置信息到源代码目录
这步操作的目的是将我们编译内核的配置采用用当前环境一致的配置
1 | cp -v /boot/config-$(uname -r) .config |
-
可以通过如下命令启动配置界面
1 | make menuconfig |
可以看出里面包含所有的内核组件,包括文件系统,网络,IO 栈,虚拟化和设备驱动等等。如果你不熟悉,可以不做任何修改。
编译
-
启动编译
参数是并发数量,通常是 CPU 的 2 倍
1 | make -j 12 |
-
提醒是否配置
Alternative CPU Schedulers
1 | * |
如果要使用BMQ
或者PDS-mq
算法,输入Y
,否则输入n
输入Y
后会提示选择BMQ
还是PDS
算法。
这里如果不使用 Project-C 的调度算法就输入
n
后跳过,默认使用CFS
算法进行 CPU 调度。
-
安装模块
1 | sudo make modules_install |
成功输出:
-
安装内核
1 | sudo make install |
成功输出:
启用内核做引导
-
启用内核做引导
1 | sudo update-initramfs -c -k 5.15.3+ |
-
更新 grub
1 | sudo update-grub |
设置默认启动内核
-
修改 grub 配置
1 | sudo vi /etc/default/grub |
将GRUB_DEFAULT
改为GRUB_DEFAULT="1>0"
(含义:第一个菜单的第 2 项,第二个菜单的第 1 项),或者GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.3+"
-
更新 grub
1 | sudo update-grub |
问题排查:
1. CONFIG_X86_X32 enabled but no binutils support
-
先尝试:
sudo apt install binutils
-
如果不是工具的版本问题,再排查在
make -j 12
时有没有报错,检查报错的问题
2. No rule to make target ‘debian/certs/debian-uefi-certs.pem’
编辑.config
将下面两项的配置改为空:
1 | CONFIG_SYSTEM_TRUSTED_KEYS="" |
3. sed: can’t read modules.order: No such file or directory
make
出错,检查make -j 12
的 log 有没有报错
4. BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
完整错误信息:
1 | BTF: .tmp_vmlinux.btf: pahole (pahole) is not available |
解决方案:
1 | sudo apt install dwarves |
5. *** Missing file: arch/x86/boot/bzImage
错误信息:
1 | *** Missing file: arch/x86/boot/bzImage |
解决方案:在sudo make install
前编译bzImage
:
1 | make bzImage |
6. /bin/sh: 1: zstd: not found
1 | sudo apt-get install zstd |