LinuxCNC 开发系列教程(一):Ubuntu 环境下安装 EtherCAT 主站
本文详细记录在 Ubuntu + RTAI 实时内核环境下,从源码编译安装 IGH EtherLab 开源 EtherCAT 主站的完整流程,涵盖依赖安装、源码获取、编译配置、内核模块安装与网卡配置,帮助工业自动化开发者快速搭建实时以太网运动控制平台。
项目背景
EtherCAT 是一种高性能实时工业以太网总线,凭借微秒级同步精度和灵活的拓扑结构,被广泛应用于 CNC 数控、机器人、运动控制等工业自动化场景。LinuxCNC 作为开源 CNC 控制系统,配合 RTAI 实时内核与 IGH EtherLab 开源 EtherCAT 主站,可以构建低成本、高实时性的开放式运动控制平台。
本文记录在 Ubuntu 环境下从源码编译安装 EtherCAT 主站的完整过程,并整理常见依赖问题,帮助开发者少走弯路。
技术方案
- 操作系统:Ubuntu 12 LTS
- 内核版本:3.4.9-rtai-686-pae(RTAI 实时内核)
- 主站软件:IGH EtherLab Master(etherlabmaster 开源代码)
- 安装方式:源码编译 + 内核模块安装
系统架构
EtherCAT 主站以 Linux 内核模块(ec_master.ko)形式运行,通过以太网控制器(8139too / generic 驱动)与总线上的从站通信。用户空间提供 ethercat 命令行工具与 libethercat 库,供 LinuxCNC 等应用层软件调用,实现对从站 IO、伺服驱动等设备的实时控制。
实施过程
1. 安装依赖工具
需要 mercurial(hg)拉取源码,以及完整的编译工具链:
sudo apt-get install mercurial
sudo apt-get install build-essential libtool autoconf automake
2. 获取主站源码
hg clone http://hg.code.sf.net/p/etherlabmaster/code etherlabmaster-code
cd etherlabmaster-code
3. 生成配置脚本
./bootstrap
bootstrap 会调用 autoreconf 生成 configure 脚本。若提示缺少 autoreconf 或 libtoolize,说明 autoconf、automake、libtool 未安装完整,补齐后重新执行。
4. 配置编译参数
./configure
configure 会自动检测内核源码路径(如 /usr/src/linux-headers-3.4-9-rtai-686-pae)与编译环境,生成 Makefile 及内核模块构建规则。
5. 编译所有模块
make all modules
6. 安装模块与工具
make modules_install install
该命令将内核模块(ec_master.ko、ec_generic.ko、ec_8139too.ko 等)安装到内核模块目录,并将 ethercat 工具、库文件与启动脚本安装到 /opt/etherlab/。
7. 刷新模块依赖
depmod
8. 配置网卡与启动脚本
# 建立启动脚本软链接
ln -s /opt/etherlab/etc/init.d/ethercat /etc/init.d/ethercat
# 拷贝网卡配置文件
mkdir -p /etc/sysconfig
cp /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/ethercat
# 编辑配置文件
sudo gedit /etc/sysconfig/ethercat
配置要点:
| 配置项 | 说明 |
|---|---|
| MASTER0_DEVICE | 填写实际网卡 MAC 地址(通过 ifconfig 获取) |
| DEVICE_MODULES | 设置为 generic |
保存后建立命令软链接,并添加 udev 规则创建设备节点:
ln -s /opt/etherlab/bin/ethercat /usr/local/bin/ethercat
echo 'KERNEL=="EtherCAT[0-9]*", MODE="0664"' > /etc/udev/rules.d/99-EtherCAT.rules
应用价值
- 完全开源免费,控制成本低
- 配合 RTAI 实时内核,满足运动控制对同步与实时性的严苛要求
- 源码级部署,便于按 CNC、机器人、自动化产线等场景深度定制
SEO关键词
EtherCAT主站, LinuxCNC, EtherCAT安装, 实时以太网, RTAI内核, 运动控制, Ubuntu
