Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: На каком софтверном интерфейсе поддержать I/O с линукс борды через PoE во внешний мир
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
iiv
Добрый день,

я сильный профан в сабже, не пинайте, пожалуйста, сильно.

Есть борда Cyclone V SoC, ее ethernet через PoE виден во внешний мир (скорей всего по DHCP она получила локальный адрес).

На борде есть самопально написанная С программа, функциональность которой можно описать так:
1. послать на выполнение строковую команду (одна достаточно длинная строка, скажем до 10КБайт) и сразу без задержки получить в ответ строку с результатом,
2. закачать или скачать один или несколько файлов в какую-то выделенную для этого внутреннюю директорию борды.

На данный момент юзер может залогиниться по ssh на борду и может это выполнять.

Теперь мне хочется, чтобы дополнительно
A. юзер мог скачать по возможности простую и компатибельную со всеми Windows/MAC/Android/Linux платформами библиотеку, в которой есть эта функциональность и удаленно делать все то же самое,
B. чтобы на этой борде стоял какой-то минималистический веб сервер, который бы позволял бы удобно запускать эти команды, смотреть результат и качать файлы по http протоколу,
C. чтобы юзер мог у себя на своем компьютере поставить какую-то программку с идентичным [B] функционалом, и делал то же самое со своего компа через етернет.
D. Дополнительно хотелось бы реализовать функциональность пароля на выполнение этих операций, причем чтоб пароль не светился в открытом доступе по UDP интерфейсу. Наверное было бы хорошо поддержать возможность работы на несколько юзеров, но, если это будет отъедать много процессорных ресурсов Cyclone V SoC, то могу забить.

Также то, что крутится на Cyclone V SoC не должно быть тяжелым, так как оба ядра заняты другими делами по самое здрассте, и правильнее было бы, чтобы такая программа была бы написана на С, чтоб я мог при необходимости приостанавливать ее выполнение, чтоб другие процессы не тормозились бы.

Как я понимаю

* мне надо на какой-то порт повесить мою программу, что реализует функциональность [1] (поделитесь, пожалуйста, простым примером), и найти какой-то простой до ужаса метод реализации [2],
* на чем-то написать веб морду, которая бы транслировала http команды в функциональность порта и обратно (то есть чтоб одновременно и порт работал, и веб морда, и юзер сам решал, что ему проще).
* на чем-то написать интерфейс посылки на порт (socket везде поддерживаются, или лучше что-то другое взять?), чтоб юзер мог прилинковать это к своему С/С++ проекту.

Тыкните, пожалуйста, носом что почитать, а еще луче, что конкретно, а именно какие библиотеки или пакеты, для этих операций выбрать.

ЗЫ в гугле не забанили, но от моря разных решений реально запутался и не могу принять решение, что проще, не пинайте, пожалуйста, сильно!

Спасибо!

ИИВ
k155la3
что касается защиты-паролей итп.
UDP будет защищен настолько, насколько Вы это пропишите в своем коде. Смотрите протоколы SSL/TLS, HTTPS. Они встраиваются в TCP и обеспечивают защищенное соединение. Также, броузеры вроде Chrome хотят HTTPS.
Соотв-но, Вы можете в начальном этапе разработки не очень обращать внимание на защиту, тк. эту обязанность выполнит TLS.
(шифрование-паролирование). Когда система "в основе" будет отлажена, можно подключать защиту.
т.е. Ваш вопрос о библиотеках: Защита, пароли - это TLS, https.

Наиболее надежное и быстрое соединение клиент-сервер Вы можете реализовать на UDP (однопользовательское соединение).
Протокол реализуете сами, на 100 проц. Это и минус, и плюс. По коду это будет достаточно сложно, необходимо хорошо разобраться с socket/datagramm API.
Сложно не с точки зрения реализации протокола, а с т.з. освоения API.


iiv
Спасибо большое, k155la3 за разъяснения.

Постепенно проясняется, но вопросов еще много.

Скажите, пожалуйста, правильно ли я понимаю, что с помощью сокетов я смогу реализовать что-то похожее на функциональность юниксовского open/write/read или хотя бы fopen/fprintf/fscanf/feof

То есть внутри моей программы я мог бы весь ввод-вывод сделать как если бы она работала с двумя потоками, один на вход (stdin) и один на выход (stdout).

Скажите, пожалуйста, можно ли это как-то сделать так, что оно присоединяется через какой-то секьюрны протокол (SSL/TLS) и коммуникация происходит с какого-то ремоут хоста на мою ембеддед линукс борду?

С защитой - паранойи нет, но нужна возможность минимальной защиты от дурака, то есть типа борда сидит в открытой сетке, и только тот, кто имеет право (то есть имеет хотя бы пароль), на нее может посылать команды.

С радостью выслушаю и последую советам и замечаниям!
iiv
поразбиравшись далее, предполагаю, что надо ставить POCO у себя на Cyclone V SoC, поддерживать интерфейс JSON через webapi, а вебморду отдавать на клиентский компьютер, чтоб процессор не загружать.

Если есть какие-то альтернативы или так делать ко каким-то причинам не правильно или не эффективно, то, пожалуйста, посоветуйте!
k155la3
Работа с сокетами в Windows и Unix очень похожа. По Unix я пользовался книгой Терренс Чан Системное прогр-ие на CPP (кажется). К книге есть примеры работы с сокетами. Примеров и книг масса в сети.
Потоки я не использовал, достаточно было датаграммных пакетов (UDP), что и Вам рекомендую для начала.
Если нужен потоковый обмен - UDP не пойдет, надо TCP.
Цитата
Скажите, пожалуйста, правильно ли я понимаю, что с помощью сокетов я смогу реализовать что-то похожее на функциональность юниксовского open/write/read или хотя бы fopen/fprintf/fscanf/feof
UDP - только read/write.
Цитата
Скажите, пожалуйста, можно ли это как-то сделать так, что оно присоединяется через какой-то секьюрны протокол (SSL/TLS) и коммуникация происходит с какого-то ремоут хоста на мою ембеддед линукс борду?
Если Вы реализуете соединение на TCP, то режим с шифрованием включается очень просто, при открытии соединения надо в битовой маске параметров установить бит разрешения этого режима. Детально сказать не могу, сам не использовал, инф только по документации.
Цитата
С защитой - паранойи нет, но нужна возможность минимальной защиты от дурака, то есть типа борда сидит в открытой сетке, и только тот, кто имеет право (то есть имеет хотя бы пароль), на нее может посылать команды.

Если достаточно только пароля - то шифрование TLS можете вообще не использовать (ОНО защищает канал от перехвата), а доступ по паролю
реализуете сами (сам пароль передаете в кодированном виде. Кодирование на стороне клиента - с использованием случайного числа, которое генерирует сервер).
---
Цитата
Если есть какие-то альтернативы или так делать ко каким-то причинам не правильно или не эффективно, то, пожалуйста, посоветуйте!

sm.gif Альтернатив - миллион sm.gif Эффективность зависит от критериев, по которым Вы будете оценивать результат работы.
Главное - начать поэтапно, на практике, реализовывать то что задумали.
Если не ясно, как сделать все в комплексе - делаете то, что нужно в любом случае.
Реализуйте на PC "клиента" TCP (MSVC, Java). На SoC - "сервер", выполняющий "эхо" функцию.
Если это будет реализовано, можно идти дальше. Как "бонус" - автоматически получаете утилиту для тестирования сервера которая понадобится в дальнейшем для отладки-диагностики . На следующем этапе эту утилиту дополняете прочими ф-ми для тестирования сервера. Прикладные функции, прописанные в утилите используете в клиенте.
Возможно, такая последовательность для Вас - пройденный этап, но я работал по такой схеме.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.