仅运行NES模拟器的内核
摘要
一个旨在无需任何操作系统的情况下运行NES模拟器的最小化内核,并附带像Mandelbrot分形可视化这样的额外程序。
查看缓存全文
缓存时间: 2026/08/15 09:41
vmartinv/nek
来源:https://github.com/vmartinv/nek
简介
任天堂娱乐系统内核 (Nintendo Entertainment Kernel) 是一个非常基础的内核,仅包含运行 NES 模拟器所需的最低限度功能。这意味着它可以无需任何操作系统即可运行。它没有分页、没有用户空间,也没有任何形式的保护机制。一次只能运行一个程序。该程序被嵌入内核中,这意味着程序的代码与内核一起编译。
截图
alt 主屏幕
alt 超级马里奥兄弟
构建
您应使用 make 并指定交叉编译器路径:
PATH=/path/to/crosscompiler/bin:$PATH make kernel program=emulador
如果没有错误,kernel.elf 文件应位于 bin 文件夹中。
示例
除了 “emulador” 外,还有三个可运行的程序:
- mandelbrot(展示可交互的分形图形)
- paleta(展示 NES 可用颜色)
- corazon(使用数学函数制作的心形动画)
所有程序均可通过 make 与内核一起编译。
例如:make program=examples/mandelbrot
安装
您可以将 kernel.elf 复制到 /boot/,并在 /etc/grub.d/40_custom 中添加如下条目:
menuentry “nek” {
multiboot /boot/kernel.elf module /boot/initrd.img
}
请记得更新配置文件:
sudo grub-mkconfig -o /boot/grub/grub.cfg
测试
Makefile 应使用磁盘镜像 disk.img 运行 QEMU。必须已在挂载文件夹中为该文件设置环回设备。
依赖项
- i686 交叉编译器(C 和 ASM),例如 GCC 和 nasm
- GRUB2(可选):生成 .iso(光盘镜像)
- QEMU(可选):用于模拟
- Doxygen 和 Graphviz(可选):用于生成文档
- grub-mkrescue(可选):用于生成可启动光盘镜像(.iso)
启动调用栈
GRUB(multiboot 标准)
kernel/arch/x86/init/boot.s <– 调用 C 代码,初始化栈
kernel_entry()(位于 kernel/arch/x86/init/kernel_entry.c)<– 基础系统初始化
kmain()(位于 kernel/kmain.c)<— 启动部分服务
main()(位于 program/main.(c|cpp))<— 主程序
目录结构
- kernel 文件夹包含所有与内核相关的文件
- kernel/arch 存放依赖于架构的代码
- kernel/fs 文件系统(当前仅实现了 VFS)
- fdlibm:从网络下载的数学库
- util/specs:一些有用的文档
- informe:大学报告(西班牙语)
- iso:包含用于生成内核 .iso 的少量文件
- util:包含生成 initrd 的程序及其他一些工具
- util/fuente:用于生成控制台字体的工具/文件
相似文章
TinyNES 评测 – 一款超级小众的 NES 主机
TinyNES 评测,一款小众的开源 NES 主机,使用原始 CPU/PPU 芯片搭配现代组件,以获得更清晰的视频/音频,但仅限于复合输出。
一个多功能的 PDP-11/70 模拟器
一篇关于 “Kek” 的文章,这是一个多功能的 PDP-11/70 模拟器,可从 Linux 到 Teensy 4.1 和 ESP32 等微控制器的平台上运行,能够运行多种 Unix 版本。
裸启动Linux
本文介绍如何创建一个运行单进程的最小化Linux启动,精简通常的initramfs,使启动时间小于一秒。
展示 HN: Kern – 容器与资源运行时,1.5 MB 二进制文件,无守护进程
Kern 是一个极简、快速的容器与资源运行时,在一个 1.52 MB 的二进制文件中提供无根沙箱和资源管理,无需守护进程。
浏览器标签中的Windows内核,第一部分:冷启动、快速启动与四兆字节
本文介绍了 nanokrnl(一个用 Rust 编写的 64 位 Windows 内核)和 nanox(一个 65KB 的 WebAssembly 模拟器),后者可直接在浏览器中以长模式启动该内核,仅需约四兆字节即可运行一个操作系统。