Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 870 сообщений
Cообщения с меткой

ethernet - Самое интересное в блогах

Следующие 30  »
rss_rss_hh_new

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

Среда, 09 Августа 2017 г. 15:11 (ссылка)

Продолжаем развивать тему использования компьютера с ubuntu server в качестве устройства для связи мира микроконтроллеров с миром персональных компьютеров

Ссылка на часть 1.

image

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



В этой части я покажу, как проходить следующие моменты:


  • Статический IP + DHCP сервер
    В локальной сети на данный момент предполагается всего два устройства. Сам сервер и управляющая машина. Исходя из данной простоты настроим Ubuntu server.

    Статический IP

    Опорная информация

    1. Чтобы узнать логическое имя (logical name) сетевого интерфейса делаем:

    sudo lshw -C network
    и ищем строчку
     logical name: enp3s0


    Вариант использования функции ifconfig (как аналог ipconfig в windows) иногда может дать только loop 127.0.0.1. Название интерфейса зависит от аппаратуры. На двух разных машинах ставил ubuntu с одной флэшки и были разные имена сетевых интерфейсов. enp3s0 — это классификация по шине и номеру устройства, как я понимаю. Бывают ещё из такой серии eth0 и такой ens35. Не пугайтесь.



    2. Изменение файла конфигурации сети

    sudo nano /etc/network/interfaces
    (nano — эта маленький текстовый редактор)

    Должно быть так:

    	# This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).

    source /etc/network/interfaces.d/*

    # The loopback network interface
    auto lo
    iface lo inet loopback

    # My local network.
    allow-hotplug enp3s0
    iface enp3s0 inet static
    address 172.16.55.1
    netmask 255.255.255.0
    gateway 172.16.55.1


    Нажимаем cntrl-x — для выхода из редактора

    Нажимаем y — для сохранения изменений



    3. Перезагружаем сетевой сервис:

    service networking restart




    DHCP сервер

    Опорная информация

    1. Редактируем файлы для работы DHCP сервера

    sudo nano /etc/default/isc-dhcp-server
    найдите строчку
    INTERFACES=""
    — это название интерфейса для DHCP сервера. В нашем случае должно быть так:

    INTERFACES="enp3s0"


    В файле
    sudo nano /etc/dhcp/dhcpd.conf
    нужно добавить

    subnet 172.16.55.0 netmask 255.255.255.0{
    range 172.16.55.2 172.16.55.100;
    }
    В рамках этой подсети DHCP сервер будет выдавать адреса в диапазоне от 2 до 100.



    2. Если будете использовать функцию gethostbyname(), то в файле
    sudo nano /etc/hosts
    должно быть прописано имя пк и IP. Возможно есть более удобный способ получить свой собственный IP, но мне он не поддался.

    127.0.0.1	localhost
    172.16.55.1 ubuntu


    В файле /etc/hostname хранится имя пк (ubuntu). Можно посмотреть через

    sudo cat /etc/hostname
    и ещё миллионом способов.



    3. Перезагружаем сетевой сервис:

    service networking restart


    SSH доступ

    По идее, подключив теперь стационарный компьютер, мы получи для него IP и сможем иметь доступ по SSH. Для доступа из Windows я использовал утилиту PuTTY. Там же, в программных файлах PuTTY, есть утилита для передачи данных по сети.

    Вот состав батника для передачи файлов с Ubuntu на Windows.

    d:\"Program Files"\PuTTY\pscp.exe ubuntu@172.16.55.1:/home/ubuntu/tool/* "F:/WORK/SERVER/tool/"


    И для закачки на сервер

    d:\"Program Files"\PuTTY\pscp.exe "F:/WORK/SERVER/tool/*" ubuntu@172.16.55.1:/home/ubuntu/tool/



  • Ставим драйвер от FTDI
    Драйвера от FTDI поставляются в сжатом виде. Содержатся в пакете сами драйвера, библиотеки, примеры использования и README.pdf файл, который больше всего был интересен. Из файла D3XX Programmers Guide ни разу не ясно, как использовать драйвер для Linux. Пришлось даже написать в тех поддержку FTDI, благо они своевременно и по делу отвечают. Можно было бы и не писать, если бы я сразу раскрыл этот архив. Но полезными оказались ссылки, которые они прислали, примеры разводки и схемотехники.

    Как показано выше, с помощью утилиты pscp из комплекта PuTTY, копируем на сервер драйвер. У меня был d3xx-linux-i686-0.5.0.tar.bz2. Заходим в эту папку на сервере и делаем
    tar -xvf d3xx-linux-i686-0.5.0.tar.bz2


    Далее, по инструкции FTDI исполняем:

    cd linux-i686
    sudo rm -f /usr/lib/libftd3xx.so
    sudo cp -f libftd3xx.so /usr/lib
    sudo cp -f libftd3xx.so.0.5.0 /usr/lib
    sudo cp -f 51-ftd3xx.rules /etc/udev/rules.d
    sudo udevadm control --reload-rules



  • Компилируем программу
    Программу я писал в codeBlocks и она, за исключением некоторых моментов, в том числе и из-за FTDI, совместима с Windows. Перестала она компилироваться для Windows, когда я поставил туда h файл из драйвера для linux D3XX (c D2XX и FT232RL чипом не было проблем).

    Теперь makefile. Программисты и так знают зачем он нужен, просто укажу особенности:

    STATLIB=libftd3xx.a — указываем название библиотеки для Linux

    CFLAGS=$(DEPENDENCIES) -Wall -Wextra -std=c++11 — разрешаем c++11

    пример makefile для одного файла проекта main.cpp
    CC=g++
    UNAME := $(shell uname)
    ifeq ($(UNAME), Darwin)
    DEPENDENCIES := -lpthread -ldl -lobjc -framework IOKit -framework CoreFoundation
    else
    DEPENDENCIES := -lpthread -ldl -lrt
    endif
    CFLAGS=$(DEPENDENCIES) -Wall -Wextra -std=c++11
    STATLIB=libftd3xx.a
    APP = prgr

    all: $(APP)

    $(APP): main.o
    $(CC) -o $(APP) main.o $(STATLIB) $(CFLAGS)

    main.o: main.cpp
    $(CC) -c -o main.o main.cpp $(CFLAGS)

    clean:
    rm -f *.o ; rm $(APP)


    Таким образом, в папке проекта лежат файлы main.c ftd3xx.h makefile libftd3xx.a и прочие файлы проекта. И для компиляции проекта теперь нужно зайти в эту папку и сделать

    make



  • daemon
    Роль демонов в Linux похожа на роль служб в Windows. Это программы, которые живут в фоновом режиме и делают всякую периферическую работу. Всё начинается с systemd — программы, которая запускается первой, имеет соответственно PID=1, и запускает все другие фоновые задачи через скрипты. Поковырявшись в Ubuntu, я удивился насколько много всего внутри построено на скриптах. Вы уже видели, как меняется статический IP, настраиваются программы, простой коррекцией файлов в текстовом редакторе.

    Выполнив
    ps -el
    Вы увидите список запущенных программ с их PID. PID — это обязательный идентификатор запущенной программы, по которому за этой программой следит ОС. В крайней ситуации, можно грохнуть программу по этому PID из терминала — пишите kill и PID (может пригодиться для отладки).

    Так вот, при запуске демона исполняется скрипт, в котором указано когда и как программу нужно запустить, как её остановить или перезапустить. Чтобы демон работал нормально, программа при запуске должна сохранить в файл, путь к которому указан в скрипте, свой PID и перейти в другой поток (в фоновый режим).

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

    код daemon
    void SetPidFile(char* Filename)
    {
    FILE* f;
    f = fopen(Filename, "w+");
    if (f)
    {
    fprintf(f, "%u", getpid());
    fclose(f);
    }
    }


    int main( int argc, char** argv )
    {
    char toolfile[32];
    char folder[32];
    intptr_t ret;
    FILE* logfile;

    if( argc!=3 )
    {
    printf( "Write address of the program and name: /home/ubuntu/tool/ tool\n");
    return -1;
    }
    pid_t pid, sid;

    pid = fork();
    if (pid < 0)
    {
    sleep(1);
    return -1;
    }
    //We got a good pid, Close the Parent Process
    if (pid > 0) {
    return 0;
    }
    //Create a new Signature Id for our child
    sid = setsid();
    if (sid < 0)
    {
    return -1;
    }
    //Change File Mask
    umask(0);
    //Save PID

    memcpy( toolfile, argv[0], strlen(argv[0]) );
    memcpy( toolfile + strlen(argv[0]), ".log", 4 );
    memset( toolfile + strlen(argv[0]) + 4, 0, 1 );
    printf( "Daemon:: log to:%s\n", toolfile );
    logfile = fopen( toolfile, "w" );

    fprintf( logfile, "Daemon:: started with 0=%s 1=%s 2=%s\n", argv[0], argv[1], argv[2] );

    memset( toolfile, 0, 32 );
    memcpy( toolfile, argv[0], strlen(argv[0]) );
    memcpy( toolfile + strlen(argv[0]), ".pid", 4 );
    memset( toolfile + strlen(argv[0]) + 4, 0, 1 );
    SetPidFile( toolfile );
    fprintf( logfile, "Daemon:: PID=%u saved in the %s\n", getpid(), toolfile );

    memset( folder, 0, 32 );
    memcpy( folder, argv[1], strlen(argv[1]) );
    fflush ( logfile );

    memset( toolfile, 0, 32 );
    memcpy( toolfile, folder, strlen(argv[1]) );
    memset( toolfile + strlen(argv[1]), '/', 1 );
    memcpy( toolfile + strlen(argv[1]) + 1, argv[2], strlen(argv[2]) );

    //Change Directory
    //If we cant find the directory we exit with failure.
    if ((chdir(folder)) < 0)
    {
    fprintf( logfile, "Daemon:: Program folder was not found:%s\n", folder );
    fclose( logfile );
    return -1;
    }

    //Close Standard File Descriptors
    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);

    fprintf( logfile, "Daemon:: Program started\n" );
    fflush ( logfile );
    ret = execl( toolfile, folder, NULL );
    if( ret==-1 )
    {
    fprintf( logfile, "Daemon:: execl error: %s. File=%s Folder=%s\n", strerror(errno), toolfile, folder );
    fclose( logfile );
    return -1;
    }

    fprintf( logfile, "Daemon:: closed\n" );
    fclose( logfile );
    return 0;
    }


    Компилируем демона.



    На данный момент в нашем рабочем каталоге, допустим /home/ubuntu/daemon/, имеем:

    daemon — программа демона

    prgr — программа

    prgr.strt — скрипт, который нужно выполнить до запуска программы (если надо)

    prgr.stop — скрипт, который нужно выполнить для остановки программы (если надо)



    Нужно разрешить программам работать:

    sudo chmod 755 ./tool
    sudo chmod 755 ./daemon




    Теперь нужен скрипт для systemd

    Делаем
    sudo nano /etc/systemd/system/mydaemon.service
    и записываем туда наш скрипт.

    mydaemon.service
    [Unit]
    Description=my service
    After=network.target
    After=isc-dhcp-server.service

    [Service]
    Type=forking
    PIDFile=/home/ubuntu/daemon/daemon.pid
    ExecStartPre=/bin/sh /home/ubuntu/daemon/prgr.strt
    ExecStart=/home/ubuntu/daemon/daemon /home/ubuntu/daemon/prgr prgr
    ExecStop=/bin/sh /home/ubuntu/daemon/prgr.stop
    Restart=always
    TimeoutSec=5

    [Install]
    WantedBy=multi-user.target


    В скрипте кратко:

    Description — краткое название-описание

    After — что требуется для запуска

    Type=forking — systemd предполагает, что служба запускается однократно и процесс разветвляется с завершением родительского процесса.

    PIDFile — файл с PID программы из демона

    ExecStartPre — до запуска программы

    ExecStart — программа с параметрами

    ExecStop — как остановить

    WantedBy — уровень, на котором запускать



    Теперь можно попробовать всё запустить.

    Пишем

    systemctl daemon-reload
    systemctl status mydaemon


    Если всё без ошибок, то запускаем:

    systemctl start mydaemon


    После этого смотрите лог демона, всё должно поехать.

    Чтобы работала автозагрузка
    systemctl enable mydaemon





Друзья, жду Ваших интересных комментариев и ценных советов. Если где соврал — сильно не гневайтесь, просто указывайте, что можно сделать лучше. Надеюсь, появится 3 часть про большой скрипт, автоустановку… может ещё что.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/335042/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

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

Суббота, 05 Августа 2017 г. 12:32 (ссылка)

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



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



Описание: нужно передавать немалые объёмы данных (к примеру, по 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. Контролируем процессы



На данном этапе хочу остановиться и посмотреть отзывы уважаемых читателей, а главное знающих людей. Может стоит вносить коррективы. Тем не менее, по результатам появится вторая часть, более содержательная.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334948/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
barbossi

Игра об известном маньяке выйдет в мае

Суббота, 22 Апреля 2017 г. 19:43 (ссылка)

­­­­­­­­­­­­­­­­­­­
Компания Gun Media объявилa дату выхода Friday the 13th: The Game — игpа поступит в пpодажу 26 мая на PC, PS4 и Xbox One. Стоит отметить, что часть контента в рeлизную верcию нe попадeт: на старте пользователям будeт доступeн только мультиплеер, а сюжетную кампанию добавят потом.

Friday the 13th — основанная на фильмах серии «Пятница, 13» мультиплеерная игpа, в котоpой игpоки дeлятся на две команды. Один пользователь берeт на себя pоль опасного маньяка и охотится на других игpоков, которые должны любым способом сохpанить свoи жизни. Гордостью pазработчиков сталa cистема убийств, блaгодаря котоpой Джейсон сможет pаздeлываться со свoей добычей дeсятками способов: рeзать, колоть, pазрывать, ломать и отрубать конeчности, сжигать, душить, избивать до смерти и вытвoрять другие зверства.

Комментарии (0)КомментироватьВ цитатник или сообщество
Аноним

Среда, 01 Декабря 1970 г. 03:00 (ссылка)

Комментарии ()КомментироватьВ цитатник или сообщество
Аноним

Среда, 01 Декабря 1970 г. 03:00 (ссылка)

Комментарии ()КомментироватьВ цитатник или сообщество

Следующие 30  »

<ethernet - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda