LINUX - 实时LINUX内核(PREEMPT_RT)的编译安装以及测试
目录
1.什么是实时性操作系统?
2.怎么实现实时性系统?
3.PREEMPT_RT
4.使用方法
4.1下载linux内核源码
4.2下载RT patch
4.3 使用方法
5.测试
6.总结
7.别的方法
7.1 ubuntu 安装低延时内核
7.2 centos 安装预编译的实时内核
用到的命令行
1.什么是实时性操作系统?
https://blog.csdn.net/ywx123_/article/details/53861274
2.怎么实现实时性系统?
https://blog.csdn.net/lu_embedded/article/details/52485527
3.PREEMPT_RT
PREEMPT_RT是Linux内核的一个实时补丁。得到Linus的高度评价:
项目主页见:https://rt.wiki.kernel.org/index.php/Main_Page
4.使用方法
4.1下载linux内核源码
网址:https://mirrors.edge.kernel.org/pub/linux/kernel/
国内镜像网址:http://mirror.bjtu.edu.cn/kernel/linux/kernel/ ,http://mirror.tuna.tsinghua.edu.cn/kernel/
4.2下载RT patch
patch在https://rt.wiki.kernel.org/index.php/Main_Page 下载,与linux内核的版本号一定要一样。
4.3 使用方法
tar xzvf linux-4.4.138.tar.gz
cd linux-4.4.138
patch -p1 < ../patch-4.4.138-rt65.patch
make menuconfig需要安装这个libncurses-dev模块
编译内核需要libssl-dev模块
sudo apt-get install libncurses-dev
sudo apt-get install libssl-dev
配置linux内核
make menuconfig
选择Processor type and feature —> Fully Preemptible Kernel (RT)这个选项,具体路径如下图。保存。
编译内核,再安装,更新grub.
编译时加上 INSTALL_MOD_STRIP=1 可以生成没有调试信息的模块,大大减小内核的大小。
-
make -j2
-
<span class="hljs-comment">
-
<span class="hljs-comment">
-
sudo make INSTALL_MOD_STRIP=1 modules_install
-
sudo make install -j2
-
sudo update-grub2
重启后会多一个 linux-4.4.138-rt 的启动选项
5.测试
https://blog.csdn.net/kl1125290220/article/details/78560220
https://blog.csdn.net/longerzone/article/details/16897655
sudo cyclictest -t 5 -p 80 -n
注释: 运行五个线程,线程优先级为80,无限循环
cyclictest运行结果详解
T: 0 序号为0的线程
P: 0 线程优先级为0
C: 9397 计数器。线程的时间间隔每达到一次,计数器加1
I: 1000 时间间隔为1000微秒(us)
Min: 最小延时(us)
Act: 最近一次的延时(us)
Avg:平均延时(us)
Max: 最大延时(us)
测试结果示例:
1.实体机测试结果
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.13 0.06 0.02 1/244 19255
T: 0 (18989) P:80 I:1000 C: 155947 Min: 1 Act: 1 Avg: 1 Max: 17
T: 1 (18990) P:80 I:1500 C: 103964 Min: 1 Act: 1 Avg: 1 Max: 15
T: 2 (18991) P:80 I:2000 C: 77973 Min: 1 Act: 1 Avg: 1 Max: 7
T: 3 (18992) P:80 I:2500 C: 62378 Min: 1 Act: 1 Avg: 1 Max: 10
T: 4 (18993) P:80 I:3000 C: 51982 Min: 1 Act: 1 Avg: 1 Max: 7
2.虚拟机测试结果
在虚拟机中效果一般,受主机的限制太大。
-
my@ubuntu:~/rt/linux-4.4.138$ sudo cyclictest -p 80 -t5 -n
-
# /dev/cpu_dma_latency set to 0us
-
policy: fifo: loadavg: 0.69 0.19 0.07 1/726 5825
-
T: 0 ( 5821) P:80 I:1000 C: 8168 Min: 7 Act: 445 Avg: 327 Max: 7005
-
T: 1 ( 5822) P:80 I:1500 C: 5455 Min: 7 Act: 411 Avg: 319 Max: 7516
-
T: 2 ( 5823) P:80 I:2000 C: 4098 Min: 14 Act: 174 Avg: 320 Max: 2362
-
T: 3 ( 5824) P:80 I:2500 C: 3275 Min: 5 Act: 52 Avg: 319 Max: 6940
-
T: 4 ( 5825) P:80 I:3000 C: 2732 Min: 8 Act: 214 Avg: 299 Max: 5198
3.也可以进行多次运行并统计结果
sudo cyclictest -l10000000 -m -n -t1 -p99 -i2 -h100
-l10000000 :指定1千万循环,
-m :锁定当前和将来的内存分配,
-n :指定使用 clock_nanosleep,
-t1 :指定开一个线程进行测试,
-p99 :指定最高优先级,
-i2 :指定基本线程间隔,单位是us,此处是2us,
-h100 :指定统计结果的分布情况。
程序20秒执行结束,输出显示平均延时1 us,最大延时15 us,通过直方分布图察看,大多集中在1-7 us以内。
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.36 0.33 0.28 1/246 32690
T: 0 (32688) P:99 I:2 C:10000000 Min: 0 Act: 2 Avg: 1 Max: 15
# Histogram
000000 000051
000001 6635143
000002 3352561
000003 008966
000004 002414
000005 000648
000006 000180
000007 000025
000008 000002
000009 000001
000010 000000
000011 000000
000012 000001
000013 000001
000014 000006
000015 000001
…………(中间都是0,省略)
000097 000000
000098 000000
000099 000000
# Total: 010000000
# Min Latencies: 00000
# Avg Latencies: 00001
# Max Latencies: 00009
# Histogram Overflows: 00000
# Histogram Overflow at cycle number:
# Thread 0:
6.总结
实时性补丁能够较好地满足我们的需求(1ms),实现较强的实时性。
7.别的方法
ubuntu 和centos 都提供了预编译的prempt 内核, 只是ubuntu的是lowlatency 低延时内核,centos的是rt kernel最高级实时
7.1 ubuntu 安装低延时内核
参考https://linuxmusicians.com/viewtopic.php?t=18536
apt-get install linux-lowlatency
7.2 centos 安装预编译的实时内核
参考https://unix.stackexchange.com/questions/341933/install-a-real-time-kernel-on-centos
sudo tee /etc/yum.repos.d/CentOS-rt.repo >/dev/null <<EOF
# CentOS-rt.repo
[rt]
name=CentOS-7 - rt
baseurl=http://mirror.centos.org/centos/\$releasever/rt/\$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF
sudo yum update -y
sudo yum install -y kernel-rt rt-tests tuned-profiles-realtime
sudo reboot
用到的命令行
cp /boot/config-4.9.0-4-amd64 .config
make -j4
make modules_install
make install
参考
https://blog.csdn.net/v6543210/article/details/80941906
LINUX - 实时LINUX内核(PREEMPT_RT)的编译安装以及测试相关推荐
- kali linux 内核,关于kali编译安装内核和多内核保留的问题求解答。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 没动静啊,难道沉了么?一说这内核啊有人说和那个boot文件夹里的有关,我没事闲将live启动的kali1.0.5的boot文件夹中的文件弄了出来放到了实体 ...
- linux 4.1内核源码编译
编译环境 Arch Linux on VirtualBox 下载内核 https://www.kernel.org/ 下载的内核压缩包,此时的最新内核版本为4.1: 解压包 # tar -xvJf l ...
- Linux:软件包管理(差编译安装未整理)
软件包管理 1.ABI:application binary interfac 应用程序二进制接口,应用程序要在操作系统上运行必须符合操作系统的接口 Linux:ELF(Executable and ...
- linux 安装源码网卡包,【linux命令】Linux通过yum 或者源码编译安装vnstat查看网卡流量...
Linux通过vnstat查看网卡流量有两种安装方式: yum 安装或者源码编译安装. 1,yum安装. 直接运行yum install vnstat -y 安装完后测试: [[email prot ...
- linux从源码编译软件,linux软件包管理——源码包编译安装
做为运维人员来讲,很多时候我们直接使用别人给我们提供的RPM包来安装程序时,总达不到自己理想的效果,第一,编译开启的功能并不是自己想要的:第二,用不上最新的源代码,因为RPM包的源代码总会滞后于最新的 ...
- Linux下MySQL 5.5.11编译安装笔记(待验证)
MySQL 最新的版本5.5.11需要cmake编译安装,估计以后的版本也会采用这种方式,网上找了一些安装方法有些地方是错的,自己整理一份 所以特地记录一下安装步骤及过程,以供参考! 1. mysql ...
- Linux笔记-centos7替换yum及编译安装mydumper
首先是替换yum 这里逻辑如下: 1. 清空yum: 2. 替换/etc/yum.repos.d: 3. 重新生成缓存: 详细过程如下: 1. 进入yum源配置文件 cd /etc/yum.repos ...
- 龙芯linux内核,龙芯的linux kernel,内核开发与编译
在很久很久以前,linux被视为geek极客的玩具.自行升级Linux内核,对普通用户来说,简直是天方夜谭.曾经的曾经,升级内核需要很多纷繁复杂的步骤,也需要花费很多的时间.但是,现在不一样了.内核的 ...
- linux系统下Opencv4.1.1编译安装,以及增加子函数和python中调用
目录 Table of Contents 目录 一 源码编译和安装 添加opencv路径 二 增加并列子函数的方法 三 增加库函数形参的方法 四 cv增加子函数一些数据变量的问题 4.1 数据类型 一 ...
最新文章
- 如何指定在Git上执行shell命令时使用的私有SSH密钥?
- vue的自定义标签tag是什么意思啊_好好的衣服为什么洗一次就废,服装标签上的图标究竟是什么意思?...
- vb如何实现在cad中打开dxf文件_CDR转CAD方法
- 【转】Hibernate和IBatis对比
- SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)
- python的用算法进制转换详解_学习python第五天进制转换
- html:(36):间距和对齐
- python 函数中所有print保存csv_python for循环print怎样才能输出csv呢
- android 返回销毁活动,android返回活动时会被销毁并且不会恢复
- python中如何保存文件_如何在python中处理后保存文件?
- jenkins 用户授权
- 2022年春运火车票明起开卖
- 范伟导老师Sniffer课程资料
- php multicast多播实现详解
- 360服务器已停止响应,对于 SQL Server 2017年累积更新 5
- Atitit 语言分类 形式语言 目录 1. 形式语言(英语:Formal language)是用精确的数学或机器可处理的公式定义的语言。	1 1.1. 形式语言理论是用数学方法研究自然语言(如英语
- Matlab矩阵转置注意事项
- 2021-2025年中国电源管理IC(PMIC)行业市场供需与战略研究报告
- 2022年12月奥鹏网络教育大学英语B统考题库试题
- Java递归解压zip压缩包