Мне нравится ответ Стефана, потому что он не читает весь файл снова и снова, поэтому я добавляю здесь bash(в Linux )эквивалент его решения (bash не имеет встроенной seek
или tell
способность ). Я бы использовал комментарий, но моя репутация слишком низкая.
LASTPOS=/tmp/saved_pos
exec 3< "$1"
test -f "$LASTPOS" && STARTPOS=$(($(<$LASTPOS)+1))
tail -c "+${STARTPOS:-1}" <&3 | grep "ERROR FOUND"
grep '^pos:' /proc/self/fdinfo/3 | cut -f2 > "$LASTPOS"
Я также заменил команду awk
на grep
, потому что она обычно быстрее. Вы можете направить вывод в команду awk
, если вам нужна дальнейшая обработка.
Вот несколько советов по настройке системы Yocto. Вам придется более тщательно изучить каждую тему. Все они имеют свои преимущества и недостатки, но я бы предложил последний (NAT ).
Установить как мост
Поскольку система Linux является точкой доступа, вполне возможно соединить интерфейс Ethernet и интерфейс Wi-Fi вместе. Конкретный метод требует правильной настройки hostapd для использования моста. Несколько указателей здесь и там .
Вероятно, вам придется настроить (вручную во время сборки или с помощью DHCP )камеру для использования 192.168.42.1 на этот раз, но система Yocto все еще должна иметь (другой )IP-адрес в 192.168.42.0/24, потому что он все еще требует DHCP-сервера.
Таким образом, это по-прежнему выявляло бы двойственную природу доски. Вероятно, есть способы сделать систему Yocto полностью прозрачной и по-прежнему предоставлять DHCP (, появляющийся с 192.168.42.1 ), но это было бы сложно сделать.
Установить как маршрутизатор
Необходимо включить IP-переадресацию.
Когда система камер видна
Это означает, что вы должны опубликовать маршрут к камере с помощью DHCP, но не как маршрут по умолчанию. Конечным пользователям не понравится потеря Интернета для использования камеры из-за нового маршрута по умолчанию. Чтобы публиковать определенные маршруты с помощью DHCP, вам нужны обе эти функции одновременно :
.Параметр бесклассового маршрута DHCP 121
это параметр RFC Standards Track
нестандартный -Параметр 249 Microsoft DHCP
или более старые системы Windows не получат его
Конфигурация зависит от DHCP-сервера, используемого в системе. Это наверноеКеа ,который не имеет встроенной -поддержки для этих опций, но может обрабатывать любую произвольную опцию, как описано там (, для этого требуется хорошее понимание опции из RFC ).
И не забудьте настроить для камеры маршрут по умолчанию через 192.168.30.34 (вручную или через DHCP, не требуя опций выше ).
Но это может быть неинтересно, потому что:
Или Камера скрыта за NAT
Используя в качестве ALG внешний (то есть :не основной )модуль ядра Linux nf_nat_rtsp
, предоставленный проектомrtsp -linux(и для пример, упакованный в Debian какnat -rtsp -dkms)по соответствующим правилам NAT, аналогичным:
iptables -t nat -A PREROUTING -i uap0 -d 192.168.42.1 -p tcp --dport 554 -j DNAT --to-destination 192.168.30.35
iptables -t nat -A PREROUTING -i uap0 -d 192.168.42.1 -p udp --dport 554 -j DNAT --to-destination 192.168.30.35
и адекватная конфигурация вспомогательного модуля, как описано в этом блоге:Безопасное использование iptables и помощников по отслеживанию соединений или просто -повторное включение «небезопасного» метода после обдумывания любых соображений безопасности:
sysctl -w net.netfilter.nf_conntrack_helper=1
Резюме:
избегает сложной конфигурации DHCP и не раскрывает (тот факт, что )на плате есть вторая система
Камере даже не нужен маршрут по умолчанию, если используется двойной NAT:
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.0/24 -j MASQUERADE
требуется модуль ядра, поэтому модуль ядра поддерживается, если он не был включен ранее во встроенной системе.
Необходимо проверить совместимость модуля с RTSP
Я бы рекомендовал включить IP-переадресацию на вашем одноплатном компьютере. Поставить:
net.ipv4.ip_forward=1
- /etc/sysctl.conf
и запустите sudo sysctl -p
. Я не уверен, как это работает в yocto.
Затем вам нужно убедиться, что трафик направляется с вашего компьютера на камеру через ваш компьютер yocto. Это зависит от того, как настроены другие сетевые интерфейсы на вашем компьютере. Как правило, это должно быть что-то вроде этого:
ip route add 192.168.30.0/24 via 192.168.42.1 dev wlp2s0
Я не знаком с RTSP, но полагаю, что этого должно быть достаточно.