我想将我的通用Ubuntu转换为实时Ubuntu,通过修补/安装RT Linux内核来实现,但无法找到简单的设置步骤。有人能帮忙提供步骤吗?
对此没有直接的文档,但是在一些测试之后,我能够通过以下步骤解决。请注意这些步骤可能会根据您阅读此内容的时间而有所变化,截至2018-19-20-21年。
步骤0 - 创建一个工作目录
创建一个工作目录
#Move to working directory
mkdir ~/kernel && cd ~/kernel
步骤1 - 下载内核和补丁
前往https://www.kernel.org/pub/linux/kernel/,下载所需版本的内核到 ~/kernel。同样地,前往https://www.kernel.org/pub/linux/kernel/projects/rt/,下载与下载的内核版本相同的RT补丁。我使用的内核和补丁是linux-4.9.115.tar.gz和patch-4.9.155-rt93.patch.gz。
步骤2 - 解压缩内核
tar -xzvf linux-4.9.115.tar.gz
步骤 3 - 打补丁内核
#Move to kernel source directory
cd linux-4.9.115
gzip -cd ../patch-4.9.115-rt93.patch.gz | patch -p1 --verbose
第四步 - 启用实时处理 此步骤需要使用libncurses-dev。
sudo apt-get install libncurses-dev libssl-dev
下一个命令将在终端中启动一个图形菜单来生成配置文件。
make menuconfig
前往该位置并进行相应更改。
##Graphical Menu##
Processor type and features ---> [Enter]
Preemption Model (Voluntary Kernel Preemption (Desktop)) [Enter]
Fully Preemptible Kernel (RT) [Enter] #Select
[Esc][Esc]
Kernel hacking --> [Enter]
Memory Debugging [Enter]
Check for stack overflows #Already deselected - do not select
[Esc][Esc]
[Right Arrow][Right Arrow]
<Save> [Enter]
.config
<Okay> [Enter]
<Exit> [Enter]
[Esc][Esc]
[Right Arrow]
<Exit> [Enter]
步骤 5 - 编译内核
make -j20
sudo make modules_install -j20
sudo make install -j20
第6步 - 验证和更新 在 /boot 目录中验证是否生成了 initrd.img-4.9.115-rt93、vmlinuz-4.9.115-rt93 和 config-4.9.115-rt93,并更新 grub。
cd /boot
ls
sudo update-grub
确认在/boot/grub/grub.cfg
文件中是否存在包含文本“menuentry 'Ubuntu, with Linux 4.9.115-rt93'”的菜单项。
要更改grub中的默认内核,请将/etc/default/grub
中的GRUB_DEFAULT
值编辑为所需的内核。
注意:0是第一个菜单项。
7 - 重新启动并验证
sudo reboot
系统重启后,打开终端并使用uname -a
命令来检查内核版本,应该看起来像下面这样
Linux abhay-home 4.9.115-rt93 #1 SMP PREEMPT RT Mon May 13 03:32:57 EDT 2019 x86_64 x86_64 x86_64 GNU/Linux
注意:“SMP PREEMPT RT”表示您的系统正在运行实时内核。
这里是针对 Ubuntu 19.10 及以上版本的内容,我修补了 Linux 5.4.5 rt 内核补丁,因为 Ubuntu 19.10 的基础版本 Linux 5.3 没有 rt 内核补丁。
0. 创建一个工作目录
# Make dir and move to working directory
$ mkdir ~/kernel && cd ~/kernel
1. 下载内核和补丁
从 https://www.kernel.org/ 下载内核和实时补丁。 您可以在以下位置获取它们:
(内核) https://www.kernel.org/pub/linux/kernel/
(实时补丁) https://www.kernel.org/pub/linux/kernel/projects/rt/
请注意,实时补丁和内核的版本应相同。我使用了 linux-5.4.5.tar.gz 和 patch-5.4.5-rt3.patch.gz。
如果您已经在 ~/kernel 目录下下载了这些文件,请跳过下面的步骤,继续进行第二步。
# Move these zip file to ~/kernel
$ cd ~/Download
$ mv linux-5.4.5.tar.gz patch-5.4.5-rt3.patch.gz ~/kernel/.
2. 提取内核源码并打rt内核补丁
# Extract kernel sources
$ cd ~/kernel
$ tar xvzf linux-5.4.5.tar.gz
# Patch rt kernel
$ cd linux-5.4.5
$ gzip -cd ../patch-5.4.5-rt3.patch.gz | patch -p1 --verbose {}
3. 安装必要的软件包
如果你要使用menuconfig GUI,需要安装libncurses-dev
软件包。当你编译内核时,需要安装flex
和bison
软件包。
# For using gui
$ sudo apt install libncurses-dev libssl-dev
# For compiling kernel
$ sudo apt install flex bison
4. 为 RT 配置内核
$ make menuconfig
进入menuconfig GUI界面。
# Make preemptible kernel setup
General setup ---> [Enter]
Preemption Model (Voluntary Kernel Preemption (Desktop)) [Enter]
Fully Preemptible Kernel (RT) [Enter] #Select
# Select <SAVE> and <EXIT>
# Check .config file is made properly
请注意,GUI配置中不再有检查堆栈溢出
选项。您可以通过搜索“溢出”来检查它。在图形菜单上键入 / 和 overflow
。
5. 编译内核
$ make -j20
$ sudo make modules_install -j20
$ sudo make install -j20
6. 减轻内核镜像
就像之前 @mrRo8o7 所说,大的 initrd
镜像可能会导致内核崩溃。您可以通过以下方法解决这个问题:
# Strip unneeded symbols of object files
$ cd /lib/modules/5.4.5-rt3 # or your new kernel
$ sudo find . -name *.ko -exec strip --strip-unneeded {} +
# Change the compression format
$ sudo vi /etc/initramfs-tools/initramfs.conf
# Modify COMPRESS=lz4 to COMPRESS=xz (line 53)
COMPRESS=xz
[:wq]
然后更新 initramfs
$ sudo update-initramfs -u
7. 验证并更新grub
请验证该目录并更新grub。
# Make sure that initrd.img-5.4.5-rt3, vmlinuz-5.4.5-rt3, and config-5.4.5-rt3 are generated in /boot
$ cd /boot
$ ls
# Update grub
$ sudo update-grub
8. 重新启动并验证
$ sudo reboot
# After the reboot
$ uname -a
然后您可以检查您的新内核版本。
Linux [PROMPT] 5.4.5-rt3 …
安装新内核后(如@Abhay Nayak贴出的),我遇到了内核崩溃的问题。问题在于initrd镜像太大了。我通过以下步骤解决了这个问题:
步骤1- 剥离内核模块
cd /lib/modules/<new_kernel>
find . -name *.ko -exec strip --strip-unneeded {} +
步骤2 - 更改initramfs压缩方式
编辑文件/etc/initramfs-tools/initramfs.conf:
COMPRESS=xz
步骤三 - 更新initramfs
sudo update-initramfs -u
sudo update-grub2
PREEMPT_RT
内核的Debian软件包。如果您不关心精确的内核版本,我建议您这样做而不是自己重新编译内核!下载Debian文件后,您可以使用以下命令从下载目录安装:$ sudo dpkg -i linux-image-rt-amd64_5.10.106-1_amd64.deb
$ sudo apt-get install -f
.config
中设置以下内核标志,在$ make oldconfig
(或$ make menuconfig
)之后。CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
mkdir ~/kernel && cd ~/kernel
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.209.tar.gz
wget https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.4/patch-5.4.209-rt77.patch.xz
tar -xzf linux-5.4.209.tar.gz&
xz -d patch-5.4.209-rt77.patch.xz
# wait until tar -xzf linux-5.4.209.tar.gz job finish
cd linux-5.4.209
patch -p1 <../patch-5.4.209-rt77.patch
cp /boot/config-5.15.0-43-generic .config
# install dependency
sudo apt update
sudo apt install make gcc libncurses-dev libssl-dev flex libelf-dev bison
# install menu GUI to set configuration option "The RT option"
make menuconfig
# In Graphic menu to set up as follows:
# General setup —>
# Preemption Model (Voluntary Kernel Preemption (Desktop)) —>
# ( ) Fully Preemptible Kernel (Real-Time) # select
# then SAVE and EXIT
# disable some options to update config file
scripts/config --disable SYSTEM_TRUSTED_KEYS --disable SYSTEM_REVOCATION_KEYS --disable CONFIG_DEBUG_INFO_BTF
sudo make
# do a check as follows, there should not be any error then we succeed to build.
sudo make -s >/dev/null
sudo make modules_install install
sudo vim /etc/default/grub
# to set GRUB_TIMEOUT=-1
# which means it will stop until you choose specific kernel when boot.
reboot
# choose your real-time kernel, like 5.4.209-rt77
# After you log in,
# print out your real-time kernel name
uname -r
# show scheduler options, it should differ from the generic-linux-kernel's.
cat /sys/block/sda/queue/scheduler
make -j<#cores> deb-pkg
构建 Debian 包,然后使用sudo dpkg -i linux-*.deb
安装它们。如果您想将内核应用于多个系统,则这很好。 - Wolfson