Portál AbcLinuxu, 14. července 2025 00:10


Dotaz: Čtení z USB zařízení pomocí bashe

21.3.2012 14:26 pilifs | skóre: 12 | blog: jenom_tak_mimochodem | Příbor
Čtení z USB zařízení pomocí bashe
Přečteno: 1014×
Odpovědět | Admin
Zdravím ve spolek,

můžete mi prosím poradit jestli je možné z USB zařízení (v mém případě meteostanice) číst pomocí bash skriptu data. Momentálně to načítám pomocí malého C prográmku (nejsem jeho autorem).

O co mi jde:
mám meteostanici připojenou přes USB k routeru s linuxem (teď momentálně OpenWRT). Chtěl bych pomocí skriptu načíst naměřená data ze stanice a pak si je odeslat na web.


Dík za radu.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.3.2012 17:07 NN
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/bin/sh

mount /dev/sda1 /mnt/flash
cp /mnt/flash/foo bar
NN
21.3.2012 18:12 camel1cz | skóre: 25
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
...to asi jen v případě, že se ta meteostanice chová jako mass storage... což bych i pochyboval. Spíš s ní bude možné komunikovat na virtuálním sériovém portu.

Chtělo záznamy, které se objeví v logu po zasunutí té meteostanice do portu PC...
21.3.2012 18:22 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co je to za stanici?
Proč nelze použít ten 'C' prográmek?
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
22.3.2012 08:26 pilifs | skóre: 12 | blog: jenom_tak_mimochodem | Příbor
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
Odpovědět | | Sbalit | Link | Blokovat | Admin

Ten C prográmek je závislý na konkrétním routeru/linuxu (Asus), jinde mi nejede. Chtěl bych něco univerzálního, kde jen vycucnu surové data, pošlu na server a tam zpracuji.

Nejlépe pomocí bashe, ale teoreticky třeba i pomocí jiného skriptovacího jazyka běžně dostupného na routerech (perl, python, php), hlavně bez nutnosti kompilace.

hub.c: new USB device 00:03.0-1.1, assigned address 5
usb.c: kmalloc IF 81fb4ba0, numif 1
usb.c: skipped 1 class/vendor specific interface descriptors
usb.c: new device strings: Mfr=0, Product=0, SerialNumber=0
usb.c: unhandled interfaces on device
usb.c: USB device 5 (vend/prod 0x1941/0x8021) is not claimed by any active driver.
  Length              = 18
  DescriptorType      = 01
  USB version         = 1.10
  Vendor:Product      = 1941:8021
  MaxPacketSize0      = 8
  NumConfigurations   = 1
  Device version      = 1.00
  Device Class:SubClass:Protocol = 00:00:00
    Per-interface classes
Configuration:
  bLength             =    9
  bDescriptorType     =   02
  wTotalLength        = 0022
  bNumInterfaces      =   01
  bConfigurationValue =   01
  iConfiguration      =   00
  bmAttributes        =   80
  MaxPower            =  100mA

  Interface: 0
  Alternate Setting:  0
    bLength             =    9
    bDescriptorType     =   04
    bInterfaceNumber    =   00
    bAlternateSetting   =   00
    bNumEndpoints       =   01
    bInterface Class:SubClass:Protocol =   03:00:00
    iInterface          =   00
    Endpoint:
      bLength             =    7
      bDescriptorType     =   05
      bEndpointAddress    =   81 (in)
      bmAttributes        =   03 (Interrupt)
      wMaxPacketSize      = 0008
      bInterval           =   0a
usb.c: kusbd: /sbin/hotplug add 5
hub.c: port 2, portstatus 103, change 0, 12 Mb/s
22.3.2012 08:52 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
A máš zdroják toho prográmku? Příjde mi, že o té stanici je na googlu docela dost informací, i ohledně linuxu.
22.3.2012 09:13 pilifs | skóre: 12 | blog: jenom_tak_mimochodem | Příbor
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
Zdroják mám. Ale nejde mi primárně jen o tuto stanici. Jde mi v podstatě o libovolnou stanici.
Prostě nějaký univerzální postup pro načtení dat z USB, bez toho že bych je na routeru zpracovával. Pouze je odešlu na server. Určitě by byly nutné nějaké modifikace toho skriptu dle aktuálně použité stanice, ale jak říkám, jde mi o nějakou univerzální komunikaci z USB zařízením... Je-li to teda takto možné.
22.3.2012 11:25 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
Jo, ale potřebuješ znát komunikační protokol s tou stanicí. Zda to běží na usb-serial, nebo to má něco vlastního, atd. A ten musíš implementovat (v ovladači nebo v userspacu) a až pak teprve budeš dostávat raw data, která můžeš posílat dál. Zatím ani nevíme, jak ta stanice vůbec komunikuje.
23.3.2012 06:41 pilifs | skóre: 12 | blog: jenom_tak_mimochodem | Příbor
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
Komunikační protokoly znám. Dle zdrojáku v C je dokáži vyčíst (je tam podpora pro cca 10 stanic).
Mým hlavním problémem je přenositelnost mezi jednotlivými routery/linuxy, a tu jsem chtěl vyřešit pomocí bashe (nebo pokud bash pro toto je nepoužitelný tak nějakého běžného skriptovacího jazyka)
23.3.2012 09:43 camel1cz | skóre: 25
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
Teď sem se trochu ztratil - protokol znáš, víš jak ten céčkový program komunikuje s meteostanicí... tak to napiš v bashi, ne?

Nebo je tam ještě nějaký problém? ...ptej se případně přímo na to co nevíš.
23.3.2012 12:21 pilifs | skóre: 12 | blog: jenom_tak_mimochodem | Příbor
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
V podstatě se ptám jakým způsobem mohu v bashi komunikovat z USB.
V C si otevřu USB pomoci funkce "init_usb" z knihovny libusb.so a pak používám v podstatě jen read a write.
Jak toto mohu udělat pouze v bashi?

Prográmek bohužel neukážu, protože nejsem jeho autorem a nemám požehnání pro jeho zveřejnění.
Pavel Stárek avatar 23.3.2012 12:43 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
Takže asi takhle. Třeba čtení ze sériového portu jde udělat v bashi pomocí read < /dev/ttyS0 eventuelně read < /dev/ttyUSB0. Takže pokud se pro komunikaci s meteostanicemi používá libusb a není pro ně nějaký kernelový modul který by například vytvořil znakové zařízení /dev/usbMETEO0 tak to z bashe nepůjde. A tedy navrhuji asi toto: většina těch routerů běží na ARM CPU a zkompiloval bych si pomocí crosscompiler toolchainu statickou binárku toho prográmku v C, která by se dala použít v těch routerech.
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
23.3.2012 13:44 pilifs | skóre: 12 | blog: jenom_tak_mimochodem | Příbor
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
Jo tohle vypadá jako dobrý návod.
Zkusím to a zatím dík.
23.3.2012 13:52 camel1cz | skóre: 25
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe

Zkusil bych co píše

# ls /dev/ttyUSB*

Pokud se tam po připojení té stanice objeví nové zařízení - např. /dev/ttyUSB0, tak je napůl vyhráno... komunikujeme přes virtuální seriový port...

Pak doporučuji nějaký terminálový prográmek - já používám minicom... tam v nastavení vychytej parametry toho portu a zkus, že jsi schopný komunikovat... pak teprve začneme řešit nash - ale obecně: čtení a zápis se řeší stejně jako se soubory - např.

# echo "ATZ" > /dev/ttyUSB0

# cat /dev/ttyUSB0

Předem je ale nutné nastavit parametry komunikace (proto ten minicom) přes program stty

Pavel Stárek avatar 23.3.2012 12:14 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
Já chci vidět ten prográmek v céčku. Takhle se budem jen točit v bludném kruhu.
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
23.3.2012 16:17 vatay
Rozbalit Rozbalit vše Re: Čtení z USB zařízení pomocí bashe
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/bin/bash

# Port setting stty -F /dev/ttyUSB0 speed 1200 # dalsie opcie: cs7 cstopb -ixon raw

# Loop while [ 1 ]; do echo 'LOADING...' READ=`dd if=/dev/ttyUSB0 count=22 | sed 's/ //g'` echo $READ # v $RAED su nactené data a adtial mozes poslat s tym co mas nainstalované

echo '[PRESS Ctrl + C TO EXIT]' done

#pozn. já pouzim QNX, v linuxu ttyUSB je inak definiované

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.