LinuxCNC Documentation
This page is 80% translated. Untranslated text is shown in English.

ИМЯ

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

СИНОПСИС

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

config [default: ""]

HostMot2 config strings, described in the hostmot2(9) manpage.

board_ip [по умолчанию: ""]

The IP address of the board(s), separated by commas. As shipped, the board address is 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 — это драйвер устройства, который соединяет платы Mesa Anything I/O на базе Ethernet (с прошивкой 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" в реальном времени.

INTERFACE CONFIGURATION

hm2_eth следует использовать на выделенном сетевом интерфейсе, соединяя ПК и плату только кабелем. Беспроводные и USB-сетевые интерфейсы не подходят.

В этих инструкциях предполагается, что ваш выделенный сетевой интерфейс — «eth1», 192.168.1/24 — это неиспользуемая частная сеть, что плата hostmot2 использует адрес по умолчанию 192.168.1.121, что вы используете Debian 7 или аналогичную версию и что вы иначе не используете iptables. Если какое-либо из этих утверждений неверно, вам необходимо соответствующим образом изменить инструкции. Выполнив все инструкции, перезагрузитесь, чтобы изменения вступили в силу.

Особенно важно убедиться, что сеть 192.168.1/24 еще не является частной сетью, используемой вашим интернет-маршрутизатором, поскольку это часто используемое значение. Если вы используете другую сеть, вам также потребуется переконфигурировать карту hostmot2 для использования IP-адреса в этой сети с помощью утилиты mesaflash(1) и изменить настройки перемычек. Обычно вы выбираете одну из сетей в частном адресном пространстве Private IPv4 address space. Одной из распространенных альтернатив является адрес ПК 10.10.10.1, адрес hostmot2 10.10.10.10.

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

Настройка сети со статическим адресом

Добавьте эти строки в файл /etc/network/interfaces, чтобы настроить ethernet interface 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.

PINS

В дополнение к контактам, описанным в hostmot2(9), hm2_eth(9) создает следующие дополнительные контакты:

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

Этот вывод имеет значение TRUE, когда в последнем цикле обнаружена ошибка чтения или записи, и FALSE в других случаях.

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

Этот контакт показывает текущий уровень ошибок: более высокие цифры указывают на большее количество недавно обнаруженных ошибок. Уровень ошибки всегда находится в диапазоне от 0 до package-error-limit включительно.

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

Этот вывод имеет значение TRUE , когда текущий уровень ошибки равен максимальному, и FALSE в других случаях.

PARAMETERS

В дополнение к параметрам, описанным в 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 микросекунд.

Установка слишком низкого значения может привести к ложным ошибкам чтения. Установка слишком высокого значения может привести к ошибкам задержки в реальном времени.

NOTES

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.

BUGS

Некоторые функции hostmot2, такие как uart, закодированы таким образом, что при использовании с hm2_eth возникает дополнительная задержка.

На 7i92 контакты HAL для светодиодов называются CR01..CR04, а шелкографии — CR3..CR6. В зависимости от прошивки FPGA, светодиоды изначально могут находиться под управлением механизма Ethernet. Это можно изменить до тех пор, пока не будет выключено и выключено питание с помощью

elbpcom 01D914000000

В зависимости от версии прошивки этот драйвер может вызывать свечение светодиода аппаратной ошибки, даже если драйвер и оборудование работают нормально. Сообщается, что это будет исправлено в будущих обновлениях битовых файлов от Mesa.

СМОТРИТЕ ТАКЖЕ

hostmot2(9), elbpcom(1)

LICENSE

GPL