Взгляд снизу вверх или Ubuntu Server для разработчика электроники. Часть 1

в 13:08, , рубрики: c++, Программирование, Разработка под Linux, метки: , , , , ,

При решении задач электроники все методы хороши, если они устраивают ТЗ, бюджет и разработчика. Linux был мне неизвестен, но вместе с задачами, которые решаешь, растешь и сам. Этот пост расскажет о том, как применить компьютер с Ubuntu для связи большого компьютера с контроллером в соответствии со схемой:

Взгляд снизу вверх или Ubuntu Server для разработчика электроники. Часть 1 - 1

Статья описывает практику применения описанной техники и не ставит целью охватить все глубины и возможности современной аппаратуры. Это один из вариантов решения поставленной задачи.

Описание: нужно передавать немалые объёмы данных (к примеру, по 50 Мбайт/сек), сформированные контроллером некоторого прибора, в компьютер c Windows для последующей их математической обработки, отображения в некотором виде на экране, ну и прочего…

Варианты решения:

  • Построим контроллер, с интерфейсом Gigabit ethernet на ПЛИС
  • То же, но на какой-то штуке (к примеру, AX88180)
  • Ваш вариант

Первый вариант простым не будет. Если делать по чесноку, то дорого. Реализация каждого протокола — вопрос времени и умения программиста, но это не та задача, на которую хочется тратить время, при создании прибора. Без протокола или только до уровня UDP — сложности совместимости. Добавить что-то новое — как лошадь объездить.

Второй вариант — тоже не подарок. Реализация интерфейса ради интерфейса — не цель проекта. А такая микросхема съест кучу ног, которые могли бы пригодиться. В итоге ПЛИС растёт, плата растёт, бюджет растёт. А простоты нет…

В связи с этим, решились на эксперимент — построить конгломерат Ethernet на компьютере и контроллера с интерфейсом USB. Небезызвестный производитель FTDI относительно недавно предложил решение для USB3.0 на базе FT600. А этот маленький компьютер будет связывать между собой большой и удобный Windows управляемый ПК с контроллером, возможно обрабатывать первичные данные.

Встаёт вопрос, а как же будет работать маленький компьютер?

Желание использовать для этого дела Windows почему-то даже не появилось, а вот Linux — вариант реальный. Но беда в том, что ни кто в команде не знает, что с ним делать. Не долго думая на виртуальной машине появился Ubuntu Desktop. Да он работает. Сомнений не было, но хотелось посмотреть. Теперь к делу…

Я не буду описывать все мучения человека, который 20 лет пользовался Windows и тут на тебе — Linux. Но я постараюсь дать указания, куда смотреть и что искать, если что-то идёт не так.

Этапы:

  1. Выбор компьютера

    Одноплатные компьютеры пока брать не хотелось, т.к. не везде есть USB 3.0, не в каждом Gigabit Ethernet, который может вдруг понадобиться, да и реальная производительность таких плат — вопрос. Взял решение в коробочке с процессором Intel, крайне похожее на nuc: HDD 500Gb, RAM 2Gb, USB 3.0, Ethernet 100/1000. Не думаю, что это принципиальный вопрос.
  2. Ставим Ubuntu Server

    Идем cюда. Качаем последнюю версию с надписью LTS, что означает долгосрочную поддержку и выход обновлений до 5 лет.
    У меня был Ubuntu Server 16.04.2.
    Ставим на пк с флэшки. Для этого: инструкция, как ставить на флэшку загрузочный образ, и инструкция, как ставить ОС.
    Не забудьте при установке поставить галочку OpenSSH server, для доступа по сети к компьютеру. Будем передавать файлы и управлять компьютером с помощью утилит из Putty.
  3. Настраиваем и дополняем сервер

    Помимо непосредственного контакта с контроллером, требуется создать экосистему, позволяющую компилировать проект (мне показалось удобным это делать на прототипе, а не на рабочей машине с кросс компиляцией), выделять 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++11

    sudo apt-get install g++

    Вводим пароль и соглашаемся.

    Теперь в папке, где есть правильный Makefile можно написать

    make

    и будет компилироваться проект, но об этом позже.

    Установка DHCP сервера
    Я использовал isc-dhcp-server. На ubunte пишем:

    sudo apt-get install isc-dhcp-server

    Вводим пароль и соглашаемся.

  4. Ставим драйвер от FTDI
  5. Компилируем программу
  6. Делаем демона для автозагрузки и слежения за программой
  7. Контролируем процессы

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

Автор: весёлый усач

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js