Solucionar problemas con chip Wi-Fi Broadcom después de actualizar el kernel en Ubuntu y derivados

Buenas de nuevo, en esta ocasión vamos a hablar de un problema al que me tuve que enfrentar hace poco en mi laptop, y es que hace poco actualicé el Kernel Linux a su versión 4.0.2 (siguiendo el tutorial de esta entrada) para solucionar problemas de compatibilidad con el touchpad (como se explica en esta otra entrada). El caso es que parecia que la solución había resultado peor que el problema ya que desde ese momento la tarjeta Wi-Fi me dejó de funcionar; reinstalé el driver pero aún así seguía sin funcionar.

Esta entrada versa acerca de los siguientes chips de Wi-Fi Broadcom: BCM4311, BCM4312, BCM4313, BCM4321, BCM4322, BCM43224, BCM43225, BCM43227, BCM43228, BCM43142, BCM4331, BCM4352 y BCM4360; aunque puede funcionar también con otras tarjetas Broadcom, podeis mirar cual es vuestro chip con el comando

lspci | grep 'Network'

Dejenme decir antes que nada si no habeis actualizado el kernel y vuestra versión es 3.X.X (con ‘X’ me refiero a cualquier número) (podeis mirar cual es vuestro kernel ejecutando en una terminal ‘uname -r‘) tan solo teneis que instalar el driver, ejecutando

sudo apt-get install bcmwl-kernel-source

En cambio si vuestra versión de kernel es 4.X.X debeis seguir los pasos que van a continuación.

Lo primero que debemos hacer es desinstalar el driver de nuestro chip de conexión inalámbrica, para eso ejecutamos

sudo apt-get remove bcmwl-kernel-source

Ahora instalamos el paquete git-buildpackage que nos ayudará a compilar la versión actualizada del driver, que no es la que se encuentra en los repositorios oficiales (las aplicaciones de los repositorios de Ubuntu no suelen estar demasiado actualizadas), para ello

sudo apt-get install git-buildpackage

Bien, ahora debemos crear una carpeta en la que trabajar, podemos elegir una de nuestro sistema o hacer

mkdir bcmwl-ubuntu & cd bcmwl-ubuntu

Clonamos del GitHub de los desarrolladores del driver el paquete del mismo (no os preocupeis no hace falta tener cuenta de GitHub)

git clone https://github.com/longsleep/bcmwl-ubuntu.git bcmwl-ubuntu-master

Accedemos a la carpeta que acabamos de descargar

cd bcmwl-ubuntu-master

Ahora debemos compilar el paquete del driver usando primer programa que descargamos

gbp buildpackage -b -uc -us

Una vez hecho esto se nos habrá generado un .deb instalable del driver el la carpeta superior a la que nos encontramos. Podemos instalarlo con un instalador gráfico como GDebi, aunque yo recomiendo utilizar el siguiente comando que es más seguro y con menos probabilidad de error

sudo dpkg -i ../bcmwl-kernel-source*.deb

Y, de haber salido todo correctamente tan solo hará falta reiniciar y tendremos nuestro WiFi correctamente funcionando 😄

Un saludo a todos/as, espero que este tuto os haya servido de ayuda, si es así o si simplemente os gustó por favor compartidlo para que más gente lo pueda ver. ¡Hasta la próxima!

Anuncios
Solucionar problemas con chip Wi-Fi Broadcom después de actualizar el kernel en Ubuntu y derivados

Error al montar disco duro externo NTFS en GNU/Linux

Buenas, regreso después de un largo tiempo de inactividad al blog, principalmente debido a que no me apetecía un pimiento postear nada…

Andaba yo hoy mismo haciendo un backup de mi usuario en Ubuntu, para instalar otro sabor del mismo, en este caso Gubuntu, o Ubuntu-Gnome, cuando me di cuenta que el backup ocupaba más de lo que podía meter en un pen-drive, así que decidí usar el disco duro externo de mi madre para tal tarea. Mi sorpresa vino cuando al intentar montar el disco en mi Linux me saltaba este mensaje:

Failed to mount '/dev/sdc5': Error de entrada/salida
NTFS is either inconsistent, or there is a hardware fault, or it's a
SoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windows
then reboot into Windows twice. The usage of the /f parameter is very
important! If the device is a SoftRAID/FakeRAID then first activate
it and mount a different device under the /dev/mapper/ directory, (e.g.
/dev/mapper/nvidia_eahaabcc1). Please see the 'dmraid' documentation
for more details.

Este error ocurre cuando intentamos montar una memoria con formato NTFS (es decir el formato que obtienen las memorias al formatearlas en Windows) en un Linux, cuando esta memoria ha sido extraida de un sistema Windows sin la opción de extracción segura (en Windows antes de extraer una memoria hay que pulsar en un botoncito que hay abajo a la derecha para extraer la memoria de forma segura).

Sí, una situación muy rebuscada, y como tal, la solución había de ser muy rebuscada. Una piosible solución a este problema es conectar el disco duro a un sistema Windiows, montarlo allí y luego extraerlo de forma segura, pero resulta que en mi casa no tengo ningún sistema Windows (¡viva GNU/Linux!, si me llegan dicen a mí hace dos años que en un futuro no tendría ningún Windows en casa no le creeía), así que me puse a buscar la manera de solucionar el error con el poder de los pinguinos.

Lo primero que hay que hacer es detectar cual es el disco que falla (si, tu sabes que es el que está conectado en el puerto derecho de tu compu, pero el ordenador no lo sabe), para ello yo usé GParted, si no lo tienes:

sudo apt-get install gparted

Luego tenemos que ver cual es nuestro disco duro, en mi caso el mío es de 75 GiB, con lo cual en el selector de arriba a la derecha de GParted seleccionamos el que tenga esa capacidad, y luego de ahí vemos cual es la partición que está formateada con NTFS, en mi caso es la que está seleccionada (/dev/sdc5)

Ventana de GParted

Bien, ahora tenemos que usar un programita que se llama ntfsfix, pero antes tenemos que instalar ntfs-3g (si usas Ubuntu ya lo tendrás instalado), sino:

sudo apt-get install ntfs-3g

Ahora tenemos que correr ntfsfix en nuestra partición, en mi caso:

sudo ntfsfix /dev/sdc5

Esto lo que hace es solucionar el error que tenía el disco duro por haberlo extraido de forma no segura (es posible que tenga ese error por otros motivos)

Ahora creamos una carpeta para el montaje de nuestro disco duro, la vamos a llamar temp:

sudo mkdir /media/temp

Y por último forzamos el montaje de la unidad, ejecutando el siguiente comando, substituyendo ‘/dev/sdc5’ por nuestra partición afectada:

sudo mount -t ntfs /dev/sdc5 /media/temp -o force

Y voilà, si todo ha salido bien, ya tendríamos nuestro disco montado y funcionando 😀

Espero que os haya servido este aporte, si es así o simplemente os gustó por favor compartid el blog, ¡gracias!

Error al montar disco duro externo NTFS en GNU/Linux

Como dar formato a un WriteLn que contiene un numero con coma flotante en Pascal

Durante estos días he estado practicando con Pascal y ayer estuve haciendo un programilla que calcula el área de un triangulo, y mientras lo hacía me encontré con un problema. La cosa es que, obviamente, el área del triangulo que devuelve el programa es un número real, osea que tenga decimales, lo que se traduce a la programación como un número con coma flotante (más concretamente dentro ya de Pascal, de tipo ‘real’, ‘double’ o ‘extended’, dependiendo de la magnitud de los números que esperemos obtener).

El problema es que cuando mediante la función de salida por pantalla estandar (‘writeln()’, es parecida a ‘puts()’ en C) hacemos que se escriba en pantalla esa variable que contiene el resultado de tipo flotante nos lo muestra en notación científica, pero no esa que todos aprendimos en primaria, no, algo como ‘2,2346634E-34’ (sí, se que es parecida en realidad).

writeln('El area del triangulo es: ',res);

Siendo ‘res’ la variable que contiene el resultado de la operación con coma flotante. Yo estaba haciendo un programa sencillo y no quería que hasta el número decimal más sencillo me hiciese sacar la calculadora para ver cuanto era, así que me puse a investigar por el internete, y ví que más gente tenía este problema así que por eso traigo aquí esta entrada. La primera conclusión a la que llegué es que se puede solucionar poniendo:

writeln('El area del triangulo es: ',res:0:15);

Esto lo que hace es que se muestre el número, ya sin notación científica, con un mínimo de cero dígitos en el lado entero de la coma y con exactamente diez dígitos en el lado decimal. Para que entendáis como funciona os voy a poner un par de ejemplos:

//Esto hace que haya mínimo 10 digitos delante de la coma y exactamente 10 detras:
writeln('El area del triangulo es: ',res:10:10);
//Si res es 21.456 devuelve 0000000021.4560000000

//Esto hace que haya mínimo 2 digitos delante de la coma y exactamente 6 detras:
writeln('El area del triangulo es: ',res:2:6);
//Si res es 2124.45656668 devuelve 2124.456567 (a partir del último decimal se redondea)

Como veis este método no resulta una solución perfecta en absoluto, ya que, no solo aparecen ceros hasta que se rellane el total de digitos decimales, sino que si la cantidad de cifras decimales fuese mayor que la impuesta se redondearía al llegar a límite.

Más tarde encontré la función ‘format()’ de la unidad sysutils (puedes encontrar información de dicha función en la documentación de FreePascal). Está función permite dar formato de forma parecida a la que lo hace ‘printf()’ en C, pero mucho más liosa y no me solucionó nada.

Al final la solución fué mucho más simple y se me ocurrió en un momento de lucidez después de no encontrarla por internet. Es tan simple como pasar la variable a tipo ‘String’, antes de mostrarla en pantalla, de esa manera no será de tipo ‘double’ ni nada parecido, sino que será una cadena de texto. Recordad que antes debemos declarar la variable de tipo ‘string’. Podemos darle un limite de caracteres (uno muy grande ya que ahora no nos lo rellenará con ceros), ya si no lo hacemos y el resultado de la operación es un número irracional infinito el programa se tildará. Yo a la nueva variable la llamé ‘fres’. Luego para pasar el contenido de ‘res’ como String a ‘fres’ hacemos lo siguiente:

fres:= floattostr(res);
writeln('El area del triangulo es: ',fres);

Hemos utilizado la función ‘FloatToString()’ que de manera muy simple nos pasa un número de tipo flotante (ya sea ‘double’, ‘real’, etc) a cadena de texto.

Espero que os haya gustado y os haya sido útil este tutorial y si es así podéis darme un +1 o compartir en Twitter o Facebook. Si os gusta el blog abajo hay un formulario para seguirlo por correo electrónico. ¡Hasta la próxima!

Como dar formato a un WriteLn que contiene un numero con coma flotante en Pascal