为ROS 2构建实时Linux [社区-贡献] [待校准@6954]

本教程从在Intelx86_64上全新安装Ubuntu 20.04.1开始。实际内核为5.4.0-54-通用,但我们将安装最新的稳定RT_PREEMPT版本。要构建内核,您需要至少30GB的可用磁盘空间。 [待校准@6955]

检查https://wiki.linuxfoundation.org/realtime/start最新稳定版本,在编写本是 “最新稳定版本5.4 rt ”。如果我们点击 link ,我们会得到准确的版本。目前是patch-5.4.78-rt44.patch.gz。 [待校准@6956]

eclipse-1 `[待校准@6957] <http://dev.ros2.fishros.com/calibpage/#/home?msgid=6957>`_

我们在主目录中创建一个目录 [待校准@6958]

mkdir ~/kernel

然后切换到它 [待校准@6959]

cd ~/kernel

我们可以使用浏览器https://mirrors.edge.kernel.org/pub/linux/kernel/ v5.x/,看看版本是否存在。您可以从站点下载它,并手动将其从/下载移动到/内核文件夹,或者通过使用 "copy link location" 右键单击链接,使用wget下载它。示例: [待校准@6960]

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

打开包装 [待校准@6961]

tar -xzf linux-5.4.78.tar.gz

下载与我们刚刚在http://cdn.kernel.org/pub/linux/kernel/projects/rt/ 5.4/下载的内核版本相匹配的rt_preempt补丁 [待校准@6962]

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

打开包装 [待校准@6961]

gunzip patch-5.4.78-rt44.patch.gz

然后切换到linux目录 [待校准@6963]

cd linux-5.4.78/

用实时补丁修补内核 [待校准@6964]

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

我们只想使用Ubuntu安装的配置,因此我们使用 [待校准@6965]

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

打开软件和更新。在Ubuntu软件菜单中勾选'Source code'框 [待校准@6966]

我们需要一些工具来构建内核,安装它们 [待校准@6967]

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配置,我们只需使用 [待校准@6968]

yes '' | make oldconfig

然后,我们需要在内核中启用rt_preempt。我们调用 [待校准@6969]

make menuconfig

并设置以下内容 [待校准@6970]

# 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

保存并退出menuconfig。现在我们将构建内核,这将需要相当长的时间。(在现代中央处理器上10-30分钟) [待校准@6971]

make -j `nproc` deb-pkg

构建完成后,检查debian包 [待校准@6972]

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包 [待校准@6973]

sudo dpkg -i ../*.deb

现在应该安装实时内核。重新启动系统并检查新的内核版本 [待校准@6974]

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