从以下位置安装 ethercathttps://gitlab.com/etherlab.org/ethercat.git到运行 Ubuntu Server 23.04(32 位)的 RPi 3B v1.2。第一次使用 Ubuntu;对Raspbian比较熟悉。
花了很长时间才达到一切都没有错误的地步,然后编辑 ethercat.conf 文件并复制到 /etc
这是错误
rbgorbet@artoo:~$ sudo ethercatctl start
modprobe: ERROR: could not insert 'ec_master': Invalid argument
以及日记中可能的线索
Jun 21 17:51:15 artoo sudo[1024]: rbgorbet : TTY=pts/0 ; PWD=/home/rbgorbet ; USER=root ; COMMAND=/usr/local/sbin/ethercatctl start
Jun 21 17:51:15 artoo sudo[1024]: pam_unix(sudo:session): session opened for user root(uid=0) by rbgorbet(uid=1000)
Jun 21 17:51:16 artoo kernel: ec_master: loading out-of-tree module taints kernel.
Jun 21 17:51:16 artoo kernel: EtherCAT: Master driver 1.5.2 1.5.2-300-g04f202a3
Jun 21 17:51:16 artoo kernel: EtherCAT ERROR: MAC address may not be empty.
Jun 21 17:51:16 artoo sudo[1024]: pam_unix(sudo:session): session closed for user root
MAC 地址似乎为“空”,这可以解释无效参数错误,但文件 /etc/ethercat.conf (permissions=644) 包括
...
# Examples:
# MASTER0_DEVICE="00:00:08:44:ab:66"
# MASTER0_DEVICE="eth0"
#
MASTER0_DEVICE="b8:27:eb:44:73:ab"
#MASTER1_DEVICE=""
...
和
rbgorbet@artoo:~$ ip addr
...
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether b8:27:eb:44:73:ab brd ff:ff:ff:ff:ff:ff
...
我尝试过的事情(除了在互联网上搜索错误文本之外):
- 如果 systemd 没有接收到对 .conf 文件的更改,则重新启动;我希望这就是问题所在(我在启动后编辑了 .conf...)
- sudo systemctl 守护进程重新启动。
- 将 ethercat.conf 中的实际 MAC 地址替换为“eth0”,如注释示例中所示
- 检查旧的 sysconfig 文件是否可能导致问题。根本没有 /etc/init.d/ethercat 文件,也没有 /etc/sysconfig 目录(这是有道理的)。
在每种情况下,启动 ethercatctl 服务时我都会遇到相同的错误。
有什么想法吗?我很受阻。
根据评论中的建议尝试了其他事情:
rbgorbet@artoo:~$ sudo strace -f -e trace=finit_module,init_module ethercatctl start
strace: Process 3462 attached
[pid 3462] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3462, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 3463 attached
[pid 3463] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3463, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 3464 attached
[pid 3464] finit_module(3, "main_devices= backup_devices=", 0) = -1 EINVAL (Invalid argument)
modprobe: ERROR: could not insert 'ec_master': Invalid argument
[pid 3464] +++ exited with 1 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3464, si_uid=0, si_status=1, si_utime=0, si_stime=5 /* 0.05 s */} ---
+++ exited with 1 +++
结果我去寻找main_devices=
使用grep
,并在 中找到了它/usr/local/sbin/ethercatctl
。我通过查看确认/lib/systemd/system/ethercat.service
这就是所谓的。看着ethercatctl
我注意到它期望conf文件位于与我放置它不同的位置(根据ethercat安装指南,我将其放入/etc/ethercat.conf
,但它期望在中找到它/usr/local/bin/ethercat.conf
)。果然,当我发现该文件时,MAC 信息丢失了。添加它解决了问题,服务现在开始了。
答案1
运行ethercatctl
允许strace
检查是否使用正确的参数调用模块:
sudo strace -f -e trace=finit_module,init_module ethercatctl start
显然情况并非如此。然后您可以进行不同的strace
调用来检查是否ethercatctl
成功读取配置文件:
sudo strace -f -e trace=%file ethercatctl start 2>&1 | grep ethercat.conf
在这种情况下,它表明配置文件位于错误的路径中。