При решении задач электроники все методы хороши, если они устраивают ТЗ, бюджет и разработчика. Linux был мне неизвестен, но вместе с задачами, которые решаешь, растешь и сам. Этот пост расскажет о том, как применить компьютер с Ubuntu для связи большого компьютера с контроллером в соответствии со схемой:
Статья описывает практику применения описанной техники и не ставит целью охватить все глубины и возможности современной аппаратуры. Это один из вариантов решения поставленной задачи.
Описание: нужно передавать немалые объёмы данных (к примеру, по 50 Мбайт/сек), сформированные контроллером некоторого прибора, в компьютер c Windows для последующей их математической обработки, отображения в некотором виде на экране, ну и прочего…
Варианты решения:
- Построим контроллер, с интерфейсом Gigabit ethernet на ПЛИС
- То же, но на какой-то штуке (к примеру, AX88180)
- Ваш вариант
Первый вариант простым не будет. Если делать по чесноку, то дорого. Реализация каждого протокола — вопрос времени и умения программиста, но это не та задача, на которую хочется тратить время, при создании прибора. Без протокола или только до уровня UDP — сложности совместимости. Добавить что-то новое — как лошадь объездить.
Второй вариант — тоже не подарок. Реализация интерфейса ради интерфейса — не цель проекта. А такая микросхема съест кучу ног, которые могли бы пригодиться. В итоге ПЛИС растёт, плата растёт, бюджет растёт. А простоты нет…
В связи с этим, решились на эксперимент — построить конгломерат Ethernet на компьютере и контроллера с интерфейсом USB. Небезызвестный производитель FTDI относительно недавно предложил решение для USB3.0 на базе FT600. А этот маленький компьютер будет связывать между собой большой и удобный Windows управляемый ПК с контроллером, возможно обрабатывать первичные данные.
Встаёт вопрос, а как же будет работать маленький компьютер?
Желание использовать для этого дела Windows почему-то даже не появилось, а вот Linux — вариант реальный. Но беда в том, что ни кто в команде не знает, что с ним делать. Не долго думая на виртуальной машине появился Ubuntu Desktop. Да он работает. Сомнений не было, но хотелось посмотреть. Теперь к делу…
Я не буду описывать все мучения человека, который 20 лет пользовался Windows и тут на тебе — Linux. Но я постараюсь дать указания, куда смотреть и что искать, если что-то идёт не так.
Этапы:
-
Выбор компьютераОдноплатные компьютеры пока брать не хотелось, т.к. не везде есть USB 3.0, не в каждом Gigabit Ethernet, который может вдруг понадобиться, да и реальная производительность таких плат — вопрос. Взял решение в коробочке с процессором Intel, крайне похожее на nuc: HDD 500Gb, RAM 2Gb, USB 3.0, Ethernet 100/1000. Не думаю, что это принципиальный вопрос.
-
Ставим Ubuntu ServerИдем cюда. Качаем последнюю версию с надписью LTS, что означает долгосрочную поддержку и выход обновлений до 5 лет.
У меня был Ubuntu Server 16.04.2.
Ставим на пк с флэшки. Для этого: инструкция, как ставить на флэшку загрузочный образ, и инструкция, как ставить ОС.
Не забудьте при установке поставить галочку OpenSSH server, для доступа по сети к компьютеру. Будем передавать файлы и управлять компьютером с помощью утилит из Putty. -
Настраиваем и дополняем серверПомимо непосредственного контакта с контроллером, требуется создать экосистему, позволяющую компилировать проект (мне показалось удобным это делать на прототипе, а не на рабочей машине с кросс компиляцией), выделять IP адрес для управляющего компьютера пользователя. Самый удобный вариант установки дополнительных пакетов — использование онлайн хранилища deb пакетов, доступного через apt-get, что работает при подключении к интернету. К счастью, это не единственный вариант установки. Если хочется не зависеть от интернета и каких-то изменений в библиотеках и пакетах, то можно выкачать нужные пакеты и устанавливать их самому с помощью:
sudo dpkg -i <имя_пакета>.deb
Но для этого нужно знать все зависимости. К примеру, установка isc-dhcp-server потянула у меня следующие пакеты:
— libisccfg-export140
— libirs-export141
— isc-dhcp-server_4.3.3Для начала, подключаем к интернету сервер через маршрутизатор, который ему выделит IP (если что ищите в поисковике настройки файла /etc/network/interfaces ), и делаем следующее:
Установка компилятора
Примеры драйверов FTD3XX от FTDI написаны на C++11. Можно ставить компилятор g++, а при компиляции нужно будет указать опцию -std=c++11sudo apt-get install g++
Вводим пароль и соглашаемся.
Теперь в папке, где есть правильный Makefile можно написать
make
и будет компилироваться проект, но об этом позже.
Установка DHCP сервера
Я использовал isc-dhcp-server. На ubunte пишем:sudo apt-get install isc-dhcp-server
Вводим пароль и соглашаемся.
- Ставим драйвер от FTDI
- Компилируем программу
- Делаем демона для автозагрузки и слежения за программой
- Контролируем процессы
На данном этапе хочу остановиться и посмотреть отзывы уважаемых читателей, а главное знающих людей. Может стоит вносить коррективы. Тем не менее, по результатам появится вторая часть, более содержательная.
Автор: весёлый усач