Linux 帧缓冲区驱动程序能否收到有关其内容的所有更改的通知?
Can a Linux framebuffer driver get notification of all changes to its content?
假设一个假设的远程帧缓冲区协议,实现为 Linux 帧缓冲区驱动程序。
当用户 space 通过 mmap 映射或类似方式直接写入帧缓冲区内存时,这样的驱动程序能否收到通知?
https://elixir.bootlin.com/linux/v4.4/source/drivers/video/fbdev/skeletonfb.c#L653 显示了模块编写者可以实现的所有功能来获取此类信息,但乍一看我看不到 xxxfb_mmap 或 xxxfb_write 的实现是可能的候选人。
更新:
我刚刚在 https://elixir.bootlin.com/linux/v4.4/source/drivers/video/fbdev/core/fbmem.c#L812
看到了 fb_write
仅当通过文件描述符写入帧缓冲区或通过映射写入其内存时才会调用此方法吗?
我正在寻找一种方法,只在内容发生变化时搜索内存中帧缓冲区的更改,而不是连续搜索它。
您可以使用延迟 IO,
步骤描述 here:
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);
假设一个假设的远程帧缓冲区协议,实现为 Linux 帧缓冲区驱动程序。
当用户 space 通过 mmap 映射或类似方式直接写入帧缓冲区内存时,这样的驱动程序能否收到通知?
https://elixir.bootlin.com/linux/v4.4/source/drivers/video/fbdev/skeletonfb.c#L653 显示了模块编写者可以实现的所有功能来获取此类信息,但乍一看我看不到 xxxfb_mmap 或 xxxfb_write 的实现是可能的候选人。
更新:
我刚刚在 https://elixir.bootlin.com/linux/v4.4/source/drivers/video/fbdev/core/fbmem.c#L812
看到了fb_write
仅当通过文件描述符写入帧缓冲区或通过映射写入其内存时才会调用此方法吗?
我正在寻找一种方法,只在内容发生变化时搜索内存中帧缓冲区的更改,而不是连续搜索它。
您可以使用延迟 IO, 步骤描述 here:
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);