Автор Тема: Ethernet to serial gateway помощ !!!  (Прочетена 5117 пъти)

athena

  • Участници
  • ***
  • Публикации: 3
    • Профил
Ethernet to serial gateway помощ !!!
« -: Mar 13, 2013, 21:14 »
Здравейте имам да реалиизрам следната задача Ethernet to serial gateway иполвайки UDP прототкола. Имам някакви идеи какда стане - на единия хост се пише и се пуска клиентска програма, а сървърната се слага на EP9302 като с кабел за серийния порт се връзва др компютър на който е пусната програма за предаване на данни по серийния порт и съответно да се препраща отговор обратно до първи компютър. Нещата съм ги нахвърляла на C, но нямам абсолютно никава представа как трябва да се реализира(промени) кода, който трябва да се компилира и стартира на EP9302 тъй като досега не съм се занимавала с това. Моля кажете как трябва да се реализира или някакви идеи откъде да прочета повече...
Благодаря предварително :)
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: Ethernet to serial gateway помощ !!!
« Отговор #1 -: Mar 14, 2013, 09:33 »
Това с учебна цел за ползване на EP9302 ли е или е с цел решаване на практическа задача?
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

athena

  • Участници
  • ***
  • Публикации: 3
    • Профил
Re: Ethernet to serial gateway помощ !!!
« Отговор #2 -: Mar 14, 2013, 13:40 »
това ми е курсов проект като за целта ползваме EP9302 на Olimex :)
Реализиране на Ethernet to Serial Gateway – получава данни през мрежовия интерфейс (UDP) и ги предава на серийния и обратно. Целта е да се направи "удължаване" на серийния интерфейс.
Активен

victim70

  • Напреднали
  • *****
  • Публикации: 454
  • Distribution: Gentoo, Ubuntu
  • Window Manager: Kde Xfce
    • Профил
Re: Ethernet to serial gateway помощ !!!
« Отговор #3 -: Mar 14, 2013, 20:12 »
Много е просто. На едното пишеш сърверна част - как се отваря и слуша на сокет под линукс питай гугълчо. На другата страна отваряш клиент. А в двете как ще си разменят съобщенията и какво ще правят си го пишеш и измисляш протокола. Имам вече реализирани подобни неща но едва ли ще ти свършат работа, доста са специализирани за програматор става дума.
Ето мястото от където съм стартирал http://www.linuxhowtos.org/C_C++/socket.htm . Успех в начинанието.
Не забравяй и чексуми за да се валидират фреймовете ан 'удължителя' както и блокиране на други клиенти RS-a не е за многозадачна работа, само между 2 устройства е.
Активен

"Господи, дай ми сила да променя нещата които немога да приема,
дай ми търпение да приема нещата които не мога да променя,
и ми дай мъдрост, да правя разликата между двете"

shoshon

  • Напреднали
  • *****
  • Публикации: 497
    • Профил
Re: Ethernet to serial gateway помощ !!!
« Отговор #4 -: Mar 14, 2013, 20:56 »
Много е просто. На едното пишеш сърверна част - как се отваря и слуша на сокет под линукс питай гугълчо. На другата страна отваряш клиент. А в двете как ще си разменят съобщенията и какво ще правят си го пишеш и измисляш протокола. Имам вече реализирани подобни неща но едва ли ще ти свършат работа, доста са специализирани за програматор става дума.
Ето мястото от където съм стартирал http://www.linuxhowtos.org/C_C++/socket.htm . Успех в начинанието.
Не забравяй и чексуми за да се валидират фреймовете ан 'удължителя' както и блокиране на други клиенти RS-a не е за многозадачна работа, само между 2 устройства е.


никва връзка с истината...

за да удължиш ethernet през сериен порт трабва да слезеш по ниско. Кви сокети кви пет лева.

Всъщност задачата се състои в две под задачи:
1) Да се направи драйвер, който да позволи адресацията на серийния порт като Ethernet устройство:
http://www.xml.com/ldd/chapter/book/ch14.html
( Всяка дума под "Connecting to the Kernel" трябва да е изчетена и разбрана )

2) Трябва да се имплементира алгоритъм за достъп до физическата среда. Според мен интерфейсът трябва да си има свой си драйвер, който да давя някакво ABI. Готиното в цялата работа е, че ако имаш примерно RS232 връзката ти не е peer-to-peer както е в ethernet-а и алгротъма би трябвало да е доста прост. Ако обаче си решила да се правиш на гъзе, може да се имплементира нещо като достъпа в LAN мрежа:
http://fmi.wikidot.com/km7

Според мен задачата не би трябвало да отнеме повече от 500 реда код
(може и някакъв свой си де... ама тоя е изпипан)

Даже хората са дали пример за пренос на данни:

Код:
int snull_tx(struct sk_buff *skb, struct net_device *dev)
{
    int len;
    char *data;
    struct snull_priv *priv = (struct snull_priv *) dev->priv;
    len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len;
    data = skb->data;
    dev->trans_start = jiffies; /* save the timestamp */

    /* Remember the skb, so we can free it at interrupt time */
    priv->skb = skb;

    /* actual delivery of data is device specific, and not shown here */
    snull_hw_tx(data, len, dev);

    return 0; /* Our simple device cannot fail */
}

Магията се случва в  snull_hw_tx. Това трябва да имплементираш ти, понеже както съм сигурен имаш дълбоки познания с EP9302.

П.П не съм програмист и никога не съм писал на C ( освен неща като Hello World ), но съм останал с впечатлението, че май разбирам нещичко от OS :)

« Последна редакция: Mar 14, 2013, 21:06 от shoshon »
Активен

BULFON

  • Administrator
  • Напреднали
  • *****
  • Публикации: 478
  • Distribution: Fedora
  • Window Manager: Gnome
    • Профил
Re: Ethernet to serial gateway помощ !!!
« Отговор #5 -: Mar 15, 2013, 10:51 »
Не разбрах дали задачата изисква програмиране, или решението може да е на базата на готови продукти. Мисля, че е решима с ползване на ser2net:
http://linux.die.net/man/8/ser2net
и netcat (UDP to TCP proxy):
http://linux.die.net/man/1/nc
http://en.wikipedia.org/wiki/Netcat#Proxying
Активен

фонокартен телефонен апарат

victim70

  • Напреднали
  • *****
  • Публикации: 454
  • Distribution: Gentoo, Ubuntu
  • Window Manager: Kde Xfce
    • Профил
Re: Ethernet to serial gateway помощ !!!
« Отговор #6 -: Mar 15, 2013, 18:21 »
Много е просто. На едното пишеш сърверна част - как се отваря и слуша на сокет под линукс питай гугълчо. На другата страна отваряш клиент. А в двете как ще си разменят съобщенията и какво ще правят си го пишеш и измисляш протокола. Имам вече реализирани подобни неща но едва ли ще ти свършат работа, доста са специализирани за програматор става дума.
Ето мястото от където съм стартирал http://www.linuxhowtos.org/C_C++/socket.htm . Успех в начинанието.
Не забравяй и чексуми за да се валидират фреймовете ан 'удължителя' както и блокиране на други клиенти RS-a не е за многозадачна работа, само между 2 устройства е.


никва връзка с истината...

за да удължиш ethernet през сериен порт трабва да слезеш по ниско. Кви сокети кви пет лева.

Всъщност задачата се състои в две под задачи:
1) Да се направи драйвер, който да позволи адресацията на серийния порт като Ethernet устройство:
http://www.xml.com/ldd/chapter/book/ch14.html
( Всяка дума под "Connecting to the Kernel" трябва да е изчетена и разбрана )

2) Трябва да се имплементира алгоритъм за достъп до физическата среда. Според мен интерфейсът трябва да си има свой си драйвер, който да давя някакво ABI. Готиното в цялата работа е, че ако имаш примерно RS232 връзката ти не е peer-to-peer както е в ethernet-а и алгротъма би трябвало да е доста прост. Ако обаче си решила да се правиш на гъзе, може да се имплементира нещо като достъпа в LAN мрежа:
http://fmi.wikidot.com/km7

Според мен задачата не би трябвало да отнеме повече от 500 реда код
(може и някакъв свой си де... ама тоя е изпипан)

Даже хората са дали пример за пренос на данни:

Код:
int snull_tx(struct sk_buff *skb, struct net_device *dev)
{
    int len;
    char *data;
    struct snull_priv *priv = (struct snull_priv *) dev->priv;
    len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len;
    data = skb->data;
    dev->trans_start = jiffies; /* save the timestamp */

    /* Remember the skb, so we can free it at interrupt time */
    priv->skb = skb;

    /* actual delivery of data is device specific, and not shown here */
    snull_hw_tx(data, len, dev);

    return 0; /* Our simple device cannot fail */
}

Магията се случва в  snull_hw_tx. Това трябва да имплементираш ти, понеже както съм сигурен имаш дълбоки познания с EP9302.

П.П не съм програмист и никога не съм писал на C ( освен неща като Hello World ), но съм останал с впечатлението, че май разбирам нещичко от OS :)

Първо прочети. задачата е:
RS232-eth-eth-RS232 - за нея няма готово решение.
За това което мислиш че е
eth-rs232-rs232-eth. Има готово решение SLIP+PPP
Иначе за да изкараш TCP-IP на серийният порт е достатъчно да пуснеш SLIP+PPP това който е работил на времето с модеми ще го знае. Не съм сигурен даже дали SLIP не стана чат от PPP.

Активен

"Господи, дай ми сила да променя нещата които немога да приема,
дай ми търпение да приема нещата които не мога да променя,
и ми дай мъдрост, да правя разликата между двете"

BULFON

  • Administrator
  • Напреднали
  • *****
  • Публикации: 478
  • Distribution: Fedora
  • Window Manager: Gnome
    • Профил
Re: Ethernet to serial gateway помощ !!!
« Отговор #7 -: Mar 16, 2013, 10:48 »
Цитат
Реализиране на Ethernet to Serial Gateway – получава данни през мрежовия интерфейс (UDP) и ги предава на серийния и обратно. Целта е да се направи "удължаване" на серийния интерфейс.
Аз това го разбирам точно като отдалечен (ethernet) достъп до сериен порт. sеr2net върши това, но предлага само tcp връзка и затова предложих и netcat, с който да се направи UDP to TCP proxy.
Активен

фонокартен телефонен апарат

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Re: Ethernet to serial gateway помощ !!!
« Отговор #8 -: Mar 16, 2013, 13:58 »
Цитат
Реализиране на Ethernet to Serial Gateway – получава данни през мрежовия интерфейс (UDP) и ги предава на серийния и обратно. Целта е да се направи "удължаване" на серийния интерфейс.
Аз това го разбирам точно като отдалечен (ethernet) достъп до сериен порт. sеr2net върши това, но предлага само tcp връзка и затова предложих и netcat, с който да се направи UDP to TCP proxy.
Никак го не схващам, но  Serial Gateway  ми навява идея, че не е RS-232. Ако ще се ползва Линукс, след версия там 2.6.35  за RS-485 ползваш ядрото. Документа е в   сорса на ядрото/Linux/Documentation/serial/serial-rs485.txt
http://lxr.free-electrons.com/source/Documentation/serial/serial-rs485.txt?a=arm
Това което BULFON  предлага, гледам има и надстройка
https://code.google.com/p/conman/
Ако не ползваш Линукс, и няма ОС,  то тогава нещата са други, впрочем чипа на ниво USART -a  вероятно подържа RS-485, ето код на подобно нещо при ардуйно
http://code.google.com/p/serial-to-ethernet/

 
Активен

athena

  • Участници
  • ***
  • Публикации: 3
    • Профил
Re: Ethernet to serial gateway помощ !!!
« Отговор #9 -: Mar 20, 2013, 21:47 »
Ами доколкото са ми дали като спецификация на платката е с RS-232 https://www.olimex.com/Products/ARM/CirrusLogic/CS-E9302/.
Да трябва да се напише драйвер и да се пусне на платката.
Активен

ivo1204

  • Напреднали
  • *****
  • Публикации: 987
    • Профил
Re: Ethernet to serial gateway помощ !!!
« Отговор #10 -: Mar 21, 2013, 13:13 »
Ами доколкото са ми дали като спецификация на платката е с RS-232 https://www.olimex.com/Products/ARM/CirrusLogic/CS-E9302/.
Да трябва да се напише драйвер и да се пусне на платката.
линкове с темата ти -
http://www.buildroot.net/
http://arm.cirrus.com/files/
http://arm.cirrus.com/docs/2.6/index.html
http://arm.cirrus.com/forum/index.php

платката е версия А, новото линукс ядро я подържа. Паметта е много малко, затова buildroot. Имаш две опции - да подкараш или готова среда, или компилираш всичко наново. Трудното са конфигурациите - config файловете. На ядрото на  buildroot и другите. Ако се иска да се адресира сер. интерфейса, може да видиш modbus
http://www.modbus.pl/node/21
Драйвер не трябва, то ядрото 2.6хх пише че е във флаша, модулите обаче трябва да са  в твоята среда. Виж какви пакети имаш готови там, и дали не може да свършиш работа без прекомпилиране.
Най лесно е да не пипаш ядрото. Може да компилираш другите без да го пипаш, може и само ядрото.
тия пакети са доста стари но ще ти трябват - може да си ги копираш в buildroot , виж даже има цялата система комрилирана, обаче  'make  menuconif' няма да стане щото е много старо. Може и старо линекс дистро да сложиш де.
http://arm.cirrus.com/files/index.php?path=linux%2Fpackages/
Една опция, която ти препоръчвам е да компилираш всичко и тестваш за  PC. Спокойно може да го тестваш  на компютъра си, вместо тая платка твоя компютърр и тогава да се бориш с платката.   

p.p. конфигурацията на ядрото трябва да я търсиш в роt файлa /boot/config-версия ядро 
==================
В buildroot може да използваш например  Udp-sender - Udp-receiver като само ги конфигурираш и стартираш, и т.н
Новото линукс ядро се компилира без проблеми и има опции точно за твоята платка, 

http://www.udpcast.linux.lu/cmd.html
« Последна редакция: Mar 21, 2013, 19:22 от ivo1204 »
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Ethernet problem
Настройка на програми
alabal 0 1638 Последна публикация Aug 15, 2003, 14:02
от alabal
Ethernet problem
Настройка на програми
alabal 2 2368 Последна публикация Aug 16, 2003, 21:28
от alabal
3 ethernet cards проблем
Настройка на програми
chonny 5 3189 Последна публикация Jul 06, 2004, 19:21
от
Vtun ethernet тунел
Настройка на програми
mavar 5 3522 Последна публикация Nov 14, 2007, 19:49
от gat3way
Ethernet мониторинг
Системна Сигурност
bot 9 4437 Последна публикация Jul 04, 2011, 16:59
от c111100101