
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!