虚拟机上的ubuntu安装RT系统+安装IGH

准备工作

在使用EtherCat的时候,公司为方便测试,使用开源的主站IGH,那么需要安装IGH。IGH的运行环境是LINUX,对操作系统有实时性的要求。解决的具体思路是:在ubuntu环境下编译一个修改的linux内核,也就是对内核打实时补丁,也就是接下来的第一步工作。

ubuntu 内核+对应版本的补丁

原系统:Ubuntu 20.04.2LTS
原内核版本:不管,一般比接下来使用的内核高
目标内核:linux-5.4.28-rt19
下载:
链接: https://pan.baidu.com/s/16vq104VM1EvP_t6QrTTU5A?pwd=r1wm
提取码: r1wm

预备软件安装

安装图形界面

sudo apt-get install -y build-essential kernel-package libncurses5-dev

安装编译工具

sudo apt-get install bison 
sudo apt-get install flex 
sudo apt-get install bc 
sudo apt-get install libelf-dev 
sudo apt-get install libncurses-dev
sudo apt-get install libssl-dev

进入root模式

#第一次进入root模式需要设置密码
sudo passwd root
#上步完成
su

开始安装,打补丁->编译->安装

1.找到刚刚下载文件的文件夹

cd ~/Downloads

2.选择一个地方为编译做准备,编译结束大小在20G左右
可以查看当前文件夹大小

df -h

3.转到编译目录

#创建rt_linux_build
mkdir rt_linux_build
#改变目录到rt_linux_build
cd ~/rt_linux_build
#复制linux-5.4.28.tar.gz到lrt_linux_build
cp ~/Downloads/linux-5.4.28.tar.gz ./
#复制patch-5.4.28-rt19.patch.gz到rt_linux_build
cp ~/Downloads/patch-5.4.28-rt19.patch.gz ./
#解压linux-5.4.28.tar.gz到rt_linux_build
tar zxvf linux-5.4.28.tar.gz 
#解压patch-5.4.28-rt19.patch.gz到rt_linux_build
gzip -d patch-5.4.28-rt19.patch.gz
#复制patch-5.4.28-rt19.patch到linux-5.4.28
cp patch-5.4.28-rt19.patch ./linux-5.4.28
#到linux-5.4.28目录
cd linux-5.4.28
#打补丁
patch -p1 < patch-5.4.28-rt19.patch

配置内核

sudo make menuconfig

1.进入“General setup”, 在"Preemption Model"中选择“Fully Preemptible Kernel(Real-Time)”
2.找到Device Drivers,找到staging drivers ,(在比较后面,慢慢找),然后按空格键,把它去掉。
3.save、exit

准备编译

1.为了减少编译时出现的错误以及问题,现在总结网上常见问题并提前修改

gedit .config

注释掉下面两行

CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"

改成

#CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
#CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"

2.查看当前系统分配的内核数

lscpu

Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 43 bits physical, 48 bits virtual
CPU(s): 8
这里8核,编译可以开8的倍数的并行编译
3.编译过程

cd ~linux-5.4.28
make -j8
make modules -j8
make modules_install -j8
make install -j8

最后没有错误,出现down结尾,就是编译完成

修改启动时选择的内核

就是把刚刚编译好的内核在linux启动时启动
1.查看自己的grub版本

grub-install --version

记住(GRUB)之后的大版本是2.00以后还是2.00以前
2.查看自己现有的内核版本(完全版)

grep 'menuentry' /boot/grub/grub.cfg

3.找到自己需要换的内核

menuentry之后单引号内容复制,比如:

menuentry 'Ubuntu, with Linux 5.4.28-rt19'

复制Ubuntu, with Linux 5.4.28-rt19
4.修改grub

su
gedit /etc/default/grub

GRUB_DEFAULT=0

改为

GRUB_DEFAULT = "Ubuntu, with Linux 5.4.28-rt19"

5.更新grub

sudo update -grub

看到警告
根据警告,之前第一步的时候查看过grub的版本,根据警告更改单引号内容。
比如当前是大于2的,则把第三个单引号的内容复制,然后回到第四步重新粘贴

6.再次

sudo update -grub
sudo reboot

7.查看

uname -r

可以看到

zyy@ubuntu:~$ uname -r
5.4.28-rt19

8.测试

sudo apt-get install rt-tests 
sudo cyclictest -t 5 -p 80 -s
#sudo cyclictest -t 5 -p 80 -N  ##用ns显示

说明
对参数进行说明:

T: 0 序号为0的线程
P: 0 线程优先级为0
C: 9397 计数器。线程的时间间隔每达到一次,计数器加1
I: 1000 时间间隔为1000微秒(us)
Min: 最小延时(us)
Act: 最近一次的延时(us)
Avg:平均延时(us)
Max: 最大延时(us)
cyclictest的一篇参考文章:cyclictest 测试以及原理浅谈_i龙家小少的博客-CSDN博客_cyclictest

结论:VM上使用RT,延时很高,不合适

安装IGH

注意1: 必须关闭scurity boot,不然在启动sudo /etc/init.d.ethercat start会出现权限不够的问题
使用sudo dmesg查看可知:Lockdown: insmod: unsigned module loading is restricted; see man kernel_lock

注意2: 填写网卡ether时,选择en开头的网卡,不是无线网卡

https://stackoverflow.com/questions/10704983/operation-not-permitted-while-setting-new-priority-for-thread
https://ros-realtime.github.io/Benchmarks/pendulum_demo_benchmark_instructions.html

mkdir ec_igh
cd ec_igh
git clone http://gitlab.com/etherlab.org/ethercat.git
cd ethercat/
./bootstrap 
./configure --enable-8139too=no
sudo make
sudo make modules
sudo make install
sudo make modules_install 

#查看网卡,找出MAC
ifconfig

sudo gedit /usr/local/etc/sysconfig/ethercat
#把下面两项复制进对应位置,两个文件夹都要操作
MASTER0_DEVICE="00:0c:29:0d:3e:cc"
DEVICE_MODULES="generic"
# 这里操作错误会出现以下错误
# Starting EtherCAT master 1.6.0-rc1 modprobe: ERROR: could not insert 'ec_master': Invalid argument
 failed

------------------
# 拷贝文件到系统内
sudo mkdir /etc/sysconfig
sudo cp /usr/local/etc/sysconfig/ethercat /etc/sysconfig/ethercat
# 链接
sudo ln -s /usr/local/etc/init.d/ethercat /etc/init.d/ethercat
#配置用户态库
cd /etc/udev/rules.d
#新建一个ethercat的rule文件
sudo gedit 99-ethercat.rules
#向文件中添加下面内容
KERNEL=="EtherCAT[0-9]", MODE="0777"
#配置实时权限
sudo gedit /etc/security/limits.conf
#在该文件的最下方按照格式添加
<username> hard rtprio 99

	```txt
	@lm soft rtprio 99
	@lm soft priority 99
	#@lm soft memlock 99 # 可能需要加这行
	@lm hard rtprio 99
	@lm hard priority 99
	#@lm hard memlock 99 # 可能需要加这行
	```
	
#验证是否启动实时
pendulum_demo -d 200mb -t 90 -s fifo -u 1ms -i 60000 -f pendulum_demo_results

#启动
sudo depmod
#开启主站
sudo /etc/init.d/ethercat start
#显示主站状态
ethercat master
#显示从站设备
ethercat slaves
#关闭主站
sudo /etc/init.d/ethercat stop

参考

ubuntu安装实时内核
Ubuntu20.04 如何降低内核版本
igh+preempt_rt主战搭建
Ubuntu下Linux配置内核各种常见错误和解决办法
Ubuntu实时内核安装&Igh主站安装配置
ubuntu20.04 LTS安装Igh EtherCAT Master

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值