在 /dev/fb0 上写入对 GUI 控制台没有影响

在 /dev/fb0 上写入对 GUI 控制台没有影响

我这样运行X

/usr/bin/X vt07 -retro

将 GUI 放在控制台 7 上并将灰色网格作为背景。

在控制台 1 上我写

while [ 1 ] ; do cat /dev/random > /dev/fb0; done

我在屏幕上看到随机颜色的像素;我可以切换所有控制台并看到相同的内容,但是当我打开 XServer 处于活动状态的控制台 7 时,我会看到相同的灰色网格。

/dev/fb0如何在 X 处于活动状态的控制台中看到我写的内容?

如果我使用fbdev驱动程序,xorg.conf我也可以在 GUI 控制台上看到随机像素,但我需要使用amdgpuor radeon。是否有一些 X 选项、内核参数、模块参数需要更改才能覆盖 X?

我必须运行一个需要 X 的用户界面程序和同时在预定区域绘制的程序。借助kernel 3.9.6X Server 1.14.4fglrx视频驱动程序,这些程序可以运行并使用典型系统

        fbfd = open("/dev/fb0", O_RDWR);
        if (fbfd == -1)
        {
                perror("Error: cannot open framebuffer device");
                exit(1);
        }
        // Get fixed screen information
        if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo) == -1)
        {
                perror("Error reading fixed information");
                exit(2);
        }
        // Get variable screen information
        if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo) == -1)
        {
                perror("Error reading variable information");
                exit(3);
        }
        // Map the device to memory
        fbp = (char *) mmap(0, vinfo.yres * vinfo.pitch, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);

现在我必须升级到kernel 5.11.21X Server 1.20.11驱动amdgpu程序,这些程序不会在界面运行的控制台上绘制。我需要一个指向缓冲区的指针,我可以在其中写入和绘制,如果不可能修改系统以能够写入,那么我需要一个函数,该函数返回一个指针,我可以在其中通过 X 或其他方式写入自由绘画。

答案1

你不能。在 hw/xfree86/os-support/linux/lnx_init.c 中,您将找到 xf86OpenConsole(),它设置 VT_PROCESS 和 KD_GRAPHICS,因此您必须在 VT 处于活动状态时通过 X 服务器进行写入。它恰好可以与 fbdev(4) 一起使用,因为在这种情况下,您直接写入“下方”的同一设备,该设备也由 X 驱动程序写入。否则,您需要与 X 服务器通信,该服务器可能通过内核模式设置或卡特定驱动程序(Intel、Radeon 等)使用 DRI (/dev/dri/card0) 进行绘图,并且具有对硬件的独占访问权限。

相关内容