我需要运行在Ubuntu Linux的RT实时应用,并阅读有关如何让Linux充当RT系统,我学到两种方法可以做到这一点
- preemptive_rt内核补丁
- 使
CONFIG_RT_GROUP_SCHED
内核标志。
我已经试过我的第一个方法手上安装Linux的RT补丁的Ubuntu
然而,除了uname -r
显示#1 SMP PREEMPT RT
我没有其他证据证明它实际上是一个实时系统,因此想尝试第二个方法。 启用CONFIG_RT_GROUP_SCHED
内核标志,看看它的表现。
我看了我们可以确认,如果内核已经通过以下命令的标志:
# zcat /proc/config.gz | grep RT_GROUP
CONFIG_RT_GROUP_SCHED=y
然而,我的系统甚至没有在进程内的config.gz文件,所以我相信我的内核没有这个功能。 我是比较新的Linux内核所以这可能是幼稚,但我如何能够支持此内核?
第1步
从下载Linux内核https://www.kernel.org/pub/linux/kernel/ 。 对于该PoC的目的,我们下载linux-4.16.18.tar.gz
从上面的链接内核。
第2步解压缩内核
$ tar -xzvf linux-4.16.18.tar.gz
第3步
移动到内核源代码目录
$ cd linux-4.16.18
第四步
安装内核编译依赖
$ sudo apt install git build-essential kernel-package fakeroot libncurses5-dev libssl-dev ccache bison flex
第5步
运行内核配置
$make menuconfig
第6步
转到General setup
─> Control Group Support
─> CPU controller
─> Group scheduling for SCHED_RR/FIFO
,如下所示的配置:
转到General setup
─> Kernel .config support
和允许访问.config
通过/proc/config.gz
第7步
编译内核
$ make -j20
使模块和安装
$ sudo make modules_install -j20
$ sudo make install -j20
第8步
打开grub.cfg
文件,以验证是否安装内核
$ vim /boot/grub/grub.cfg
寻找与menuentry menuentry 'Ubuntu, with Linux linux-4.16.18'
如果这不是你的默认内核则改变GRUB_DEFAULT=0
值到你的内核
第9步
重新启动系统
sudo reboot
第10步
验证通过以下命令的系统:
# zcat /proc/config.gz | grep RT_GROUP
CONFIG_RT_GROUP_SCHED=y