
之前安装了一个实时内核结果电脑一开实时内核就发烫然后温度抬高就关机后来才发现是因为NVIDIA 图形环境没有编译成功导致一开浏览器就高温爆炸所以后面重新安装了实时内核最主要的就是NVIDIA 模块重新安装成功。Ubuntu 20.04 安装 5.15.209-rt96 实时内核并配置 NVIDIA 驱动用于 Franka 机械臂控制1. 背景说明本文记录一次在 Ubuntu 20.04 上手动编译安装 PREEMPT_RT 实时内核的完整过程。目标是用于 Franka Emika Panda 机械臂真机控制同时希望保留 NVIDIA 图形环境方便日常调试代码、浏览器查资料、运行图形界面程序。本次安装目标Linux 5.15.209-rt96-lenovo PREEMPT_RTy NVIDIA Driver 570.133.20 Ubuntu 20.04最终验证结果uname -r # 5.15.209-rt96-lenovo cat /sys/kernel/realtime # 1 nvidia-smi # NVIDIA-SMI 正常显示 dkms status | grep -i nvidia # nvidia, 570.133.20, 5.15.209-rt96-lenovo, x86_64: installed2. 安装前注意事项2.1 一定保留原来的可用内核安装实时内核前一定不要删除原来的普通内核。例如本文机器上保留了5.15.0-139-generic 5.15.0-140-lowlatency如果实时内核启动失败还可以从 GRUB 的 Advanced options 里选择普通内核进入系统。2.2 实时内核不等于一定适合跑桌面Franka 真机控制需要实时性但浏览器、RViz、RealSense、点云、NVIDIA 图形界面都会增加系统负载和温度。本文的目标是实时控制 Franka 时使用 PREEMPT_RT 调试代码时保留 NVIDIA/图形界面 正式跑真机时尽量少开浏览器、RViz、点云、视频网页2.3 本机硬件环境CPUAMD Ryzen 9 5900HX GPUNVIDIA GeForce RTX 3080 Laptop GPU 系统Ubuntu 20.04 目标内核5.15.209-rt96-lenovo3. 先确认当前内核uname -r本文开始时处于普通内核5.15.0-139-generic建议所有编译操作都先在普通稳定内核中进行。4. 修复 apt 源问题如果执行sudo apt update出现类似E: 仓库 “https://dl.google.com/linux/chrome-stable/deb stable Release” 不再含有 Release 文件。可以先临时禁用 Chrome 源grep -R dl.google.com/linux/chrome /etc/apt/sources.list /etc/apt/sources.list.d/*.list如果源文件是/etc/apt/sources.list.d/google-chrome.list执行sudo sed -i.bak /dl.google.com\/linux\/chrome/s/^/# / /etc/apt/sources.list.d/google-chrome.list然后重新更新sudo apt update5. 安装编译依赖sudo apt install build-essential bc curl debhelper dpkg-dev devscripts \ fakeroot libssl-dev libelf-dev bison flex cpio kmod rsync libncurses-dev \ dkms pkg-config cpufrequtils6. 下载 Linux 5.15.209 和 RT96 补丁mkdir -p ~/rt_kernel_build cd ~/rt_kernel_build curl -LO https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.209.tar.xz curl -LO https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.15/patch-5.15.209-rt96.patch.xz解压xz -d linux-5.15.209.tar.xz xz -d patch-5.15.209-rt96.patch.xz tar xf linux-5.15.209.tar cd linux-5.15.209打 RT 补丁patch -p1 ../patch-5.15.209-rt96.patch如果一路显示patching file ...说明补丁成功。7. 使用 Ubuntu 原内核配置作为模板不要从默认配置开始。建议直接复制当前稳定内核配置cp /boot/config-5.15.0-139-generic .config然后设置关键配置scripts/config --disable DEBUG_INFO scripts/config --disable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT scripts/config --disable DEBUG_KERNEL scripts/config --disable SYSTEM_TRUSTED_KEYS scripts/config --disable SYSTEM_REVOCATION_LIST scripts/config --disable PREEMPT_NONE scripts/config --disable PREEMPT_VOLUNTARY scripts/config --disable PREEMPT scripts/config --enable PREEMPT_RT scripts/config --set-str LOCALVERSION -rt96-lenovo生成配置make olddefconfig检查grep CONFIG_PREEMPT_RT .config希望看到CONFIG_PREEMPT_RTy8. 处理 localversion 导致版本名重复的问题打完 RT 补丁后源码目录里可能有localversion-rt里面内容是-rt96如果同时设置了CONFIG_LOCALVERSION-rt96-lenovo可能导致最终内核版本名变成5.15.209-rt96-rt96-lenovo可以检查make kernelrelease如果看到重复的rt96执行cd ~/rt_kernel_build/linux-5.15.209 mv localversion-rt ../localversion-rt.bak scripts/config --set-str LOCALVERSION -rt96-lenovo make olddefconfig rm -rf debian make kernelrelease希望最终看到5.15.209-rt96-lenovo9. 禁用 NFSD绕过 nfs4state.c 编译错误编译过程中可能遇到如下错误fs/nfsd/nfs4state.c:1826:10: note: in expansion of macro ‘clamp_t’ make[5]: *** [scripts/Makefile.build:289fs/nfsd/nfs4state.o] 错误 1这是 NFS Server 相关模块的编译错误。用于 Franka 控制时不需要 NFS Server可以禁用cd ~/rt_kernel_build/linux-5.15.209 scripts/config --disable NFSD scripts/config --disable NFSD_V2 scripts/config --disable NFSD_V3 scripts/config --disable NFSD_V4 scripts/config --disable NFSD_BLOCKLAYOUT scripts/config --disable NFSD_SCSILAYOUT scripts/config --disable NFSD_FLEXFILELAYOUT scripts/config --disable NFSD_V4_2_INTER_SSC make olddefconfig检查grep CONFIG_NFSD .config希望看到# CONFIG_NFSD is not set禁用 NFSD 不影响Franka 控制 libfranka ROS 浏览器 普通网络连接 NVIDIA Wi-Fi / 有线网卡它只是关闭本机作为 NFS Server 给其他机器共享目录的功能。10. 处理 X32 warning如果出现arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support可以尝试禁用scripts/config --disable X86_X32_ABI scripts/config --disable X86_X32 make olddefconfig本文实际编译时即使仍然有该 warning也没有阻止编译成功。11. 编译内核 deb 包笔记本编译内核容易过热不建议直接-j16或-j10。建议保守一点cd ~/rt_kernel_build/linux-5.15.209 make -j4 bindeb-pkg 21 | tee ~/rt_kernel_build/build_rt_j4_final.log如果还担心过热可以用make -j3 bindeb-pkg 21 | tee ~/rt_kernel_build/build_rt_j3_final.log如果报错查看关键错误grep -n -iE error:|fatal error|killed|No such file|undefined|pahole|BTF|failed|cannot|缺少|错误 \ ~/rt_kernel_build/build_rt_j4_final.log | tail -n 120编译成功时会看到类似dpkg-deb: 正在 ../linux-libc-dev_5.15.209-rt96-lenovo-1_amd64.deb 中构建软件包 dpkg-deb: 正在 ../linux-image-5.15.209-rt96-lenovo_5.15.209-rt96-lenovo-1_amd64.deb 中构建软件包 dpkg-buildpackage: info: binary-only upload12. 安装新实时内核查看生成的 deb 包cd ~/rt_kernel_build ls -lh *.deb本文生成了linux-headers-5.15.209-rt96-lenovo_5.15.209-rt96-lenovo-1_amd64.deb linux-image-5.15.209-rt96-lenovo_5.15.209-rt96-lenovo-1_amd64.deb linux-libc-dev_5.15.209-rt96-lenovo-1_amd64.deb安装sudo dpkg -i linux-image-5.15.209-rt96-lenovo_*.deb \ linux-headers-5.15.209-rt96-lenovo_*.deb \ linux-libc-dev_5.15.209-rt96-lenovo-1_amd64.deb修复依赖并更新 GRUBsudo apt -f install sudo update-grub如果 GRUB 输出里能看到找到 Linux 镜像/boot/vmlinuz-5.15.209-rt96-lenovo 找到 initrd 镜像/boot/initrd.img-5.15.209-rt96-lenovo说明新内核已经被 GRUB 识别。13. 处理 NVIDIA DKMS 在 PREEMPT_RT 下编译失败安装内核时NVIDIA DKMS 可能报错The kernel you are installing for is a PREEMPT_RT kernel! The NVIDIA driver does not support real-time kernels. *** Failed PREEMPT_RT sanity check. Bailing out! ***这是 NVIDIA 驱动检测到 PREEMPT_RT 后主动退出。先检查当前 NVIDIA DKMS 状态dkms status | grep -i nvidia如果只看到普通内核例如nvidia, 570.133.20, 5.15.0-139-generic, x86_64: installed nvidia, 570.133.20, 5.15.0-140-lowlatency, x86_64: installed说明还没有为 RT 内核安装 NVIDIA 模块。手动强制忽略 PREEMPT_RT 检查cd ~/rt_kernel_build sudo env IGNORE_PREEMPT_RT_PRESENCE1 IGNORE_CC_MISMATCH1 \ dkms build -m nvidia -v 570.133.20 -k 5.15.209-rt96-lenovo \ 21 | tee ~/rt_kernel_build/nvidia_dkms_build_rt.log如果成功会看到DKMS: build completed.然后安装sudo env IGNORE_PREEMPT_RT_PRESENCE1 IGNORE_CC_MISMATCH1 \ dkms install -m nvidia -v 570.133.20 -k 5.15.209-rt96-lenovo \ 21 | tee ~/rt_kernel_build/nvidia_dkms_install_rt.log如果成功会看到DKMS: install completed.再次检查dkms status | grep -i nvidia希望看到nvidia, 570.133.20, 5.15.209-rt96-lenovo, x86_64: installed更新 initramfs 和 GRUBsudo update-initramfs -u -k 5.15.209-rt96-lenovo sudo update-grub14. 重启进入新实时内核sudo reboot重启时进入 GRUBAdvanced options for Ubuntu Ubuntu, with Linux 5.15.209-rt96-lenovo如果 GRUB 菜单不显示可以开机时连续按Esc或Shift。15. 验证实时内核、NVIDIA 和 DKMS进入系统后执行uname -a希望看到Linux tinycarcar 5.15.209-rt96-lenovo #1 SMP PREEMPT_RT ...检查实时内核cat /sys/kernel/realtime希望看到1检查 NVIDIAnvidia-smi希望 NVIDIA-SMI 正常显示例如NVIDIA-SMI 570.133.20 Driver Version: 570.133.20 CUDA Version: 12.8检查显卡驱动lspci -nnk | grep -EA3 VGA|3D|Display希望看到Kernel driver in use: nvidia Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia检查 DKMSdkms status | grep -i nvidia希望看到nvidia, 570.133.20, 5.15.209-rt96-lenovo, x86_64: installed16. 配置 Franka 需要的实时权限先看当前用户是否已经在realtime组groups如果已经有realtime则不用再添加。如果没有执行sudo groupadd realtime sudo usermod -a -G realtime $USER然后写入实时权限配置sudo tee /etc/security/limits.d/99-realtime.conf /dev/null EOF realtime soft rtprio 99 realtime hard rtprio 99 realtime soft priority 99 realtime hard priority 99 realtime soft memlock unlimited realtime hard memlock unlimited EOF检查cat /etc/security/limits.d/99-realtime.conf说明rtprio 99允许实时线程使用较高实时优先级 priority 99允许进程设置高优先级 memlock unlimited允许锁内存减少实时控制时的分页风险建议使用memlock unlimited而不是一些教程中的102400因为 Franka 控制、ROS 节点、驱动程序可能需要更宽松的内存锁定限制。17. 配置降温策略避免真机控制时热关机本机在刚进入 RT 内核时温度曾达到Tctl: 85.2°C关闭 AMD boost 并限制 CPU 频率后下降到Tctl: 68.1°C临时关闭 AMD boostcat /sys/devices/system/cpu/cpufreq/boost echo 0 | sudo tee /sys/devices/system/cpu/cpufreq/boost临时限制 CPU 最大频率到 2.0GHzsudo cpufreq-set -r -u 2.0GHz查看温度sensors watch -n 1 sensors为了重启后自动生效创建 systemd 服务sudo tee /etc/systemd/system/rt-franka-cpu-limit.service /dev/null EOF [Unit] DescriptionCPU limit for Franka realtime kernel Aftermulti-user.target [Service] Typeoneshot ExecStart/bin/bash -c if [ -e /sys/devices/system/cpu/cpufreq/boost ]; then echo 0 /sys/devices/system/cpu/cpufreq/boost; fi ExecStart/usr/bin/cpufreq-set -r -u 2.0GHz RemainAfterExityes [Install] WantedBymulti-user.target EOF启用服务sudo systemctl daemon-reload sudo systemctl enable rt-franka-cpu-limit.service sudo systemctl start rt-franka-cpu-limit.service检查cat /sys/devices/system/cpu/cpufreq/boost cpufreq-info | grep -E current policy|current CPU frequency | head -n 30 systemctl status rt-franka-cpu-limit.service --no-pager sensors希望看到boost 0 CPU 最大频率约 2.0GHz rt-franka-cpu-limit.service active/exited 温度稳定不要快速冲到 85~95°C18. 重启后最终检查sudo reboot重启后仍然选择Ubuntu, with Linux 5.15.209-rt96-lenovo进入系统后执行uname -r cat /sys/kernel/realtime groups cat /sys/devices/system/cpu/cpufreq/boost nvidia-smi sensors dkms status | grep -i nvidia systemctl status rt-franka-cpu-limit.service --no-pager最终希望看到uname -r 5.15.209-rt96-lenovo cat /sys/kernel/realtime 1 groups 包含 realtime boost 0 nvidia-smi 正常 dkms status nvidia 在 RT 内核下 installed 温度 稳定19. Franka 真机测试顺序不要一上来就运行复杂控制算法。建议按以下顺序测试。19.1 测试 Franka 网络连通假设 Franka Control Box 的 FCI IP 是172.16.0.2先 pingping 172.16.0.2再做高频 pingsudo ping 172.16.0.2 -i 0.001 -D -c 10000 -s 1200如果有明显丢包、延迟很大先不要跑控制。19.2 测试 libfranka communication_test如果使用 libfrankacd ~/libfranka/build ./examples/communication_test 172.16.0.2如果找不到find ~ -name communication_test 2/dev/null然后运行找到的路径/path/to/communication_test 172.16.0.219.3 再启动 FrankaPy / franka-interface如果使用 FrankaPy 或 franka-interface先确认实时内核正常 NVIDIA 正常 温度稳定 网络通信测试通过 用户在 realtime 组 实时权限配置完成再启动 FrankaPy 相关服务或控制程序。20. 使用建议正式控制 Franka 时建议1. 尽量关闭浏览器、视频网页、QQ、无关图形程序 2. 不要同时跑大规模点云、RealSense、RViz、仿真和 Franka 真机控制 3. 真机 1kHz 控制程序尽量只做控制不要在循环里频繁 print、sleep、动态分配内存 4. RealSense / SDF / MoveIt / RViz 可以考虑放到另一台普通内核电脑上 5. RT 控制电脑只负责 libfranka / FrankaPy / franka-interface 低层控制如果只是调试代码、查资料可以开浏览器但真正跑真机控制时建议只保留必要终端和控制节点。21. 常见问题总结问题 1apt update被 Chrome 源卡住错误E: 仓库 “https://dl.google.com/linux/chrome-stable/deb stable Release” 不再含有 Release 文件。解决sudo sed -i.bak /dl.google.com\/linux\/chrome/s/^/# / /etc/apt/sources.list.d/google-chrome.list sudo apt update问题 2NFSD 编译失败错误fs/nfsd/nfs4state.c clamp() low limit slotsize greater than high limit解决scripts/config --disable NFSD make olddefconfig问题 3版本号变成5.15.209-rt96-rt96-lenovo原因localversion-rt 里有 -rt96 CONFIG_LOCALVERSION 又设置了 -rt96-lenovo解决mv localversion-rt ../localversion-rt.bak scripts/config --set-str LOCALVERSION -rt96-lenovo make olddefconfig rm -rf debian make kernelrelease问题 4NVIDIA DKMS 在 RT 内核下失败错误The kernel you are installing for is a PREEMPT_RT kernel! The NVIDIA driver does not support real-time kernels. *** Failed PREEMPT_RT sanity check. Bailing out! ***解决sudo env IGNORE_PREEMPT_RT_PRESENCE1 IGNORE_CC_MISMATCH1 \ dkms build -m nvidia -v 570.133.20 -k 5.15.209-rt96-lenovo sudo env IGNORE_PREEMPT_RT_PRESENCE1 IGNORE_CC_MISMATCH1 \ dkms install -m nvidia -v 570.133.20 -k 5.15.209-rt96-lenovo问题 5RT 内核下温度太高临时处理echo 0 | sudo tee /sys/devices/system/cpu/cpufreq/boost sudo cpufreq-set -r -u 2.0GHz永久处理sudo systemctl enable rt-franka-cpu-limit.service22. 最终状态最终成功状态如下uname -a # Linux tinycarcar 5.15.209-rt96-lenovo #1 SMP PREEMPT_RT ... cat /sys/kernel/realtime # 1 groups # 包含 realtime nvidia-smi # NVIDIA-SMI 570.133.20 正常 lspci -nnk | grep -EA3 VGA|3D|Display # Kernel driver in use: nvidia dkms status | grep -i nvidia # nvidia, 570.133.20, 5.15.209-rt96-lenovo, x86_64: installed sensors # CPU 温度稳定至此Ubuntu 20.04 上的5.15.209-rt96-lenovo实时内核安装完成并且 NVIDIA 图形环境和 Franka 实时控制前置配置也完成。