參考: 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!
做以下內容,重啟,成功