前言
本次目的是运行 etherlab 的 IGHmaster,所涉及内容包括 Ubuntu 的安装、linux 内核
的编译、Xenomai 的安装和测试、IGH 主站安装和调试。最后通过主站成功识别从站并通
过 user 和 xenomai 两个例子与特定从站通信。
首先需要确定一下合适的版本。IGH 主站和 xenomai 对内核版本都有要求,或者说相
关版本是在特定内核版本上调试成功的,为了减少不必要的麻烦所以才需要版本对应。
0 版本确认
在 etherlab 网站上下载代码和文档,网址如下,最新版本为 1.5.2(话说这个已经很
久没更新了)
http://www.etherlab.org/en/ethercat/index.php
文档在 1.1 节便提到支持 linux 内核为 2.6/3.x 版本,但其中的实时网卡驱动只更新
到 3.4,之后的版本会在安装时提示不支持当前内核版本。
xenomai 版本已经更新到 3.1,wangzhan r 但使用较多的还是 2.6.x,且目前网上
教程较多方便操作,本次采用 2.6.5
http://xenomai.org
1. 安装 ubutnu 假设你本来就是 ubuntu 那忽略这一步
1.1 在 Windows 下使用 UltraISO 制作 ubuntu 启动盘
在 UltraISO 界面下打开所需 ISO 文件,然后再菜单栏中启动写入硬盘映像,在弹框中
选择自己的 U 盘,然后点击写入即可
注:如果有同学装系统失败,可以尝试一下这个操作;点击在弹框内的便携驱动写入新的
驱动器引导扇区syslinux。本次安装使用 Ubuntu14.04 时没有使用这个,依然能安装
成功。
1.2 使用 Windows 自带的硬盘管理工具分配一个不少于 20G 的分区,方便安装 ubuntu;
其实单纯安装 ubuntu 只需要 5-10G 的空间,为何要分至少 20G 呢,因为在编译内核时
会急剧占据硬盘空间,印象中多占用了 7G 之多,如果空间不够,内核编译便会失败;
1.3 修改 BIOS 为 U 盘启动模式,插上 U 盘重新启动电脑,开机后便会进入 ubuntu 界面,
选择 install ubuntu,在安装位置中选择之前准备的分区
2. 安装 xenomai
本次使用的内核是 linux3.18.20, xenomai2.6.5 分别从一下网址下载(为何使用
3.18.20,因为下载下来的 xenomai2.6.5 自带这个内核版本的 IPIPE 实时补丁,不需要
再额外上网找)
Linux 内核--- https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/ (注:下
载开头是 linux 的文件而不是 changelog)
Xenomai 软件--- https://gitlab.denx.de/Xenomai/xenomai/-/tree/v2.6.5
2.1 安装依赖库
$ sudo apt-get update
$ sudo apt-get install kernel-package build-essential libncurses5-dev libelf-dev
autotools-dev fakerroot autoconf automake libtool
也可以先安装软件,发现缺什么后再安装
2.2 打补丁
把解压后的内核文件和 xenomai 拷贝到/usr/src/ 目录下(尝试了在其他目录也可以
完成编译内核),复制 ipipe 文件到 linux-3.18.20 目录下。
$ cd linux-3.18.20
$ sudo cp ../xenomai-2.6.5/ksrc/arch/x86/patches/ ipipe-core-3.18.20-
x86-7.patch .
$sudo ../xenomai-2.6.5/scripts/prepare-kernel.sh
命令会提示当前的架构和所使用的 ipipe 文件,确认即可。
2.3 配置内核
$ cd linux-3.18.20
$ sudo make menuconfig
编译完成后便会出现内核配置界面,此时根据以下说明配置
Recommended options for linux kernel config:
* General setup
--> Local version - append to kernel release: -xenomai-2.6.5
--> Timers subsystem
--> High Resolution Timer Support (Enable)
* Real-time sub-system
--> Xenomai (Enable)
--> Nucleus (Enable)
--> Pervasive real-time support in user-space (Enable)
* Power management and ACPI options
--> Memory power savings
--> Intel chipset idle memory power saving driver (Disable)
--> Run-time PM core functionality (Disable)
--> ACPI (Advanced Configuration and Power Interface) Support
--> Processor (Disable)
--> CPU Frequency scaling
--> CPU Frequency scaling (Disable)
--> CPU idle
--> CPU idle PM support (Disable)
* Pocessor type and features
--> Processor family
--> Core 2/newer Xeon (根据自己实际情况选,如果不知道可以选 486(就是第
一个),如果是 64 位可选 generic-XXX;这个选项只是优化代码执行效率,并不会导致程
序不可用)
--> Transparent Hugepage Support (Disable)
--> Allow for memory compaction (Disable)
--> Contiguous Memory Allocation (Disable)
--> Allow for memory compaction
--> Page Migration (Disable)
(实际这项不能设置,不知问题何在)
设置完毕后保存,退回命令行界面。
使用以下命令编译内核
$ CONCURRENCY_LEVEL=$(nproc) make-kpkg --rootcmd fakeroot --initrd
kernel_image kernel_headers
这个时候就是等待了,快则半小时满则一两个小时,因机器人配置而异。如果中间遇到错误,
可以看一下是什么类型错误,如果权限问题,就增加 sudo ,如果缺少库则安装相应的库在
进行编译,编译完成后会在上一级目录里生成两个 linux_*.deb 文件。
2.4 安装 kernel
$ cd ..
$ sudo dpkg -i linux-*.deb
2.5 添加用户组,允许非 root 用户使用超级权限
sudo addgroup xenomai --gid 1234
sudo addgroup root xenomai
sudo usermod -a -G xenomai $USER
如果出现 gid 冲突,可以更改为其他值,但要记住这个值,下面要用到。
2.6 配置启动文件 GRUB
使用如下命令编辑 GRUB 文件,
$ sudo gedit /etc/default/grub
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash
xeno_nucleus.xenomai_gid=1234 xenomai.allowed_group=1234"
GRUB_CMDLINE_LINUX=""
注意 1:如果使用 intel 的集显需要增加一下命令:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i915.i915_enable_rc6=0
i915.powersave=0 noapic xeno_nucleus.xenomai_gid=1234
xenomai.allowed_group=1234"
注意 2: 如果 CPU 是 Intel 第六代 cpu 或者说 Skylake 架构的 CPU 那么需要在上面命
令后增加 “nosmap”。
更新 GRUB 然后重启
$ sudo update-grub
$ sudo reboot
3.安装 xenomai
3.1 进入 xenomai 目录然后编译最后安装,如果权限不够可以加上 sudo
$ cd xenomai-2.6.5/
$./configure
$make -j$(nproc)
$sudo make install
3.2 更新 bashrc,可以自动寻库
打开 bashrc 文件
$ sudo gedit ~/.bashrc
然后在最后增加如下代码
#### Xenomai
export XENOMAI_ROOT_DIR=/usr/xenomai
export XENOMAI_PATH=/usr/xenomai
export PATH=$PATH:$XENOMAI_PATH/bin
export
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$XENOMAI_PATH/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$XENOMAI_PATH/lib
4 测试安装效果
使用 xeno latency 命令来测试当前延迟特性,或者在/usr/xenomai/bin 中 ./latency
也可。
注意:如果数值存在负值,可以通过以下命令来补正,其中 X 为输入的值
$ sudo su
$ echo X >/proc/xenomai/latency
5. 安装 etherlab 的 IGH 主站
5.1 下载和配置
首先从其官网下载软件包,网址:
http://www.etherlab.org/en/ethercat/index.php
另外在网上搜索“etherlab igh master ”的时候能找到另一个网址
https://sourceforge.net/projects/etherlabmaster/。这个网站的 master 代码 一直
有人维护,在 code 界面可以下载代码。
本次使用官网代码。
安装一些依赖
$ sudo apt-get install libtool autoconf autogen
配置软件编译内容,可以选择配置自己想要的功能,比如 r8169 网卡驱动,IGH 主站
最好使用专用网卡驱动,这样对实时性有所帮助,如果没有专用驱动则可使用 generic,实
时性略差凑活用。目前 IGH 主站代码中支持网卡包括 Realtek 8139 和 8169,intel
e100,支持到 linux-3.4 的内核。所以如果安装内核版本大于 3.4,在配置时会产生驱动
不支持的告警,导致配置不通过。
使用以下命令配置,其中--enable-8139too=no 便是去掉对这个驱动的编译,可供
使用的命令如下图所示。
./configure --with-linux-dir=/usr/src/linux-headers-3.18.20-xenomai-2.6.5
--with-module-dir=/lib/modules/3.18.20-xenomai-2.6.5 --enable-generic -
-enable-rtdm --with-xenomai-dir=/usr/xenomai --enable-cycles --enable-
hrtimer --enable-8139too=no