Cómo se quitan los blobs al núcleo

A veces, hay controladores que no están disponibles en los núcleos oficiales de Linux, como controladores específicos y árboles de dispositivos para la arquitectura ARM adaptada para ciertos SoCs, sin embargo, muchos de ellos contienen controladores o blobs no libres, por lo que es necesario eliminarlos para proteger su libertad.

¿Qué es un blob?

Un Blob es una pieza de código objeto distribuida sin fuente, generalmente firmware para ejecutar algún dispositivo. Ese firmware se distribuye solo en forma de código objeto, bajo una licencia no libre.

¿Qué es el deblobbing?

Deblobbing es la forma de eliminar los blobs de la fuente o parches.

deblob-check

deblob-check es un guión escrito por Alexandre Oliva. Es la forma más fácil de buscar blobs para eliminarlos de las fuentes del núcleo y los parches del núcleo.

¿ Cómo usar deblob-check para quitar blobs al núcleo ?

El comando para comenzar a quitar blobs es verificar las secuencias que coinciden con la prueba del detector de blob con -B, por ejemplo:

./deblob-check  -B name.patch

Los resultados comunes podrían ser tales como:

err = request_firmware_direct(&ditem->fw, item->overlay_name, dev);

y

#define WL18XX_CONF_FILE_NAME "ti-connectivity/wl18xx-conf.bin"

En este caso, debe verificar si esas referencias fueron eliminadas por deblob-x.y de la versión del núcleo que está utilizando. Puede obtenerlo en la página de script Linux-libre (p. Ej. 4.9-gnu).

Si esas referencias aún no están disponibles en la fuente de Linux-libre, entonces debe verificar si esas referencias no son falsos positivos. Si la primera referencia (por ejemplo, request_firmware_direct) solicita un blob, entonces debe cambiar el nombre request_firmware_direct a reject_firmware_direct y si el segundo (wl18xx-conf.bin) es un blob, debe reemplazarlo con /*(DEBLOBBED)*/ , por ejemplo:

err = reject_firmware_direct(&ditem->fw, item->overlay_name, dev);

y

#define WL18XX_CONF_FILE_NAME "ti-connectivity/wl18xx-conf/*(DEBLOBBED)*/
Si encuentra blob incluidas en el parche, debe eliminarlas manualmente con su editor favorito (por ejemplo, vim)
No todos los archivos “.bin” son blobs, debe verificar si contienen código fuente bajo una licencia libre. De lo contrario, algunos de ellos podrían ser una secuencia corta de accesos de registro que no son susceptibles de copyright, por lo que la licencia es irrelevante y se considera falsos positivos.
deblob-check podría hacer coincidir cosas como dtc-lexer.lex.c_shipped como blobs, sin embargo, son falsos positivos ya que son tablas de procesamiento de expresiones regulares.