【问题标题】:Install RT Linux patch for Ubuntu为 Ubuntu 安装 RT Linux 补丁
【发布时间】:2019-01-11 04:13:20
【问题描述】:

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

【问题讨论】:

    标签: ubuntu kernel real-time patch rtos


    【解决方案1】:

    这里适用于 Ubuntu 19.10 及更高版本,我修补了 Linux 5.4.5 rt 内核补丁,因为 Linux 5.3(Ubuntu 19.10 的基础)没有 rt 内核补丁。

    0。制作工作目录

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

    1.下载内核和补丁

    https://www.kernel.org/ 下载内核和 rt 补丁。 你可以在下面得到这些:

    (内核)https://www.kernel.org/pub/linux/kernel/
    (rt补丁)https://www.kernel.org/pub/linux/kernel/projects/rt/

    注意rt补丁和内核的版本要一致。我使用了 linux-5.4.5.tar.gzpatch-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 内核

    # 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 是必需的。编译内核时需要flexbison

    # 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 配置中不再有 Check for stack overflows 选项。您可以通过搜索“溢出”来检查它。在图形菜单上键入 /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 …
    

    【讨论】:

    • 按照这些文件版本的确切说明,我得到了很多补丁失败-“修补文件 {} ... 4 块中的 4 个失败 - 将拒绝保存到文件 {}.rej 嗯。 ..下一个补丁将创建文件 {},它已经存在!假设 -R?[n] 仍然应用?[n]" - 这正常吗?怎么回答?
    • 第2步中“--verbose”后面的“{}”省略似乎可以正常工作。
    【解决方案2】:

    安装新内核后(就像@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
    

    第 3 步 - 更新 initramfs

    sudo update-initramfs -u
    sudo update-grub2
    

    【讨论】:

      【解决方案3】:

      第 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
      

      第 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]
      

      第 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”验证您的系统正在运行实时内核。

      【讨论】:

      • 我做了所有提到的事情,将默认 grub 更改为 6,但启动后 uname -a 返回旧内核,
      • 菜单项列表中的值6可能是错误的,但是您可以安装最新的内核版本,linux默认选择最新的内核版本。如果您的默认内核是 4.15.0,则在步骤 1 中下载内核 4.16.0。如果您想要相同的版本,那么一种非常规的方法是进入 /boot/grub/grub.cfg 并找到您的 RT 的菜单项内核,在第一个菜单项之前剪切并粘贴它。这是不可取的,如果不小心完成,可能会弄乱 grub 引导加载程序,但我已经尝试过了,它可以工作。希望这可以帮助!干杯:)
      • 也可以使用make -j&lt;#cores&gt; deb-pkg 构建debian 包,然后使用sudo dpkg -i linux-*.deb 安装它们。如果您想将内核应用于多个系统,这很好。
      猜你喜欢
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多