Может ли драйвер кадрового буфера Linux получать уведомления обо всех изменениях своего содержимого?
Предположим гипотетический протокол удаленного фреймбуфера, реализованный как драйвер фреймбуфера Linux.
Может ли такой драйвер получить уведомление, когда память фреймбуфера была записана непосредственно из пространства пользователя через отображение mmap или подобное?
http://lxr.free-electrons.com/source/drivers/video/fbdev/skeletonfb.c?v=4.4#L653 показывает все функции, которые автор модуля может реализовать для получения такой информации, но на первый взгляд я не смог см. реализацию xxxfb_mmap или xxxfb_write, которые были бы возможными кандидатами.
Обновить:
Я только что видел fb_write
по адресу http://lxr.free-electrons.com/source/drivers/video/fbdev/core/fbmem.c?v=4.4#L812
Будет ли это вызываться, только когда кадровый буфер записывается через дескриптор файла или также когда его память записывается через mmapping?
Я ищу способ поиска изменений кадрового буфера в памяти только после изменения его содержимого, а не непрерывного поиска.
1 ответ
Вы можете использовать Deferred IO, шаги описаны здесь:
static void hecubafb_dpy_deferred_io(struct fb_info *info,
struct list_head *pagelist)
{
}
static struct fb_deferred_io hecubafb_defio = {
.delay = HZ,
.deferred_io = hecubafb_dpy_deferred_io,
};
// init
info->fbdefio = &hecubafb_defio;
fb_deferred_io_init(info);
// cleanup
fb_deferred_io_cleanup(info);