RaaX's Blog

Back

🔧 第一步:安装普通 Ubuntu 虚拟机#

如果还没安装系统,可按下面步骤:

# 创建虚拟磁盘
qemu-img create -f qcow2 ubuntu24.qcow2 20G

# 启动并加载 ISO 安装
qemu-system-x86_64 \
  -enable-kvm \
  -cpu host -smp 4 -m 4096 \
  -hda ubuntu24.qcow2 \
  -cdrom ubuntu-24.04-live-server-amd64.iso \
  -boot d \
  -net nic -net user \
  -serial mon:stdio
bash

🧱 1. 在服务器上编译好实时内核(适用于虚拟机)#

✅ 1.1 下载源码和补丁#

sudo apt update
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev bc wget curl

wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.8.tar.xz
tar -xf linux-6.8.tar.xz
cd linux-6.8

wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/6.8/older/patch-6.8-rt8.patch.xz
xz -d patch-6.8-rt8.patch.xz

patch -p1 < ../patch-6.8-rt8.patch
bash

✅ 1.2 配置内核(适配 QEMU 虚拟机)#

make defconfig
make menuconfig
bash

修改如下内容:

-> General setup
   -> Preemption Model: (Fully Preemptible Kernel (RT))
plaintext

General Setup -> Timers subsystem -> Timer tick handling 设置为 Full dynticks system General Setup -> Timers subsystem 开启 High Resolution Timer Support General Setup -> Preemption Model 设置为 Fully Preemptible Kernel (Real Time) Processor type and features -> Timer frequency 设置为 1000 HZ Device Drivers -> staging drivers 设置为 不开启 ——[ ] 默认开启,按N取消

修改.config的安全启动密钥配置内容:

CONFIG_SYSTEM_TRUSTED_KEYS=“”  
CONFIG_SYSTEM_REVOCATION_KEYS=“”
plaintext

修改.config的debug内容: CONFIG_DEBUG_INFO=n 不然新内核带debug信息超大!

✅ 1.3 编译 bzImage 和模块#

make -j$(nproc)
make INSTALL_MOD_PATH=./modroot modules_install
bash

这将得到:

  • arch/x86/boot/bzImage(可引导内核)
  • modroot/lib/modules/6.8.0-rt8/(内核模块)

📦 2. 将编译产物复制到虚拟机中#

假设你虚拟机磁盘为 ubuntu24.qcow2,挂载虚拟磁盘 qcow2,手动复制文件(推荐)

# 在编译服务器上,挂载 qcow2
sudo apt install libguestfs-tools
sudo guestmount -a ubuntu24.qcow2 -i /mnt

sudo -i
# 拷贝 bzImage 和 modules
cp arch/x86/boot/bzImage /mnt/boot/vmlinuz-6.8.0-rt8
cp -r modroot/lib/modules/6.8.0-rt8 /mnt/lib/modules/

# 也可生成 initrd(可选)
chroot /mnt update-initramfs -c -k 6.8.0-rt8
chroot /mnt update-grub

# 卸载磁盘
sudo guestunmount /mnt
bash

🚀 3. 启动虚拟机并选择新内核#

QEMU 启动虚拟机:#

qemu-system-x86_64 \
  -enable-kvm \
  -cpu host -smp 4 -m 4096 \
  -hda ubuntu24.qcow2 \
  -net nic -net user \
  -serial mon:stdio
bash

如果 /boot/grub/grub.cfg 配置正确,系统应能识别 vmlinuz-6.8.0-rt8 自动启动。否则在启动菜单中选择。

![[51bffe12671bc853c3e74eb2228ceaf8.png]]

✅ 解决方法:#

在原始编译机器或虚拟机里,执行:

sudo update-initramfs -c -k 6.8.0-rt8
bash

然后确保生成的 /boot/initrd.img-6.8.0-rt8 一并拷贝到目标系统的 /boot/ 下。

或手动生成:

sudo mkinitramfs -o /boot/initrd.img-6.8.0-rt8 6.8.0-rt8
bash

并更新 GRUB:

sudo update-grub
bash

![[6022c08f3d82624e11f354f887abe920 2.png]]

通过 grub-set-default 设置默认内核(推荐)#

这个方法最安全,适用于 Ubuntu 的默认 GRUB 引导流程。

步骤如下:#

  1. 查看当前 GRUB 菜单项编号:
grep "menuentry" /boot/grub/grub.cfg | cut -d "'" -f2
bash

示例输出:

Ubuntu, with Linux 6.8.0-rt8
Ubuntu, with Linux 6.8.0-rt8 (recovery mode)
Ubuntu, with Linux 6.8.0-24-generic
Ubuntu, with Linux 6.8.0-24-generic (recovery mode)
text
  1. 设置默认项为 RT 内核:
sudo grub-set-default "Ubuntu, with Linux 6.8.0-rt8"
bash
  1. 更新 GRUB 并重启:
sudo update-grub
sudo reboot
bash

❓验证默认启动项:#

sudo grub-editenv list
bash

会看到:

saved_entry=Ubuntu, with Linux 6.8.0-rt8
text

即代表默认启动项设置成功。

✅ 4. 验证实时内核#

uname -a
# 应该是 Linux 6.8.0-rt8

cat /sys/kernel/realtime
# 输出应为 1,表示实时模式已启用
bash
Linux_PREEMPT_RT_Compile
https://astro-pure.js.org/blog/linux_preempt_rt_compile
Author RaaX
Published at October 1, 2025
Comment seems to stuck. Try to refresh?✨