
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!






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
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
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
Bela dica Luis!
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
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.
Rogerio,
Obrigado pela dica!
Att.
Guto