Loko Scheme 既可以在现有操作系统内核下运行 (目前支持 Linux 和 NetBSD),也可以在硬件虚拟机下运行, 或者直接在裸硬件上运行。
loko 二进制文件是一个静态链接的 ELF 二进制文件, 内核可以直接加载。
Loko 不带有内置的行编辑器。在运行 Loko 时
使用 rlwrap 会很方便:rlwrap loko。rlwrap 程序为
任何程序添加 readline 功能,提供行编辑和历史记录。
Loko 使用环境变量 LOKO_LIBRARY_PATH 来查找
库。这是一个冒号分隔的目录列表。如果你
使用包管理器 Akku,那么在激活项目环境时
此变量会被设置。默认的文件扩展名列表
是 .loko.sls、.sls 和 .sld。可以通过
设置 LOKO_LIBRARY_FILE_EXTENSIONS 来更改它们。
R6RS 顶层程序可以从命令行通过
loko --program program.sps 来运行。
loko 二进制文件也可以以 scheme-script 的名称 安装。如果以此名称调用,它将加载一个 Scheme 脚本, 如 R6RS 非规范性附录所述。通常 这样使用:
#!/usr/bin/env scheme-script (import (rnrs)) (display "Hello, world!\n")
通过将这样的文件标记为可执行,系统会将其交给 scheme-script,然后将其作为 Scheme 顶层 程序运行。但 scheme-script 这个名称通常由 alternatives 系统处理,因此可能是另一个 Scheme 运行该脚本。
此类脚本也可以编译为可以直接运行的静态二进制文件。 See 编译程序。
Loko 可以在虚拟机内运行(例如 KVM、QEMU 等),前提是 "硬件"支持对齐检查。如果你看到类似 "……系统不支持 #AC"的消息,则说明不支持。
你的模拟器可能仍然通过命令行选项以不明显的方式 提供此功能。例如,QEMU(在 Windows 主机上)需要以下选项:
qemu-system-x86_64.exe -accel whpx ...
对于高级用例,也可以在串行端口上获得 repl:
qemu-system-x86_64 -enable-kvm -kernel loko -m 1024 -serial stdio
没有回显或行编辑,但作为 Emacs 的 Inferior Scheme
运行良好。你也可以尝试 rlwrap -a。
如果你使用此命令创建一个脚本,那么可以轻松地将其作为 例如 Emacs 中的"Inferior Scheme"运行。还有一些你可以 尝试的附加选项:
-initrd filename1,filename2,etc 将文件添加到 /boot。
-append LOKO_LIBRARY_PATH=/boot 设置环境变量。
-- 之后添加命令行参数,使用 -append 传递它们,
例如 -append 'VAR=abc -- --program foo.sps'。
有关更多示例,请参阅源代码发行版中的 samples 目录。
裸金属上的 Loko 还没有一个足够的用户界面。 在引导期间,文本控制台上有基本的日志输出。这 可以被重定向,see 调试日志。
第一个用户进程将附加到 COM1 串行端口 (115200, 8n1)。这足以用于开发,直到有 网络支持为止。loko 程序的第一个进程是一个 repl, 但如果你编译了一个程序,那么它将是你的顶层程序。
loko 二进制文件应该适用于任何 Multiboot 引导加载器, 例如 GRUB 2。请参阅下面的菜单项示例。
如果你的硬件支持,可以进行网络引导。它已经 在 GRUB 2 上测试过,也应该可以在 PXELINUX 上使用。
你需要在网络的 DHCP 服务器中添加一个条目, 并且需要一台可以安装 TFTP 服务器(如 tftpd-hpa)的计算机。
grub-mknetdir --net-directory /tftpboot
TFTP 服务器可能提供另一个目录,例如 /srv/tftp。
menuentry "Loko Scheme" {
multiboot /loko loko
}
你还可以包含将在 /boot 中可用的文件:
menuentry "Loko Scheme with foo library" {
multiboot /loko loko LOKO_LIBRARY_PATH=/boot
module /foo.sls foo.sls
}
或者在解释器中启动一个程序:
menuentry "Hello world" {
multiboot /loko loko -- --program /boot/hello.sps
module /hello.sps hello.sps
}
host darkstar {
hardware ethernet 00:11:22:33:44:55;
filename "boot/grub/i386-pc/core.0";
next-server 192.168.0.2;
}
硬件地址必须更改为用于网络引导的接口的 MAC 地址(将运行 Loko 的机器)。服务器地址 是 TFTP 服务器的地址。
Loko 可以在 Docker 容器中运行。有时不需要在 容器中提供任何其他文件;Loko Scheme 是 自给自足的。
提供了以下 Docker 镜像: