다음에서 ethercat 설치https://gitlab.com/etherlab.org/ethercat.gitUbuntu 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 주소는 잘못된 매개변수 오류를 설명하는 "null"로 나타나지만 /etc/ethercat.conf(권한=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
이 경우 구성 파일이 잘못된 경로에 있음을 나타냅니다.