我目前正在编写一个供个人使用的最小 Linux 发行版,其中包含 Linux 内核和 BusyBox。我使用 QEMU 进行调试,没有像
CMake
这样奇特的构建系统,只是基本的 shell 脚本。
当我启动虚拟机时,系统目录(例如
/dev
)被安装,并进入我自己编写的用于调试过程的最小终端。它可以运行一些命令,还可以运行位于 BusyBox 文件系统的 /bin
目录中的二进制文件。
我编写的每个程序都是静态链接的,并且没有使用像
malloc
或 atoi
这样的 libc 函数,因为我没有找到将库包含在发行版中的方法。所以,我自己写了这些函数。
我希望发行版是图形化和全屏的,所以我开始使用 Linux 帧缓冲区
/dev/fb0
编写一个程序,在屏幕上显示几种颜色并退出。该程序按预期工作,但在进行一些研究时,我发现帧缓冲区很旧,不推荐。
因此,当深入研究时,我发现更好的方法是使用 Linux DRM(直接渲染管理器)和 KMS(内核模式设置)。 当关注一堆网站和教程时(我以前从未编写过 Linux 发行版),我设法编写了一个带有灰色背景和蓝色光标的程序。唯一的问题...速度很慢!如果我移动光标太快,它就无法像我预期的那样跟随。
我发现 DRM 对我来说有点太复杂了,所以我想尝试使用 SDL2,因为我发现它支持 DRM 和 KMS。但我没有找到任何有用的文章来谈论它。
所以,我想知道是否可以使用 SDL2 和 Linux DRM 创建图形程序,以及是否可以不使用 X11 或 Wayland 等显示服务器?
我遇到了与您相同的问题,并发现任天堂在其网站上发布了 SNES Classic 的 OSS 源代码。他们的 SDL 分支包含您正在寻找的内容。