LinuxCNC Documentation

ІМ’Я

hm2_eth — драйвер LinuxCNC HAL для плат вводу-виводу Mesa Electronics Ethernet Anything з прошивкою HostMot2.

СИНТАКСИС

loadrt hm2_eth [config="str[,str…​]"] [board_ip=ip[,ip…​] ] [board_mac=mac[,mac…​] ] [firewall=auto|iptables|nft|none]

config [за замовчуванням: ""]

HostMot2 рядки конфігурації, описані в довідковій сторінці hostmot2(9).

board_ip [за замовчуванням: ""]

IP-адреса плати(плат), розділена комами. У стані постачання адреса плати — 192.168.1.121.

firewall [default: auto]

Selects the firewall backend used to isolate the dedicated interface. By default hm2_eth installs the rules itself; rtapi_app raises cap_net_admin into its ambient capability set at startup so the calls succeed under both setuid-root and rootless (file-cap) installs. If the cap is not held (or no backend binary is present) the probe fails and rule installation is skipped with a warning; in that case configure the rules manually using the recipe in the NOTES section below. Accepted values:

auto

Use iptables when it is usable, otherwise fall back to nft. This preserves historical behaviour on iptables systems and works out of the box on nftables-only systems that have no iptables binary.

iptables

Force the legacy iptables / ip6tables backend.

nft

Force the nftables backend. Rules live in a dedicated inet table named hm2_eth, so flushing or removing them never touches your other firewall rules.

none

Disable all firewall interaction; manage the firewall externally (firewalld, systemd units, your own ruleset).

ОПИС

hm2_eth — це драйвер пристрою, який з’єднує плати Anything I/O на базі Ethernet від Mesa (з прошивкою HostMot2) з LinuxCNC HAL. Підтримуються такі плати: 7I76E, 7I80DB, 7I80HD, 7I92, 7I93, 7I94, 7I95, 7I96, 7I96S, 7I97, 7I98. Також підтримуються плати з прошивкою litehm2 (https://github.com/sensille/litehm2). Прошивка плати повинна бути завантажена на плату за допомогою програми mesaflash(1).

hm2_eth доступний лише тоді, коли LinuxCNC налаштовано на режим реального часу "uspace".

КОНФІГУРАЦІЯ ІНТЕРФЕЙСУ

hm2_eth слід використовувати на виділеному мережевому інтерфейсі, з’єднуючи ПК та плату лише за допомогою кабелю. Бездротові та USB-мережеві інтерфейси не підходять.

Ці інструкції передбачають, що ваш виділений мережевий інтерфейс має ім’я «eth1», 192.168.1/24 є невикористаною приватною мережею, плата hostmot2 використовує стандартну адресу 192.168.1.121, ви використовуєте Debian 7 або подібну систему і не використовуєте iptables. Якщо будь-яка з цих умов не відповідає дійсності, вам потрібно буде відповідно змінити інструкції. Після виконання всіх інструкцій перезавантажте систему, щоб зміни набули чинності.

Особливо важливо перевірити, чи мережа 192.168.1/24 не є вже приватною мережею, яку використовує ваш інтернет-маршрутизатор, оскільки це загальновживане значення. Якщо ви використовуєте іншу мережу, вам також потрібно буде переналаштувати карту hostmot2 для використання IP-адреси в цій мережі за допомогою утиліти mesaflash(1) та змінити налаштування перемичок. Зазвичай ви обираєте одну з мереж у діапазоні Приватний простір IPv4-адрес. Однією з поширених альтернатив є адреса ПК 10.10.10.1, адреса hostmot2 10.10.10.10.

Використання виділеного інтерфейсу Ethernet під час роботи LinuxCNC може призвести до порушення гарантій роботи в режимі реального часу. hm2_eth автоматично усуває більшість випадкових причин перешкод.

Налаштування мережі зі статичною адресою

Додайте ці рядки до файлу /etc/network/interfaces, щоб налаштувати інтерфейс Ethernet eth1 зі статичною адресою:

auto eth1
iface eth1 inet static
    address 192.168.1.1
    hardware-irq-coalesce-rx-usecs 0

ВТРАТА ПАКЕТІВ

Хоча Ethernet є досить стійким до електричних перешкод, багато систем не забезпечують 100% бездоганного прийому пакетів. Драйвер hm2_eth має обмежену здатність обробляти втрачені пакети. Втрата пакетів виявляється шляхом передачі очікуваної кількості пакетів для читання або запису з кожним запитом і перевірки значення з кожним відповіддю на читання. Коли виявляється втрачений пакет, в цьому циклі активується контакт packet-error, контакт packet-error-level збільшується, і якщо він досягає порогового значення, то подається сигнал про постійну помилку вводу-виводу низького рівня.

Однак не всі спеціальні функції hm2 знають, як правильно відновлювати втрачені пакети. Наприклад, спеціальна функція кодера не управляє належним чином індексною функцією при втраті пакетів. Автор вважає, що це може призвести до рідкісних збоїв у роботі home-to-index, що може мати серйозні наслідки.

З іншого боку, системи pid-stepper будуть працювати належним чином протягом тривалого часу з втратою пакетів порядку 0,01%, якщо помилка слідування буде достатньо збільшена, щоб застаріла зворотна інформація про положення не викликала помилку слідування. Зміна конфігурації HAL таким чином, щоб під час тимчасової втрати пакетів значення pid і зворотного зв’язку руху дорівнювали значенню команди, а не застарілому значенню зворотного зв’язку, здається, покращує налаштування. Це можна досягти за допомогою компонента mux2(9) для кожного сигналу зворотного зв’язку, використовуючи packet-error як вхід mux2 sel.

ПІНИ

Окрім контактів, описаних у hostmot2(9), hm2_eth(9) створює такі додаткові контакти:

hm2_<BoardType>.<BoardNum>.packet-error (bit, out)

Цей контакт має значення TRUE (ІСТИНА), коли останній цикл виявив помилку читання або запису, і FALSE (ХИБНІСТЬ) в інші моменти.

hm2_<BoardType>.<BoardNum>.packet-error-level (s32, out)

Цей висновок показує поточний рівень помилок, причому вищі числа вказують на більшу кількість нещодавно виявлених помилок. Рівень помилок завжди знаходиться в діапазоні від 0 до ліміту помилок пакетів включно.

hm2_<BoardType>.<BoardNum>.packet-error-exceeded (bit, out)

Цей контакт має значення TRUE (ІСТИНА), коли поточний рівень помилки дорівнює максимуму, і FALSE (ХИБНІСТЬ) в інші моменти часу.

ПАРАМЕТРИ

Окрім параметрів, задокументованих у hostmot2(9), hm2_eth(9) створює такі додаткові параметри:

hm2_<BoardType>.<BoardNum>.packet-error-decrement (s32, rw)

Сума, що віднімається від packet-error-level за цикл без виявлених помилок читання або запису, не опускаючись нижче нуля.

hm2_<BoardType>.<BoardNum>.packet-error-increment (s32, rw)

Сума, додана до packet-error-level за цикл без виявлених помилок читання або запису, не перевищуючи packet-error-limit.

hm2_<BoardType>.<BoardNum>.packet-error-limit (s32, rw)

Рівень, на якому виявлена помилка читання або запису вважається постійною помилкою. Коли досягнуто цього рівня помилки, контакт io-error плати стає TRUE, і умову необхідно скинути вручну.

hm2_<BoardType>.<BoardNum>.packet-read-timeout (s32, rw)

Час, який повинен пройти до закінчення терміну очікування запиту на читання. Якщо значення менше або дорівнює 0, воно інтерпретується як 80% періоду потоку. Якщо значення менше 100, воно інтерпретується як відсоток періоду потоку. В іншому випадку воно інтерпретується як час у наносекундах. У будь-якому випадку час очікування ніколи не буває менше 100 мікросекунд.

Занизьке значення може призвести до помилкових помилок читання. Завищене значення може призвести до помилок затримки в реальному часі.

НОТАТКИ

hm2_eth installs firewall rules to control the network interface while HAL is running. Two backends are supported and chosen with the firewall parameter (see above): legacy iptables and nftables.

With the iptables backend, hm2_eth uses a chain called "hm2-eth-rules-output". That technology is common to control network access to (INPUT chain), through (FORWARD chain) or from (OUTPUT chain) your computer. The chain is created if it does not exist, and a jump to it is inserted at the beginning of the OUTPUT chain if it is not there already. If you have an existing iptables setup, you can insert a direct jump from OUTPUT to hm2-eth-rules-output in an order appropriate to your local network.

With the nftables backend, hm2_eth uses a dedicated inet table named "hm2_eth" with an output-hook chain. Because the table is private, flushing or deleting it never affects your other nftables rules.

At (normal) exit, hm2_eth will remove the rules. After a crash, you can manually clear the iptables rules with sudo iptables -F hm2-eth-rules-output (or, for nftables, with sudo nft delete table inet hm2_eth); the rules are also removed by a reboot.

Manual iptables configuration

When LinuxCNC is installed without cap_net_admin on rtapi_app (typically because sudo make setcap was not run after the build), hm2_eth cannot install its rules and prints a warning. Set up the chain manually as root. Adjust the IP addresses, UDP destination port, and interface name to match your install:

HOST_IP=192.168.1.1
BOARD_IP=192.168.1.121
BOARD_DPORT=27181
IFACE=eth1

iptables -N hm2-eth-rules-output
iptables -I OUTPUT 1 -j hm2-eth-rules-output
iptables -A hm2-eth-rules-output \
    -p udp -m udp -d $BOARD_IP --dport $BOARD_DPORT \
    -s $HOST_IP -j ACCEPT
iptables -A hm2-eth-rules-output -o $IFACE -p icmp -j DROP
iptables -A hm2-eth-rules-output -o $IFACE \
    -j REJECT --reject-with icmp-admin-prohibited
ip6tables -N hm2-eth-rules-output
ip6tables -I OUTPUT 1 -j hm2-eth-rules-output
ip6tables -A hm2-eth-rules-output -o $IFACE -j DROP

For full IPv6 quiescence (no router solicitations or neighbor discovery on the dedicated interface), additionally add this line to /etc/sysctl.d/99-hm2-eth.conf and reboot:

net.ipv6.conf.IFACE.disable_ipv6 = 1

(The default ip6tables rule above only drops outbound IPv6; the kernel still generates the packets.) Tear down the runtime rules with:

iptables -F hm2-eth-rules-output
iptables -D OUTPUT -j hm2-eth-rules-output
iptables -X hm2-eth-rules-output
ip6tables -F hm2-eth-rules-output
ip6tables -D OUTPUT -j hm2-eth-rules-output
ip6tables -X hm2-eth-rules-output

Manual nftables configuration

On nftables-only systems (no iptables binary), set the rules up as root with nft. The inet family covers IPv4 and IPv6 in one chain. Adjust the addresses, UDP destination port, and interface name:

HOST_IP=192.168.1.1
BOARD_IP=192.168.1.121
BOARD_DPORT=27181
IFACE=eth1

nft add table inet hm2_eth
nft add chain inet hm2_eth output \
    '{ type filter hook output priority 0; policy accept; }'
nft add rule inet hm2_eth output \
    ip saddr $HOST_IP ip daddr $BOARD_IP udp dport $BOARD_DPORT accept
nft add rule inet hm2_eth output oifname $IFACE ip protocol icmp drop
nft add rule inet hm2_eth output oifname $IFACE \
    reject with icmp type admin-prohibited
nft add rule inet hm2_eth output oifname $IFACE ip6 version 6 drop

Tear the rules down by deleting the whole private table:

nft delete table inet hm2_eth

"hardware-irq-coalesce-rx-usecs" зменшує час очікування на отримання пакета в більшості систем, але принаймні на деяких мережевих картах з чіпсетом Marvel це шкідливо. Якщо ця опція не покращує продуктивність системи, видаліть її. Для повернення значення до заводських налаштувань після ввімкнення системи потрібно перезавантажити комп’ютер. Для цього потрібно встановити пакет ethtool.

ПОМИЛКИ

Деякі функції hostmot2, такі як uart, закодовані таким чином, що це спричиняє додаткову затримку при використанні з hm2_eth.

На 7i92 контакти HAL для світлодіодів називаються CR01..CR04, але на шовкографії вони позначені як CR3..CR6. Залежно від прошивки FPGA, світлодіоди спочатку можуть перебувати під контролем мережевого двигуна. Це можна змінити до вимкнення живлення за допомогою

elbpcom 01D914000000

Залежно від версії прошивки, цей драйвер може спричинити загоряння світлодіода апаратної помилки, навіть якщо драйвер і апаратне забезпечення функціонують нормально. За повідомленнями, ця проблема буде виправлена в майбутніх оновленнях бітових файлів від Mesa.

ДИВІТЬСЯ ТАКОЖ

hostmot2(9), elbpcom(1)

ЛІЦЕНЗІЯ

GPL