Linux simple-framebuffer 未被内核检测到

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

我正在尝试让简单帧缓冲区在 Linux 中工作,以便我可以使用系统 RAM 中的一个区域作为帧缓冲区。 我在 RISCV 系统上运行内核 5.10.7。

到目前为止,我已经在 Linux 中启用了帧缓冲区支持和必要的驱动程序:

CONFIG_FB=y
CONFIG_FB_SIMPLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y 

将这些行添加到设备树中

chosen {
    #address-cells = <2>;
    #size-cells = <2>;
    ranges;
    framebuffer {
        compatible = "simple-framebuffer";
        memory-region = <&framebuffer_reserved>;
        width = <640>;
        height = <480>;
        stride = <(640 * 2)>;
        format = "r5g6b5";
    };
};

reserved-memory {

    #address-cells = <2>;
    #size-cells = <2>;
    ranges;
    framebuffer_reserved: framebuffer@A0000000 {
        compatible = "framebuffer";
        reg = <0x0 0xA0000000 0x0 (640 * 480 * 2)>;
        no-map;
    };
};

Linux 中既不出现保留内存,也不出现帧缓冲区。 当做一个

cat /proc/iomem
它返回
80200000-bfffffff : System RAM
即使理论上应该在
A0000000
处进行分割 并且不存在
/dev/fb0
设备。

linux-kernel embedded-linux framebuffer
1个回答
0
投票

这些是我的 (6.6.10) 内核 .config 中的所有 FB 设置 我怀疑你可能错过了设置 FB 驱动程序

    CONFIG_SYSFB=y
CONFIG_SYSFB_SIMPLEFB=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_FB=y
CONFIG_FB_VESA=y
CONFIG_FB_CORE=y
CONFIG_FB_NOTIFY=y
CONFIG_FB_DEVICE=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_SYS_FILLRECT=y
CONFIG_FB_SYS_COPYAREA=y
CONFIG_FB_SYS_IMAGEBLIT=y
CONFIG_FB_SYS_FOPS=y
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_IOMEM_HELPERS=y
CONFIG_FB_SYSMEM_HELPERS=y
CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y
CONFIG_FB_MODE_HELPERS=y

当我启动时,我将 vga=ask 添加到引导加载程序,并在我的例子中选择 1920x1080x16,从提供的 VESA 列出的选项中选择“w”,这会将我带入一个 cli,其中 cat /dev/random >/dev/fb0 fill屏幕上有随机彩色点。

我的内核专门用于使用帧缓冲区,并且通过集成的 initramfs,vmlinuz 只有 16MB,其中包括我的笔记本电脑的所有固件/模块。启动到framebuffer cli,其中我还安装了OpenSSH/SSL,以及framebuffer vnc。因此,我可以通过 wifi(和/或以太网)网络连接和 ssh/vnc 进入其他盒子,其中图形桌面显示在帧缓冲区上。 vnc 很常见,所以我的 GUI 桌面可以从手机、本地 PC、远程 PC 获取/提供服务,并且可以是 android、windows、linux、mac 等。一秒钟启动,可以快速进行 vnc 连接,所有这些都来自一个简单的 16MB(xz 压缩,启动时大约 50MB 的 RAM)系统。

可以使用本地 kvm/qemu 启动来提供 vnc 和 vnc 服务,但是在本地,我覆盖了一个完整 Linux 桌面 (X) 的压缩文件系统,该桌面是“无头”但运行 vncserver,我使用帧缓冲区连接到该桌面vnc。我启动该 sfs 时功能已下降,因此实际上是一个“远程”X 会话,但其中 X 相当于受限制的用户 ID,并且网络速度为本地总线速度,因此没有 vnc 流量滞后/网络瓶颈。例如,当在帧缓冲区上的 chrome 中查看全屏 YouTube 时,lo(本地网络)以 60MB/秒的速度运行,但在内部是无关紧要的。

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