Android内核模块修改Framebuffer

问题描述 投票:0回答:1

我正在寻找有关如何从 Android 设备访问帧缓冲区 (fb0) 并修改特定像素列的教程或指南。根据我的研究,这似乎可以通过创建内核模块来实现。但是,尝试使用“cat /dev/fb0”会导致一条错误消息,指出“cat:/dev/fb0:没有这样的文件或目录”,即使设备已获得 root 权限也是如此。

android module kernel framebuffer
1个回答
0
投票

您在这里混淆了几件事:

“cat: /dev/fb0: 没有这样的文件或目录” - 这是因为 /dev/fb0 是帧缓冲区的旧(现在已经消失)设备节点。较新的设备使用 /dev/kgsl-3d0 (对于 Qualcomm Adreno)或 /dev/mali0 (对于非 Qualcomm、ARM GPU)

其次,即使您可以捕获它 - 您也会从用户模式获得帧缓冲区快照 - 尽管大多数驱动程序在执行 ioctl() 和/或 mmap(2) 映射帧缓冲区之前不允许这样做。而且它不允许您只“echo foo > /...framebuffer”,因为驱动程序不支持这一点。最后,这是从用户模式访问 FB,而不是从内核模块访问。内核模块不会“看到”任何上述 /dev 节点,但能够直接访问 GPU 内存。

如果您要创建内核模块,它将取决于您要连接的驱动程序。或者,根据您要修改的内容,更好的方法是保持用户模式,并与 Android 的 SurfaceFlinger 进程交互。这使您能够创建自己的表面。然后 SurfaceFlinger 将它们组合在较低级别的帧缓冲区之上,使用 HAL 抽象出确切的 /dev 节点和所需的 ioctl 代码。

© www.soinside.com 2019 - 2024. All rights reserved.