bugfix: gaveta usb coolermaster x-craft 310 + kernel 2.6.28

bug

Comprei uma gaveta USB para meu HD de 500 GB há uns 2 meses aqui em Brasília, na loja ela funcionou perfeitamente no windows, detectou, montou, leu, gravou, então comprei, afinal storage devices USB não são nenhum mistério para o kernel linux. Claro realmente não são, mas o fabricante quis economizar e colocou um chipset xingling na gaveta que demora 10 segundos para se identificar, por padrão o kernel linux espera até 5 segundos, veja a saída do dmesg quando tento ligar a gaveta.

device descriptor read/64, error -32
device descriptor read/64, error -32
new high speed USB device using ehci_hcd and address 14
device not accepting address 16, error -110

pois então, dei uma pequisada (google é seu amigo) cai no forum da coolermaster ondem várias pessoas tem o mesmo problema e a resposta é sempre a mesma: – ‘não damos suporte para linux’.

http://forum.coolermaster.com/search.php?st=0&sk=t&sd=d&keywords=x+craft+linux

Continuei pesquisando bugs relacionados a gaveta e fui encontrando mais informações, desta vez no bugtrack do kernel, só que era para a gaveta 360 a minha é a 310, no mesmo bugtrack tem um link para a lista linux-usb com um patch sugerido por Jaroslav Kysela para o chipset DATASTOR8000, resolvi tentar o patch para minha gaveta e funcionou até o kernel 2.6.27.7.

http://bugzilla.kernel.org/show_bug.cgi?id=8639
http://article.gmane.org/gmane.linux.usb.general/9959

Mais pesquisa e um achei um site de um brazuca com o mesmo problema fazendo a sugestão do patch do Kysela ;)
http://www.anselmolsm.org/blog/coolermaster-x-craft-linux/

A questão é que houve muitas mudanças no hub.c entre o 2.6.27.7 e 2.6.28 e o patch anterior não batia com as linhas atuais do novo hub.c , então precisei fazer um novo patch.


--- linux-2.6.28/drivers/usb/core/hub.c 2008-12-30 09:09:38.839963141 -0200
+++ /usr/src/hub.c      2008-12-30 09:09:59.840279593 -0200
@@ -2551,7 +2551,8 @@
USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
USB_DT_DEVICE << 8, 0,
buf, GET_DESCRIPTOR_BUFSIZE,
-                                       initial_descriptor_timeout);
+                                       12000);
+                                       //initial_descriptor_timeout);
switch (buf->bMaxPacketSize0) {
case 8: case 16: case 32: case 64: case 255:
if (buf->bDescriptorType ==

Os patchs e a forma de aplicar estão em:
http://gutocarvalho.net/mediawiki/index.php/Gaveta_CoolerMaster_XCraft_310_e_Kernel_Linux

[]‘s
Guto
Compartilhe Sempre!


This is some text prior to the author information. You can change this text from the admin section of WP-Gravatar  To change this standard text, you have to enter some information about your self in the Dashboard -> Users -> Your Profile box.


Posts relacionados
This entry was posted in projeto linux, softwarelivre, tecnologias, wiki and tagged , , , , , . Bookmark the permalink.

7 Responses to bugfix: gaveta usb coolermaster x-craft 310 + kernel 2.6.28

  1. RogerioNo Gravatar says:

    Guto

    parabens pelo seu trabalho. Sem querer ser muito chato, daria pra vc fazr um tutorial ensinando passo a passo desde aplicar o seu patch ate a parte de recompilar o kernel do ubuntu 9.04 ? Seria muito util para pessoas assim como eu que estao tendo problemas com esse HD externo da CoolerMaster.
    Desde ja agradeço a sua atenção.

    Rogerio

  2. gutocarvalhoNo Gravatar says:

    Rogério,

    Eu já estou para desistir desta gaveta, não recomendo mesmo.

    Quanto ao tutorial para o Ubuntu é um tanto mais complicado, ele tem pacotes como linux-restricted-modules que precisam ser regerados, existem alguns patchs no kernel que são fundamentais para o funcionamento correto de certos recursos do ubuntu, colocar o kernel vanilla no ubuntu sem regerar os pacotes, como o fiz no debian, pode causar problemas para o seu uso, principalmente para devices wifi que precisam de drivers proprietários e placas de vídeo como a nvidia.

    No meu wiki tem um tutorial de como criar um kernel custom para o Ubuntu, dê uma olhada, aproveite para aplicar o patch durante este processo.

    []‘s
    Guto

  3. LuisNo Gravatar says:

    Não precisa recompilar o kernel:

    sudo su -
    echo -n “12000″ > /sys/module/usbcore/parameters/initial_descriptor_timeout

    e para tornar permanente:

    sudo su -
    apt-get install sysfsutils
    edita o /etc/sysfs.conf
    e coloca esta linha no final:
    module/usbcore/parameters/initial_descriptor_timeout = 12000

  4. gutocarvalhoNo Gravatar says:

    Bela dica Luis!

  5. RogerioNo Gravatar says:

    Guto achei outra solucao melhor, de uma olhada aqui:

    http://nalio.wordpress.com/2009/10/

    A fonte que ele utilizou foi essa:

    http://article.gmane.org/gmane.linux.usb.general/9959

  6. RogerioNo Gravatar says:

    Fiz o teste aqui e funcionou, aleluia, muito melhor porque nao precisa mexer com recompilar o kernel. Eu terstei no ubuntu 9.10 e funcionou.

  7. gutocarvalhoNo Gravatar says:

    Rogerio,

    Obrigado pela dica!

    Att.
    Guto

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Os comentários postados neste blog serão analisados, inicialmente de forma automática pelo akismet e bad-behavior, caso eles passem ilesos por estes sistemas anti-spam, ainda sim serão analisados em relação a quantidade de links, caso tenham mais de 2 links serão colocados na fila de moderação. Aqui me reservo ao direito de remover comentários ofensivos, off-topics, propagandas, trollagem sem sentido, afinal a responsabilidade do conteúdo do blog, inclusive comentários recai sob o autor. Até hoje não tive problemas com comentários, mas é sempre bom avisar como as coisas funcionam ;)