# 项目场景:

简介


RT-Preempt patch 是在Linux社区kernel的基础上,加上相关的补丁,以使得Linux满足实时性的需求。项目主页见:
下面的是编译和使用RT linux内核的流程,这里使用的Linux内核版本是3.18.140(亲测ubuntu18.04安装内核补丁最为稳定,相比于20.04、22.04)。

运行环境


使用的VMware15 pro虚拟机,上面安装的Ubuntu18.04 64位系统。


下载Linux内核和实时补丁文件
rt补丁下载 https://www.kernel.org/pub/linux/kernel/projects/rt/
内核源码下载 https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/
下载的内核和补丁版本号必须严格对应。
(例如:patch-3.18.140.patch.gz与linux-3.18.140.tar.gz)
---

**运行流程**

*准备工作:*


提前安装好编译内核所需要的模块


sudo apt-get install libncurses*
sudo apt-get install libssl-dev

*解压内核源码*


tar -zxvf linux-3.18.140.tar.gz


*解压补丁*


gunzip patch-3.18.140-rt117.patch.gz

*后续操作:*


cd linux-3.18.140
xz -d ../patch-3.18.140-rt117.patch.xz
patch -p1 <../patch-3.18.140-rt117.patch

**接下来:**
*1,、配置内核*

make menuconfig
选中红框内容Processor type and features --->并按下Enter键;
选定Preemption Model (Voluntary Kernel Preemption (Desktop)) --->并按下Enter键;
选定( ) Fully Preemptible Kernel (RT)并按下Enter键;
关闭内存溢出检测,两次ESC键回到如下图界面,找到Kernel hacking选项并按下Enter键(这个选项在20.04版本上linux内核config中并没有,18.04的选择界面是存在的);

Processor type and features -> Timer frequency设为1000 HZ。

也可能需要通过gedit .config更改相关内容
修改.config文件,搜索关键词,将

        CONFIG_MODULE_SIG_ALL

        CONFIG_MODULE_SIG_KEY

        CONFIG_SYSTEM_TRUSTED_KEYS

        CONFIG_SYSTEM_REVOCATION_LIST

        CONFIG_SYSTEM_REVOCATION_KEYS

五项注释掉,把CONFIG_DEBUG_INFO=y去掉,不然新内核带debug信息超大,原文链接:https://blog.csdn.net/HansSama1/article/details/142040848

2、编译内核、安装内核、更新GRUB启动并重启

make -j4

make的时候如果在虚拟机中可以会出现磁盘空间不足的情况,可采取虚拟机硬盘扩展的方法,参考博客链接:虚拟机Linux磁盘扩容(扩展根目录“/“分区容量)

另外在新建的分区中部署rt内核效果更好(小编反正之前一直在home区设置,但一直编译不通过)

sudo make modules_install -j4

sudo make install

sudo update-grub

开机内核无法进入界面可参照该博客

ubuntu系统启动时Recovery Mode的详细使用教程

3、查看内核版本以确定是否成功

uname -a


4、测试实时内核

可参考以下网页:

https://blog.csdn.net/kl1125290220/article/details/78560220

https://blog.csdn.net/longerzone/article/details/16897655

sudo cyclictest -t 5 -p 80 -n

//运行5个线程,线程的优先级为80,无线循环
也可以进行多次运行并统计结果

(该命令结果在虚拟机中很受主机性能限制)

sudo cyclictest -l10000000 -m -n -t1 -p99 -i2 -h100

-l10000000 指定1千万循环,

-m锁定当前和将来的内存分配,

-n指定使用 clock_nanosleep,

-t1指定开一个线程进行测试,

-p99指定最高优先级,

-i2指定基本线程间隔,单位是us,此处是2us,

-h100指定统计结果的分布情况。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐