为Ubuntu安装RT Linux修补程序

为Ubuntu安装RT Linux修补程序,ubuntu,kernel,real-time,patch,rtos,Ubuntu,Kernel,Real Time,Patch,Rtos,试图通过修补/安装RT Linux修改内核,使我的通用Ubuntu成为实时Ubuntu,但找不到直接的设置。有人能帮你完成这些步骤吗?步骤0-创建一个工作目录 sudo reboot # Make dir and move to working directory $ mkdir ~/kernel && cd ~/kernel $ sudo reboot # After the reboot $ uname -a 制作一个工作目录 #Move to working dir

试图通过修补/安装RT Linux修改内核,使我的通用Ubuntu成为实时Ubuntu,但找不到直接的设置。有人能帮你完成这些步骤吗?

步骤0-创建一个工作目录

sudo reboot
# Make dir and move to working directory
$ mkdir ~/kernel && cd ~/kernel
$ sudo reboot

# After the reboot
$ uname -a
制作一个工作目录

#Move to working directory
mkdir ~/kernel && cd ~/kernel
步骤1-下载内核和修补程序

转到并将所需版本的内核下载到~/kernel。类似地,转到并下载RT补丁,其版本与下载的内核版本相同。我使用的内核和补丁是linux-4.9.115.tar.gz和patch-4.9.155-rt93.patch.gz

步骤2-解压缩内核

tar -xzvf linux-4.9.115.tar.gz
#Move to kernel source directory
cd linux-4.9.115
gzip -cd ../patch-4.9.115-rt93.patch.gz | patch -p1 --verbose
make -j20
sudo make modules_install -j20
sudo make install -j20
# 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 {}
$ make -j20
$ sudo make modules_install -j20
$ sudo make install -j20
步骤3-修补内核

tar -xzvf linux-4.9.115.tar.gz
#Move to kernel source directory
cd linux-4.9.115
gzip -cd ../patch-4.9.115-rt93.patch.gz | patch -p1 --verbose
make -j20
sudo make modules_install -j20
sudo make install -j20
# 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 {}
$ make -j20
$ sudo make modules_install -j20
$ sudo make install -j20
步骤4-启用实时处理 此步骤需要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]
步骤6-验证和更新 验证initrd.img-4.9.115-rt93、vmlinuz-4.9.115-rt93和config-4.9.115-rt93是否在/boot目录中生成,并更新grub

cd /boot
ls
sudo update-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
验证
/boot/grub/grub.cfg
文件中是否有包含文本“menuentry'Ubuntu,with Linux 4.9.115-rt93'”的菜单项

要更改grub中的默认内核,请将
/etc/default/grub
中的
grub\u default
值编辑为所需的内核

注意:0是第一个菜单

7-重新启动并验证

sudo reboot
# Make dir and move to working directory
$ mkdir ~/kernel && cd ~/kernel
$ sudo reboot

# After the reboot
$ uname -a
一旦系统重新启动,打开终端并使用
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”验证您的系统是否运行实时内核。

安装新内核(如@Abhay Nayak post)后,我陷入了内核恐慌。 问题是initrd映像太大。 我用以下方法解决了这个问题:

步骤1-剥离内核模块

cd/lib/modules/
找到-name*.ko-exec strip--不需要的strip{}+
步骤2-更改initramfs压缩

编辑文件/etc/initramfs tools/initramfs.conf:

COMPRESS=xz
步骤3-更新initramfs

sudo更新initramfs-u
sudo更新-grub2

这是Ubuntu 19.10及以上版本的补丁,我修补了Linux 5.4.5 rt内核补丁,因为Linux 5.3——Ubuntu 19.10的基础——没有rt内核补丁

0。制作工作目录

sudo reboot
# Make dir and move to working directory
$ mkdir ~/kernel && cd ~/kernel
$ sudo reboot

# After the reboot
$ uname -a
1。下载内核和补丁程序

从下载内核和rt补丁。 您可以在下面获得这些信息:

(内核)
(rt补丁)

请注意,rt修补程序和内核的版本应该相同。我使用了linux-5.4.5.tar.gz和patch-5.4.5-rt3.patch.gz

如果您在~/kernel上下载这些,请跳过下面的步骤并继续执行步骤2

# 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内核

tar -xzvf linux-4.9.115.tar.gz
#Move to kernel source directory
cd linux-4.9.115
gzip -cd ../patch-4.9.115-rt93.patch.gz | patch -p1 --verbose
make -j20
sudo make modules_install -j20
sudo make install -j20
# 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 {}
$ make -j20
$ sudo make modules_install -j20
$ sudo make install -j20
3。安装所需的软件包

要使用menuconfig GUI,需要
libncurses dev
<编译内核时需要code>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
6。使内核图像更轻

正如@mrRo8o7前面所说的,big
initrd
image可能会发生内核恐慌。因此,您可以通过以下方式解决此问题:

# 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

cd /boot
ls
sudo update-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
# Make dir and move to working directory
$ mkdir ~/kernel && cd ~/kernel
$ sudo reboot

# After the reboot
$ uname -a
然后您可以检查您的新内核版本

Linux [PROMPT] 5.4.5-rt3 …

我做了上面提到的一切,将默认grub更改为6,但是在启动uname-a返回旧内核后,菜单项列表中的值6可能错误,但是您可以安装最新的内核版本,linux默认选择最新的内核版本。如果您的默认内核是4.15.0,那么在步骤1中下载内核4.16.0。如果您想要相同的版本,那么一种非常规的方法是进入/boot/grub/grub.cfg并找到RT内核的菜单项,在第一个菜单项之前剪切并粘贴它。这是不可取的,如果不小心做的话,可能会弄糟grub引导加载程序,但我已经尝试过了,它很有效。希望这有帮助!干杯:)你也可以用
make-j deb-pkg
构建debian软件包,然后用
sudo dpkg-i linux-*.deb
安装它们。如果您想将内核应用于多个系统,这很好。按照这些文件版本的确切说明,我会遇到很多修补程序失败-“修补文件{}…4个大块头中有4个失败-将拒绝保存到文件{}.rej Hmm…下一个修补程序将创建文件{},该文件已经存在!假设-R?[n]无论如何应用?[n]”-这正常吗?回答什么?如果省略步骤2中“-verbose”之后的“{}”,它似乎工作正常。