参考: Ubuntu 18.04安装 RT-PREEMPT 实时内核及补丁【过程记录】_ubuntu18.04 preempt rt linux 5.6.19-CSDN博客 https://github.com/UniversalRobots/Universal_Robots_ROS_Driver/blob/master/ur_robot_driver/doc/real_time.md
当前内核:5.15.0-94-generic
安装实时内核:5.15.148
通过Index of /pub/linux/kernel/v5.x/ 我下载linux-5.15.148.tar.xz和linux-5.15.148.tar.sign
通过realtime:preempt_rt_versions [Wiki]下载实时内核补丁,我下载patch-5.15.148-rt74.patch.sign和patch-5.15.148-rt74.patch.xz
解压
xz -dk patch-5.15.148-rt74.patch.xz
xz -d linux-5.15.148.tar.xz
tar xf linux-5.15.148.tar
cd linux-5.15.148.tar
xzcat ../patch-5.15.148-rt74.patch.xz | patch -p1
安装:
sudo apt-get install build-essential bc ca-certificates gnupg2 libssl-dev wget gawk flex bison
创建rt_kernal文件夹,linux-5.15.148文件夹放进去
进入linux-5.15.148文件夹,执行以下指令,配置内核: make oldconfig 我这选4,看名字,其他都默认
之后一直回车
构建内核:
make -j `getconf _NPROCESSORS_ONLN` deb-pkg
1)报错fatal error: libelf.h: No such file or directory
sudo apt-get install libelf-dev
2)
重新编译前需要移除,不然会报错
rm vmlinux-gdb.py
报错:
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
通过以下指令看具体报错并输出日志到make.log:make -j1 deb-pkg 2>&1 | tee ~/make.log
(j1我理解为一个线程,原本是多线程一起编译,导致看不到报错在哪里比较乱。这里可以继续j12之类的多线程,然后去make.log里找error,这样比较快)
可以看到以上问题
修改linux-5.15.148/include/config/auto.conf文件中以下两个参数为空格
原:
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
改为:
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
解决这个问题
3)
把auto.conf中改CONFIG_DEBUG_INFO_BTF=N
安装sudo apt-get install dwarves
4)
zstd: not found make[5]: *** [arch/x86/boot/compressed/Makefile:143: arch/x86/boot/compressed/vmlinux.bin.zst] Error 127 make[5]: *** Deleting file 'arch/x86/boot/compressed/vmlinux.bin.zst'
解决:sudo apt install zstd
5)
再一次成功
安装生成的四个deb
sudo dpkg -i xxx.deb
比较幸运没遇到问题,重启进入后,启动页面没有变化,还是进入ubuntu,但是查看内核版本已经自动变到5.15.148
测试成功安装实时补丁
测试:
参考关于Linux安装RT-PREEMPT实时补丁-CSDN博客
使用ur10,发现launch后改为报错
error:unseccessful in setting main thread realtime prriority.
error,Main thread: Scheduling is NOT SCHED_FIFO!
做以下内容,重启,成功