Кажется, я докопался до сути. Выполнение ifup -a -n
показало, что сначала выполняется файл /etc/network/if -pre -up.d/wait _iface. Это сценарий, который задерживает настройку «В случае, если у нас медленный -на -, появляется интерфейс (, например, eth -через -USB )». Я использую RPI2, и у него есть «eth -через -USB». Однако wait_iface
не выполняет -из -блока -, потому что переменные среды IF_WAIT_DELAY
и IFACE
, которые он ожидает найти,не устанавливаются сборкой Buildroot по умолчанию. Если я добавлю IFACE=eth0
и IF_WAIT_DELAY=10
непосредственно в wait_iface
, eth0 снова будет надежно работать.
То, что, как я думаю, происходило, на самом деле не было чем-то "блокирующим" ifup
, скорее имело место состояние гонки -eth0
, которое должно было быть уже доступно, когда ifup
выполнялось. Мое приложение задерживало eth0
доступность, если запускалось слишком рано. С другой стороны, наличие большого количества вывода на консоль задержало мое приложение достаточно, чтобы гарантировать, что eth0
будет доступно вовремя.
Я сталкивался с другими предложениями о том, как справиться с этим. Один должен был использовать allow-hotplug
в /etc/network/interfaces
. Я пробовал это безуспешно, но я не знаю, распознает ли Busybox это или я сделал это правильно. Другой совет состоял в том, чтобы создать правило udev
, чтобы вызвать eth0
, когда оно станет доступным.