Estoy asignando un búfer en mi controlador usando devm_kzalloc(.., .., GFP_KERNEL) y luego registro este búfer como un controlador de búfer de cuadros para que aparezca como un archivo en /dev/fb0 . Entonces puedo abrir este archivo y escribir en él. Cuando lo hago de esta manera, todo funciona bien y mis datos llegan al búfer de memoria del controlador.
Sin embargo, si luego lo mapeo en el proceso de usuario de esta manera: mmap mmap(NULL, size, PROT_WRITE, MAP_SHARED, fd, 0) , usando el mismo archivo fd e intento escribir en el espacio de memoria devuelto, no se escribe nada en el controlador memoria.
¿Me estoy olvidando de algo aquí?
¡Entiendo! Lo estaba haciendo todo mal. Tuve que configurar el sistema vm para manejar correctamente mmap y esto tuvo que hacerse usando fb_deferred_io (que ni siquiera tenía hasta que habilité algunos controladores no relacionados que lo seleccionaron). Luego tuve que usar __get_free_pages en lugar de devm_kzmalloc() y un último detalle fue usar __pa(vmem) al asignar el puntero del búfer de pantalla para el subsistema fbdev. Entonces empezó a funcionar :-)