abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 10:07 | Komunita
Mezinárodní nezisková organizace Electronic Frontier Foundation (EFF) hájící občanské svobody v digitálním světě slaví 25 let. Při této příležitosti žádá o finanční podporu a 16. července v San Francisku organizuje minikonferenci a párty.
Ladislav Hagara | Komentářů: 0
včera 13:00 | Komunita
Linus Torvalds vydal (LKML) Linux 4.2-rc1. Přidáno bylo více než milion nových řádků zdrojového kódu. Čtvrt milionu řádků bylo odstraněno. Téměř polovina nových řádků souvisí s novým ovladačem amdgpu (41 % hlavičkové soubory a 8 % vlastní kód).
Ladislav Hagara | Komentářů: 29
5.7. 22:11 | Zajímavý článek
Aaron Seigo se na svém novém blogu věnoval také příští verzi webového poštovního klienta Roundcube. V prvním příspěvku informoval o úspěšně probíhající kampani na podporu vývoje Roundcube Next na Indiegogo. Ve druhém příspěvku uvedl, že projekt podpořilo 871 osob celkovou částkou 103541 dolarů a zmínil například přidání podpory JMap (JSON Mail Access Protocol) do Roundcube.
Ladislav Hagara | Komentářů: 6
5.7. 12:32 | Nová verze
Po téměř deseti letech od nahlášení byl GTK souborový dialog rozšířen o možnost mazat a přejmenovávat soubory a složky.
Marián Kyral | Komentářů: 34
4.7. 19:19 | Zajímavý článek
Organizace Electronic Frontier Foundation (EFF) upozorňuje v rámci seriálu Stupidní patent měsíce (I, II, III, IV) na patent U.S. 6,795,918 s názvem "Service level computer security". V abstraktu se píše o zařízeních a metodách pro filtrování datových paketů, což je vlastně firewall. Patent byl podán v roce 2000, tj. v době, kdy byly firewally již běžně používány. Původní "vynálezce" přestal v roce 2012 platit poplatky a tím pádem byla … více »
Ladislav Hagara | Komentářů: 1
3.7. 14:00 | Zajímavý článek
Na Fedora.cz vyšel článek Hexa editory a další nástroje pro práci s binárními soubory. Pavel Tišnovský se v něm zabývá popisem nástrojů určených pro prohlížení a případnou editaci binárních souborů. Tyto nástroje mohou svým uživatelům nabízet různá rozhraní, ovšem významné místo zde náleží takzvaným hexa prohlížečům a hexa editorům.
Ladislav Hagara | Komentářů: 19
3.7. 13:31 | Nová verze
S mírným zpožděním byl vydán Mozilla Firefox 39.0. Z novinek lze zmínit například možnost pozvání lidí na sociální síti ke konverzaci službou Firefox Hello. Podrobné informace v poznámkách k vydání a na stránce věnované vývojářům. Řešeny jsou také bezpečnostní problémy.
Ladislav Hagara | Komentářů: 13
3.7. 01:30 | Zajímavý projekt
Google před dvěma týdny v příspěvku na svém blogu věnovaném výzkumu popsal, jak učí své neuronové sítě rozpoznávat, co je na obrázcích, a že proces rozpoznávání lze obrátit a říct neuronové síti, že na obrázku je například banán a ať ho na obrázku nalezne a dokreslí. Začala vznikat zajímavá "umělecká" díla. Včera Google uvolnil zdrojové kódy (deepdream) pro generování těchto "uměleckých" děl.
Ladislav Hagara | Komentářů: 12
2.7. 21:00 | Zajímavý článek
Na Slashdotu byl vydán rozhovor s Linusem Torvaldsem. Stejně jako před třemi lety Linus Torvalds odpovídá na vybrané otázky čtenářů Slashdotu. Letos jsou otázky věnovány například Torvaldsově produktivitě, systému init, společnosti Valve, RTLinuxu nebo i funkcionálnímu programování.
Ladislav Hagara | Komentářů: 18
2.7. 11:41 | Upozornění
Edice CZ.NIC rozšiřuje svou řadu odborných publikací s volnou licencí o nový přírůstek. Tentokrát se jedná o knihu Ponořme se do HTML5 (v originále Dive Into HTML5), jejímž autorem je známý odborník Mark Pilgrim. Elektronická verze knihy je opět k dispozici zdarma. Příznivci fyzických knih mají možnost objednat si titul za 335 korun, v případě objednání přes protokol IPv6 za 285 korun. … více »
Vilem Sladek | Komentářů: 7
Nešifrované HTTP
 (4%)
 (96%)
Celkem 4596 hlasů
 Komentářů: 60, poslední 29.6. 08:40
Rozcestník
Reklama
Autoškola testy online Levný benzín

Oprava Yakumo QuickStick DVB-T pod linuxem

26.9.2010 14:26 | Přečteno: 1187× | Hardware | poslední úprava: 26.9.2010 18:16

Jak jste si možná někteří všimli, hledal jsem tu před pár dny pomoc ohledně svého chcíplého USB televizního adaptéru „Yakumo QuickStick DVB-T“. Na základě odpovědí v poradně, trochy googlování a kapky programování se mi podařilo zmíněný adaptér nakonec úspěšně přívést znovu k životu a to sice bez použití Windows. Zde je návod, co s tím.

Problém

Začněme s krátkým popisem toho, co se vlastně adaptéru stalo. Zřejmě při jeho vytahováni z USB portu došlo k poškození dat na EEPROM. Těmito daty přitom jsou VID/PID (Vendor ID/Product ID) pod kterými se USB stick hlásí počítači. Konkrétně mně se VID/PID změnilo z 14aa:0225 ⇒ 14ee:0225 (čili se nastavili - což se de fakto rovná u EEPROM vynulování - dva bity jednoho bajtu). Důsledek: OS nenašel k adaptéru správný ovladač a nic se tedy nedělo.

Řešení

Na řešení mě navedli diskutující v poradně, kteří mě odkázali na tento blog. Řešení spočívalo v tom, využít pod Windows speciální vývojové prostředí pro platformu, na které je USB stick založen, pomocí ní do něj nahrát speciální firmware, které umožňuje manipulaci s EEPROM a potom přes toto vývojové prostředí ručně poslat příslušné USB příkazy.

Jelikož Windows momentálně nemám po ruce, rozhodl jsem se, že se pokusím o stejnou věc, ale čistěji a pod linuxem.

Co budeme potřebovat

K „odcihlení“ adaptéru budeme potřebovat a) onen speciální FW pro komunikaci s EEPROM, b) linuxový program, který jej do adaptéru nahraje, c) (náš) linuxový program, který bude s tímto FW komunikovat a pomocí něj korektně nastaví VID/PID v EEPROM adaptéru.

Ad a): Firmware se jmenuje Vend_Ax.hex a stáhneme jej například odtud.

Ad b): utilitka pro nahrání firmware se jmenuje cycfx2prog a najdeme ji této stránce. (Klasicky rozbalíme a skompilujeme pomocí 'make').

Ad c): Vytvoříme adresář a v něm vytvoříme soubor yakumo-repair.c s následujícím obsahem:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <usb.h>

void usage() {
  fprintf(stderr, "Usage: yakumo-repair <old_vid:old_pid> <new_vid:new_pid>\n");
  fprintf(stderr, "You have to download Vend_ax.hex (using e.g. cycfx2prog) first!\n");
  exit (-1);
}

unsigned int vid_o, pid_o, vid_n, pid_n;

void repair (struct usb_device *dev, usb_dev_handle *h) {
  unsigned char buffer[256], b2[256];
  int i,n,ok;

  n=usb_control_msg(h, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
                           0xa2, 0, 0, (char *)buffer, sizeof(buffer), 5000);

  printf ("EEPROM READ: [%d]\t", n);
  if (n) for (i=0; i<n; i++)
  {
    printf(" %02x", buffer[i]);
  }
  printf ("\n");

  if (n!=256)
  {
    fprintf (stderr, "Error reading EEPROM!\n");
    return;
  }

  if (
      (buffer[1]==(vid_o%0x100)) &&
      (buffer[2]==(vid_o/0x100)) &&
      (buffer[3]==(pid_o%0x100)) &&
      (buffer[4]==(pid_o/0x100)) 
     )
  {
    printf ("... old VID/PID OK! Trying to overwrite VID/PID in EEPROM...\n");

    // set new VID/PID into the buffer!
    buffer[0]=0xc0;
    buffer[1]=(vid_n%0x100);
    buffer[2]=(vid_n/0x100);
    buffer[3]=(pid_n%0x100);
    buffer[4]=(pid_n/0x100);

    n=usb_control_msg(h, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT,
                           0xa2, 0, 0, (char *)buffer, 5, 5000);

    printf ("... written %d bytes...\n", n);

    printf ("Verifying...\n");

    n=usb_control_msg(h, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
                           0xa2, 0, 0, (char *)b2, sizeof(b2), 5000);

    if (n!=256) 
    {
      fprintf (stderr, "Error reading EEPROM!\n");
      return;
    }

    ok=1;
    for (i=0; i<n; i++)
      if (buffer[i]!=b2[i]) ok=0;

    printf (ok?"Verified, OK!\n":"Error occured!\n");

  }
  else
    fprintf (stderr, "VID/PID in EEPROM don't match! Skipping...");


}


int main (int argc, char **argv) {

  struct usb_bus      *bus;
  struct usb_device   *dev;
  usb_dev_handle      *handle = NULL;

  if (argc!=3) usage();

  sscanf(argv[1], "%x:%x", &vid_o, &pid_o);
  sscanf(argv[2], "%x:%x", &vid_n, &pid_n);

  if ((vid_o>0xffff) || (pid_o>0xffff) || (vid_n>0xffff) || (pid_n>0xffff)) usage();

  printf ("\nRepairing: [%04x:%04x] => [%04x:%04x]\n\n", vid_o, pid_o, vid_n, pid_n);


  usb_init();
  usb_find_busses();
  usb_find_devices();
  for (bus=usb_get_busses(); bus; bus=bus->next)
  {
    for (dev=bus->devices; dev; dev=dev->next)
    {
      if ((dev->descriptor.idVendor==vid_o) && (dev->descriptor.idProduct==pid_o))
      {
        handle=usb_open(dev);
        if (!handle)
          printf("Error opening [%04x:%04x]!\n", vid_o, pid_o); 
        else
        {
          printf("Found [%04x:%04x]: trying to repair ----------------\n", vid_o, pid_o); 
          repair(dev, handle);
        }
      }
    }
  }


  return 0;
 }

V adresáři rovněž vytvoříme soubor Makefile a do něj dáme:

BIN=/usr/bin

USBFLAGS = `libusb-config --cflags`
USBLIBS = `libusb-config --libs`

CC		= gcc
CFLAGS	= $(USBFLAGS) -O3 -Wall
LIBS	= $(USBLIBS)

PROGRAM=yakumo-repair

all: $(PROGRAM)

.c.o:
	$(CC) $(CFLAGS) -c $<

$(PROGRAM): $(PROGRAM).o
	$(CC) -o $(PROGRAM) $(PROGRAM).o $(LIBS)

strip: $(PROGRAM)
	strip $(PROGRAM)

install: strip
	cp -f $(PROGRAM) $(BIN)

clean:
	rm -f *.o $(PROGRAM)
Program zkompilujeme pomocí 'make'.

Jak na to?

Nejprve nahrajeme do adaptéru firmware pro práci s EEPROM (nyní spouštíme vše pod rootem!):
./cycfx2prog -id=14ee:0225 prg:Vend_ax.hex run
Program vypíše něco jako:
Using ID 14ee:0226 on 001.014.
Putting 8051 into reset.
Programming 8051 using "Vend_ax.hex".
Putting 8051 out of reset.
Poté spustíme náš program se dvěma parametry: prvním je současný (nekorektní) pár VID/PID, druhým je opravený VID/PID:
./yakumo-repair 14ee:0225 14aa:0225
Program vypíše:
Repairing: [14ee:0225] => [14aa:0225]

Found [14ee:0225]: trying to repair ----------------
EEPROM READ: [256]	 c0 ee 14 25 02 00 00 08 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
... old VID/PID OK! Trying to overwrite VID/PID in EEPROM...
... written 5 bytes...
Verifying...
Verified, OK!
Což znamená, že v tomto okamžiku by mělo být vše v pořádku, stačí adaptér odpojit a znovu zapojit a měl by znovu fungovat.        

Hodnocení: 89 %

        špatnédobré        

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

Komentáře

Vložit další komentář

26.9.2010 14:31 pc2005 | skóre: 30 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Oprava Yakumo QuickStick DVB-T pod linuxem
Wow tomu říkám podpora hardwaru, vývojové prostředí :-O. U některých hw by šlo tak maximálně změnit USB ID ve zdrojáku kernelu :-D.
Časožrout agar.io | 帮帮我,我被锁在中国房 | Texaské nástroje, Národní polovodiče
Jendа avatar 26.9.2010 15:18 Jendа | skóre: 70 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Oprava Yakumo QuickStick DVB-T pod linuxem
Nebylo by jednodušší říct ovladači, aby používal i zařízení s tím rozhozeným ID?
Petr Tomášek avatar 26.9.2010 15:39 Petr Tomášek | skóre: 34 | blog: Vejšplechty
Rozbalit Rozbalit vše Re: Oprava Yakumo QuickStick DVB-T pod linuxem
Jo a při dalším upgrade systému to budu muset dělat znova, že? (Navíc chci, aby mi stick fungoval na vícero počítačích)
26.9.2010 15:30 pc2005 | skóre: 30 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Oprava Yakumo QuickStick DVB-T pod linuxem
Rofl on mě přišel i mail z konference LinuxTV :-D.
Časožrout agar.io | 帮帮我,我被锁在中国房 | Texaské nástroje, Národní polovodiče
Petr Tomášek avatar 26.9.2010 16:50 Petr Tomášek | skóre: 34 | blog: Vejšplechty
Rozbalit Rozbalit vše Re: Oprava Yakumo QuickStick DVB-T pod linuxem
Předtím jsem se tam (byť bezúspěšně) ptal, tak mi přišlo slušné dát zprávu o tom, že jak jsem problém vyřešil...
Grunt avatar 26.9.2010 18:58 Grunt | skóre: 19 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: Oprava Yakumo QuickStick DVB-T pod linuxem
No LOL teda. A to já si myslel, že snad i něco málo o odcihlení RDAA-81 pomocí JTAGu po těch peripetiích i napíšu, ale jak se dívám tak jsem pořád slabé máslo a ještě budu muset počkat na corovější zážitky.
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!

Založit nové vláknoNahoru

ISSN 1214-1267   Powered by Hosting 90 Server hosting
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.