sábado, 29 de enero de 2011

Blacklist (lista negra), dejar de cargar un controlador (driver)

Algunas veces tenemos controladores (driver's) que dan problemas con nuestro hardware, simplemente se montan el controlador  y no sirven, descontrola nuestro ordenador o no llega a dar la calidad que inicialmente se pretendía en calidad de imagen (webcam) sonido (tarjetas de placas base) red (tarjetas wifi con problemas). Al estar incluidos en el kernel para dejar de usarlos tendríamos que compilar de nuevo el kernel con sus indudables problemas o dejar de usarlos en el arranque que es nuestro caso.
Entonces en Linux/Ubuntu, tenemos una forma de dejar de cargar ese controlador problemático de una forma fácil. Podemos crear un archivo o añadir una linea con el nombre del controlador, desde ese momento Linux/Ubuntu simplemente dejara de usarlo.

Mi problema era la carga de un controlador que no me da la calidad de señal en una tarjeta wifi usb de la marca Zydas (zd1211rw) y tenia que bloquear la carga del controlador para poder usar ndisgtk (ndiswrapper+Gtk) para usar el controlador para windows-xp zd1211bu.inf

- Paso a explicaros como poder hacer esto, necesitamos abrir una terminal:

1.- Averiguando el nombre del controlador usado por la tarjeta:
lsmod
Obtendremos una larga lista de todos los controladores y el uso del hardware de nuestro ordenador. Aunque esta no es la lista del hardware con el problema, es para que os hagáis una idea de lo que encontrareis.

pepe@Aspire-9300:~$ lsmod
Module                  Size  Used by
nls_iso8859_1           3261  0 
nls_cp437               4931  0 
vfat                    9201  0 
fat                    48240  1 vfat
usb_storage            40172  0 
binfmt_misc             6599  1 
parport_pc             26058  0 
ppdev                   5556  0 
snd_hda_codec_realtek   218227  1 
snd_hda_intel          22107  2 
nvidia               9329739  45 
snd_hda_codec          87552  2 snd_hda_codec_realtek,snd_hda_intel
snd_hwdep               5040  1 snd_hda_codec
snd_pcm                71475  2 snd_hda_intel,snd_hda_codec
snd_seq_midi            4588  0 
snd_rawmidi            17783  1 snd_seq_midi
snd_seq_midi_event      6047  1 snd_seq_midi
snd_seq                47174  2 snd_seq_midi,snd_seq_midi_event
arc4                    1165  2 
snd_timer              19067  2 snd_pcm,snd_seq
snd_seq_device          5744  3 snd_seq_midi,snd_rawmidi,snd_seq
ath5k                 130083  0 
mac80211              231541  1 ath5k
snd                    49038  13 snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_rawmidi,snd_seq,snd_timer,snd_seq_device
soundcore                880  1 snd
ath                     8153  1 ath5k
snd_page_alloc          7120  2 snd_hda_intel,snd_pcm
pcmcia                 35973  0 
cfg80211              144470  3 ath5k,mac80211,ath
gspca_m5602            52354  0 
yenta_socket           21518  0 
i2c_nforce2             5179  0 
agpgart                32011  1 nvidia
acer_wmi               13929  0 
gspca_main             23644  1 gspca_m5602
tifm_7xx1               3766  0 
videodev               43098  1 gspca_main
tifm_core               6089  1 tifm_7xx1
v4l1_compat            13359  1 videodev
video                  18712  0 
pcmcia_rsrc            10566  1 yenta_socket
output                  1883  1 video
lp                      7342  0 
pcmcia_core            14657  3 pcmcia,yenta_socket,pcmcia_rsrc
k8temp                  3228  0 
parport                31492  3 parport_pc,ppdev,lp
psmouse                59033  0 
joydev                  8767  0 
led_class               2633  2 ath5k,acer_wmi
serio_raw               4022  0 
usbhid                 36882  0 
hid                    67742  1 usbhid
sata_nv                19420  3 
forcedeth              49433  0 
pata_amd                8746  0 


2.- Si sabemos como se llama el controlador podremos acertar con el nombre o acercarnos para que busque los que mas se acerquen :
lsmod | grep zd1211
3.- Una vez reconocido el controlador, podríamos dejarlo de usar en esa misma sesión, con la siguiente orden :
sudo rmmod zd1211rw
4.- Para dejarlo de usar definitivamente tendremos que dejar nuestro archivo blacklist-custom en el lugar idóneo para esta orden.  (/etc/modprobe.d/blacklist-zydas.conf)

# /etc/modprobe.d/blacklist-custom  
# Custom blacklist file so I don't mess with any of the files that come with 
# the module-init-tools package.
blacklist zd1211rw

5.- Para confirmar el uso de la blacklist :

sudo update-initramfs -u
6.- Para poder cargar el modulo si decido usarlo nuevamente, en mi caso el que puse en lista negra:
sudo modprobe zd1211rw
7.- Para reiniciar el controlador:
sudo modprobe -r zd1211rw
Con estos pasos espero haber explicado clara y fácilmente, la forma de añadir manualmente un controlador a la lista negra, para que el kernel deje de usarlo en la carga de controladores y después si es necesario volverlo a cargar manualmente. Si te fue interesante usa la opciones de Reacciones. Así me ayudaras a saber si fue interesante para otros proyectos.

2 comentarios:

Luis dijo...

Hola, una duda. Tengo una cámara web (Sephia USB 2.0) que me funciona con Cheese pero no con Skype. Estoy probándolo todo y no sé si es cosa de drivers. El caso es que tengo el CD de la webcam pero Ubuntu no me ejecuta el autorun.
No estoy familiarizado con el lenguaje del terminal, ¿cómo podría instalar esos drivers?
Gracias, un saludo y felicitaciones por el blog

arriero dijo...

Si puedes ver la webcam con cheese y no con Skype no es un problema de drivers es un problema de skype. Te aconsejo una vuelta por los foros de la comunidad de Skype para posible soluciones con tu cam.