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)*/