ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

为ROS2编译实时Linux内核

2022-01-08 17:31:15  阅读:248  来源: 互联网

标签:kernel 5.4 rt44 linux patch 内核 Linux ROS2 78


这个教程是在一个刚安装完的干净的运行在Intel x86_64的Ubuntu 20.04.1 上进行的。同时,我在Ubuntu 18.04上也进行过测试,也是可以顺利安装的。实际的内核是5.4.0-54-generic,但是我们会安装最新的稳定的RT_PREEMPT版本。为了构建这个内核,你需要至少30GB的空闲磁盘空间。

查看https://wiki.linuxfoundation.org/realtime/start,看看哪个最新的稳定版本,在写的时候是“Latest Stable Version 5.4-rt”。如果我们点击链接link,我们可以得到具体的版本。当前是patch-5.4.78-rt44.patch.gz。

eclipse-1

我们创建一个文件夹,

mkdir ~/kernel

然后,切换到该文件夹:

cd ~/kernel

我们可以先通过浏览器查看一下https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/,确认这个版本是不是存在。你可以直接从网站上下载,然后手动将它放入/kernel,或者通过wget下载,比如:

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.78.tar.gz

解压它:

tar -xzf linux-5.4.78.tar.gz

从http://cdn.kernel.org/pub/linux/kernel/projects/rt/5.4/下载与我们刚才下载的kernel所匹配的rt_preempt补丁。

wget http://cdn.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patch-5.4.78-rt44.patch.gz

解压它:

gunzip patch-5.4.78-rt44.patch.gz

然后进入linux文件夹:

cd linux-5.4.78/

然后使用实时补丁给kernel打补丁:

patch -p1 < ../patch-5.4.78-rt44.patch

我们简单的使用我们所安装的Ubuntu的config文件,所以我们通过下面的方式获取Ubuntu的config文件:

cp /boot/config-5.4.0-54-generic .config

打开软件和更新(Software & Updates),在Ubuntu软件菜单中打勾‘Source code’的选择框。
我们需要一些工具来编译内核,通过下面的方式来安装他们:

sudo apt-get build-dep linux
sudo apt-get install libncurses-dev flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf fakeroot

为了驱动所有Ubuntu配置,我们简单的使用:

yes '' | make oldconfig

然后我们需要开启在kernel中的rt_preempt,我们运行:

make menuconfig

然后进行下面的设置:

# Enable CONFIG_PREEMPT_RT
 -> General Setup
  -> Preemption Model (Fully Preemptible Kernel (Real-Time))
   (X) Fully Preemptible Kernel (Real-Time)

# Enable CONFIG_HIGH_RES_TIMERS
 -> General setup
  -> Timers subsystem
   [*] High Resolution Timer Support

# Enable CONFIG_NO_HZ_FULL
 -> General setup
  -> Timers subsystem
   -> Timer tick handling (Full dynticks system (tickless))
    (X) Full dynticks system (tickless)

# Set CONFIG_HZ_1000 (note: this is no longer in the General Setup menu, go back twice)
 -> Processor type and features
  -> Timer frequency (1000 HZ)
   (X) 1000 HZ

# Set CPU_FREQ_DEFAULT_GOV_PERFORMANCE [=y]
 ->  Power management and ACPI options
  -> CPU Frequency scaling
   -> CPU Frequency scaling (CPU_FREQ [=y])
    -> Default CPUFreq governor (<choice> [=y])
     (X) performance

保存并且推出配置菜单。现在,我们将要构建内核,它将会耗费一些时间。(目前的主流CPU大概10-30分钟)。

make -j `nproc` deb-pkg

注意,我在编译的时候遇到了错误,看了好久才发现问题,如果你也遇到问题,请拉到最后先看看问题以及解决方法,希望可以对你有帮助。
在完成了编译之后,检查一下debian包:

ls ../*deb
../linux-headers-5.4.78-rt41_5.4.78-rt44-1_amd64.deb  ../linux-image-5.4.78-rt44-dbg_5.4.78-rt44-1_amd64.deb
../linux-image-5.4.78-rt41_5.4.78-rt44-1_amd64.deb    ../linux-libc-dev_5.4.78-rt44-1_amd64.deb

然后我们安装全部的debian包。

sudo dpkg -i ../*.deb

现在实时的kernel应该已经被安装了,重启系统并检查新的kernel版本。

sudo reboot
uname -a
Linux ros2host 5.4.78-rt44 #1 SMP PREEMPT_RT Fri Nov 6 10:37:59 CET 2020 x86_64 xx

问题解决

问题一

如果遇到下面的错误:

make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'.  Stop.
make: *** [Makefile:1809: certs] Error 2

解决方法是:

In your kernel configuration file you will find this line:

CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"

Change it to this:

CONFIG_SYSTEM_TRUSTED_KEYS=""

最直接的方法是,用编辑器打开.config文件,然后手动修改。如果希望通过命令行修改,可以参考下面的命令:

Depending on your source structure you might be able to do it via command line. Examples:

scripts/config --disable SYSTEM_TRUSTED_KEYS

or

scripts/config --set-str SYSTEM_TRUSTED_KEYS ""

问题二

如果安装完重启之后,kernel没有变化,可能是grup默认会选择版本更高的kernel,因此,可以通过安装grub-customizer来修改启动时,默认使用的kernel。

20.04的安装命令是:

sudo apt install grub-customizer

因为它已经被纳入默认软件源了。

18.04的安装则稍微麻烦一点,需要进行下面的操作:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

打开grub-customizer之后,选择常规设置,默认项,选择rt的kernel。

问题三

如果遇到使用rt kernel无法启动的情况,首先看,是不是显示无法校验。

解决方法是:进入BIOS,然后关闭security boot。再重启电脑。

标签:kernel,5.4,rt44,linux,patch,内核,Linux,ROS2,78
来源: https://blog.csdn.net/weixin_42499608/article/details/122383329

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有