Linux/Jádro/Chyby/ehci hcd
Jádro: Chyby: ehci_hcd
Související odkazy
[editovat]Projevy
[editovat]Už asi rok se potýkám s různými chybami při čtení různých flash paměťových karet prostřednictvím různých USB čteček. Mám různé paměťové karty typu SD, MMC a CF, kdůli kterým jsem si postupně opatřil tři různé čtečky. Také jsem tyto karty četl přes USB kabel přímo v zařízeních, ve kterých se nacházely (fotoaparát Minolta, nahrávadlo BOSS Micro BR). Někdy přenos dat probíhal v pohodě, někdy se během čtení zaseknul a procesy jádra zůstaly viset ve stavu D (uninteruptible sleep). Byly případy, kdy zařízení nešlo vůbec ani přimontovat nebo nebylo rozpoznáno. Prostě škála příznaků byla velice pestrá a různé kombinace karet a čteček se chovaly všelijak. Každopádně ale, i když vše fungovalo v pořádku, zdálo se mi, že ty přenosy jsou dost pomalé - rychlost odpovídající USB-1 nebo i nižší.
Kolikrát jsem se na toto téma ptal v linuxových konferencích, ale žádnou kloudnou radu jsem nedostal.
Nakonec jsem dospěl k názoru, že jelikož se vše nějak točí kolem USB, že to bude asi HB chyba v USB portu. Mám už hodně starý motherboard a tak jsem se rozhodnul sokoupit si PCI desku se čtyřmi USB porty. V první chvíli to vypadalo, že se tím věc vyřešila, čtečka Soledo, která do té doby byla naprosto nepoužitelná, najednou začala fungovat, ale naopak zase jiné věci, které předtím fungovaly (např. USB přenos přímo z MICRo BR) fungovat přestaly. Dostal jsem od kamaráda další čtečku Kingston, která se zpočátku tvářila, že funguje perfektně (tam, kde předtím čtečka Soledo nedala ani ťuk), ale uprostřed přenosů se najednou "zasekla". Chtěl jsem ji jít reklamovat, ale když ji kamarád zkoušel pod svvými Windows XP, podávala perfektní výkon bez jediné chyby.
Vše vyvrcholilo, když jsem si koupil nové vysokorychlostní 2GB karty SD a CF. S SD to ještě šlo, ale CF se tvářila prakticky nepoužitelně. S velkými problémy jsem přečetl alespoň partition table, následný badblocks hlásil jednu chybu za druhou.
Konečně (mohlo mě to také napadnout dříve) jsem si vybral několik "nejpodezřelejších" hlášek jádra z /var/log/kern.log a zakomponoval jsem je do dotazu Googlu:
card reader debian "Sense not available." "Assuming drive cache: write through" "READ CAPACITY failed"
Nejvíce relevantní odkaz mi přišel Bug #88746 in linux-source-2.6.22 (Ubuntu), nadepsaný jako:
Bug #88746 (ehci-hcd), first reported on 2007-02-28 by Al Buntu
ehci_hcd module causes I/O errors in USB 2.0 devices. Popis bugu začíná slovy:
Bug description Tags: ehci-hcd qa-hardy-list usb Certain USB devices do not work properly, or do not work at all, while the ehci_hcd module is loaded. A solution is to unload the ehci_hcd module, which is loaded every time the computer starts, using the command 'sudo modprobe -r ehci_hcd'. This works fine but unfortunatly ehci-hcd is necessary for using USB 2.0, so you lose USB 2.0 features...
To, si myslím, asi nejlépe vystihuje můj problém.
Podle návodu jsem zkusil odpojit USB čtečku, vysunout modul ehci_hcd:
# modprobe -r -v ehci_hcd
připojit čtečku a vyzkoušet, vše vypadalo OK. Pustil jsem přes noc
# date; badblocks -o emtec.badblocks.usb1.all -v -w /dev/sdb; date
Výsledek byl 100%, ani jeden chybný blok , vše ok, jenomže 1970136 1kB bloků se kontrolovalo 4:39:49, tj. 117 kB/s pro read+write, krát dvě, což by odpovídalo přibližnému průměrnému přenosu o něco vyššímu než 234 kB/s (předpokládám že režie procesoru pro porovnávání je nižší než režie USB přenosu; jinak deklarovaná rychlost CF karty je 80 MB/s, takže přenos bez ehci_hcd běží sice bezchybně, ale v tomto případě 320x pomaleji, než by mohl. Což je už trochu tristní záležitost :-(
Příspěvky k tomuto bugu se tam táhnou od 2007-03-01 až do 2008-04-02 a jsou jich stovky. Kromě toho je v záhlaví uvedeno This bug has 12 duplicates, tj. prakticky stejný problém je reportován vícekrát, protože se zřejmě projevuje pokaždé jinak. A to je v sekci, týkající se Ubuntu: https://bugs.launchpad.net/ubuntu/ Když tam dám vyhledávat výraz ehci_hcd, dostanu 185 záznamů. Kupodivu, když tentýž výraz nechám hledat v sekci https://bugs.launchpad.net/debian/, dostanu jen 2 záznamy, které jsou asi mimo. Nebude to asi tím, že by v Debianu bylo méně chyb než v Ubuntu, ale spíš tím, že Debian už dlouhou dobu používá vlastní osvědčený Bug Tracking System, viz: http://www.debian.org/Bugs/.
Jelikož se ale jedná o zjevnou chybu modulu jádra, bude nejlépe hledat chybu přímo v Linux Kernel Trackeru na http://bugzilla.kernel.org/ Protože jsem tuto službu nepoužil, založil jsem si k tomuto účelu stránku Linux/Jádro/Chyby.
Rozhodnul jsem se proto tento svůj případ použít jako exemplární příklad pro demonstraci toho, jakými prostředky může obyčejný uživatel Linuxu komunikovat s programátory jádra a tím spolupracovat na odstranění chyb ještě dřív, než se nechá znechutit natolik, že si namísto Linuxu nainstaluje jiný OS. Tento jeden příklad by měl ilustrovat možnosti, jak je možné takové problémy řešit.