构建实时 Linux 内核 [社区贡献]
本教程从在 Intel x86_64 上安装全新 Ubuntu 20.04.1 开始。实际内核是 5.4.0-54-generic,但我们将安装最新的稳定 RT_PREEMPT 版本。要构建内核,您至少需要 30GB 的可用磁盘空间。
查看 https://wiki.linuxfoundation.org/realtime/start 以获取最新稳定版本,在撰写本文时,这是“最新稳定版本 5.4-rt”。 如果我们单击`链接 <http://cdn.kernel.org/pub/linux/kernel/projects/rt/5.4/>`_,我们将获得确切的版本。 目前它是 patch-5.4.78-rt44.patch.gz。
我们在主目录中创建一个目录
mkdir ~/kernel
并切换到
cd ~/kernel
我们可以使用浏览器访问 https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ 并查看版本是否存在。您可以从站点下载它并将其手动从 /Downloads 移动到 /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/ 下载与我们刚刚下载的内核版本匹配的 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/
并使用实时补丁对内核进行修补
patch -p1 < ../patch-5.4.78-rt44.patch
我们只想使用 Ubuntu 安装的配置,因此我们获取 Ubuntu 配置
cp /boot/config-5.4.0-54-generic .config
打开软件和更新。在 Ubuntu 软件菜单中勾选“源代码”框
我们需要一些工具来构建内核,使用以下命令安装它们
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
然后我们需要在内核中启用 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
保存并退出 menuconfig。现在我们要构建内核,这将需要相当长的时间。(现代 CPU 上需要 10-30 分钟)
make -j `nproc` deb-pkg
After the build is finished check the deb packages
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
然后我们安装所有内核 deb 包
sudo dpkg -i ../*.deb
现在应该安装实时内核了。重启系统并检查新内核版本
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