Oberon/A2
UnixAOS 和 A2 可以安装并使用在裸机 PC 上,包括被认为对商业操作系统过时的台式机和笔记本电脑。这些 Oberon 风格的系统也可以作为 ARM、MS Windows 和 类 Unix 系统上的子系统运行。
安装 UnixAOS 的原始说明[1] 位于 http://user.informatik.uni-bremen.de/fld/UnixAos/Readme.txt。安装文件可从 http://user.informatik.uni-bremen.de/fld/UnixAos/ 获取。
shell 脚本安装程序假定主机中存在 sys 组。对于缺少此组的系统,脚本很容易进行调整。例如,以下行:
chgrp -R sys ${aosdir}
可以更改为以下内容。
chgrp -R bin ${aosdir}
UnixAOS 工作目录可以在可移动闪存存储器上具有 ext2 或 FAT 文件系统。
系统的默认目录为 /usr/aos。默认情况下,install.UnixAos 安装启动脚本 /usr/bin/aos。aos 脚本在启动 aos.{solaris,linux,darwin} 之前调整操作系统环境。如 Readme.txt 中所述,UnixAos 可以使用以下两个命令启动。[2]
cd <myWorkingDirectory> aos
<myWorkingDirectory> 必须替换为特定的目录名称。
系统的默认目录为 /usr/local/A2,默认启动脚本为 /usr/local/bin/a2。A2 可以使用以下命令启动。
cd <myWorkingDirectory> a2
与早期版本一样,<myWorkingDirectory> 代表特定的目录名称。
UnixAos 由 Configuration.XML 配置。Oberon 子系统由 Oberon.Text 配置;请参考 ETH Oberon 页面 和原始的 betadocu 页面。
如果工作目录位于可移动存储器上,则 myaos 脚本 允许存储设备在配置不同的多台机器上使用。当存储设备尚未挂载时,会作为预防措施应用 e2fsck。[3] 如果文件系统已损坏,e2fsck 通常会完成修复。myaos 脚本的合理位置是用户的 home 目录。对于每个主机,在工作目录中创建文件 Configuration.<host>.XML。要使用 Oberon 子系统,请创建 Oberon.<host>.Text。这可以通过复制安装的文件并编辑副本完成。例如,名为 blunder 的主机需要 Configuration.blunder.XML 用于 A2 以及 Oberon.blunder.Text 用于 Oberon 子系统。XML 文件包含 ASCII 文本,可以使用 Linux 中的 Geany、gedit 或 mousepad,或者 A2 中的 Edit > Text 进行编辑。安装的 Oberon.Text 包含一些二进制信息。[4] 在 ETH Oberon 中,它通常会使用 Edit 或 ET 进行编辑。不过,纯文本也可以工作。使用 ET.StoreChar 保存 Oberon.Text 后,可以使用 Linux 中的 Mousepad 或 Gedit、MS Windows 中的 Notepad 以及 MacOS 中的 Atom 进行编辑。这可以解决文件名 Oberon.<Host>.Text 超过 Oberon 系统 32 个字符限制的难题。myaos 将 Configuration.blunder.XML 复制到 Configuration.XML 以及 Oberon.blunder.Text 复制到 Oberon.Text,然后再启动 UnixAos。
几个平台的源代码和可执行文件的原始仓库是基于 Apache Subversion (SVN) 的。基于 Git 的当代 仓库 从 SVN 版本 10270 的文件开始。虽然 Git 存档是当前的,但 SVN 的说明 仍然可用。
仓库提供最新版本并允许持续更新。从用户的角度来看,此方法基于仓库的本地副本。本地副本是通过从 ETHZ 克隆创建的。在本地副本中,可以为目标平台(包括裸机 PC)构建 A2 可执行文件。Windows、Linux(Intel 32 位和 64 位)和 ARM 的子目录中的可执行文件可用。仓库将占用 0.5+ GB,具体取决于是否包含可执行文件。
与 ETHZ 无关的用户可以获取 Github 帐户。Github 登录 将允许访问包括 问题 在内的设施。
维基百科文章 提供了有用的概述。 官方文档 可作为 参考手册 提供,包括手册页和 Pro Git 书籍。 git-lfs 的文档 单独提供。
每个 Linux 都有一个 Git 安装程序,各种程序的流程 在 Git 网站上进行了总结。还提供特定版本的发布信息。对于 Debian Linux,请参阅 UsingGit wiki 页面。如果 apt 可用,以下命令就足够了。
# apt install git # apt install git-lfs
存储库目录的名称是任意的。“A2” 用于此示例。ls 命令可以避免名称冲突。
# ls -ld A2 drwxr-xr-x 12 me mygroup 4096 Dec 5 09:22 A2
创建本地存储库。
# git clone https://gitlab.inf.ethz.ch/felixf/oberon.git A2
从源代码更新本地存储库,主分支。
# git pull origin main
在 MS Windows 中检查您拥有的内容。
dir /ad *
在 Linux 中检查您拥有的内容。
ls -d *
输出应与以下类似。
AosVM LanguageReport Linux32 source UnixAos Win64 ARM license.txt Linux64 tools Win32 WinAos
使用 git-lfs 跟踪一些 zip 存档。
# cd A2 # git lfs track "Linux*.zip" # git add .gitattributes
检查哪些大文件正在跟踪。
# git lfs track Listing tracked patterns ARM/ARM.A2/*.bin (ARM/ARM.A2/.gitattributes) Linux32.zip (.gitattributes) Linux64.zip (.gitattributes) LinuxARM.zip (.gitattributes) Win32.zip (.gitattributes) Win64.zip (.gitattributes) *.bin (.gitattributes) Linux*.zip (.gitattributes) Listing excluded patterns
检索特定的存档文件。
# git lfs fetch Linux64.zip fetch: Fetching reference refs/heads/main
验证 zip 存档是否存在。
# ls -ld Linux64* -rw-r--r-- 1 root root 23712521 Dec 5 09:19 Linux64.zip
解压缩。
# unzip Linux64 Archive: Linux64.zip creating: Linux64/ creating: Linux64/work/ inflating: Linux64/oberon.ini creating: Linux64/bin/ inflating: Linux64/Kernel.GofU inflating: Linux64/OpenTypeScan.SymU inflating: ...
执行启动脚本。
# Linux64/a2.sh
或
# cd Linux64 ; ./a2.sh
a2.sh 的内容可以通过 "cat a2.sh" 或编辑器显示。该脚本执行两个操作。“cd `dirname $0`" 切换到 a2.sh 所在的目录;例如 ~/A2/Linux64。然后 "./oberon run a2.txt" 执行 Linux 命令 "oberon",参数为 "run" 和 "a2.txt"。a2.txt 包含 A2 命令,可以通过 cat 和编辑器显示。第一个命令执行 oberon.ini 中的命令,包括
Files.SetWorkPath work~
在已安装的系统中,工作区是空的。可以根据用户的喜好编辑 oberon.ini。
Files.SetWorkPath /home/me/myWorkingDirectory~
Git 可直接从 官方网站 获取。
在 A2 中的源代码中,系统和 Oberon 子系统之间的区别被称为上下文。在源代码模块的文本中,根据 Oberon (2019) 语言报告 的“5 模块”部分确定上下文。
Module := 'MODULE' [TemplateParameters] Identifier 'IN' Identifier ';' ...
在模块范围内,导入模块的名称可以使用 别名,这种语法也适用于上面提到的部分。
Import = Identifier [':=' Identifier] ...
Unix.Oberon.NetSystem.Mod 说明了上下文和别名。
MODULE NetSystem IN Oberon; IMPORT S := SYSTEM, IP IN A2, DNS := DNS IN A2, TCP := TCP IN A2, UDP := UDP IN A2, Texts, Oberon, Input, Fonts, Strings, Out;
编译、加载、链接和相关的术语在 https://people.inf.ethz.ch/felixf/pdfs/2011_UnifiedStaticDynamicLoading.pdf 中讨论。与所有 Oberon 系统一样,指定模块的文件名可以与模块的名称不同。这些文件名扩展在 A2 中是惯例。
目标系统 | 通用[5] 对象文件名扩展 | 符号文件名扩展 |
---|---|---|
Unix,x86,32 位 | .GofU | .SymU |
Unix,AMD64,64 位 | .GofUu | .SymUu |
Windows,x86,32 位 | .GofW | .SymW |
Windows,AMD64,64 位 | .GofWw | .SymWw |
ARM,32 位[6] | .GofA | .SymA |
ARM,64 位 | .GofAa | .SymAa |
对象和符号文件名包含上下文,上下文与模块名称之间用减号分隔。减号不能用作 Oberon 中的有效名称。因此,Oberon 系统模块的对象和符号文件分别命名为 Oberon-System.GofU 和 Oberon-System.SymU。
如果 A2 存储库根据上面的说明就位,则 A2 可以运行。
识别支持的体系结构。
cd <somewhere>/A2/
在 MS Windows 中。
dir /ad *
在 Linux 中。
ls -d *
输出应与以下类似。
AosVM LanguageReport Linux32 source UnixAos Win64 ARM license.txt Linux64 tools Win32 WinAos
查看启动过程。在 MS Windows 中。
dir /ad Win32/*
在 Linux 64 中。
ls -ld Linux64/*
oberon 文件必须可执行。执行启动脚本。适用于运行 MS Windows 的 32 位机器。
./Win32/a2.bat
适用于运行 Linux 的 64 位机器。
./Linux64/a2.sh
或
cd Linux64 ; ./a2.sh
应出现右侧的窗口。
oberon.ini 包含 A2 命令,包括
Files.SetWorkPath work~
在已安装的系统中,工作区是空的。根据工作目录的偏好编辑 oberon.ini。例如
Files.SetWorkPath /home/me/myWorkingDirectory~
各种文档和应用程序可通过 A2 显示屏左下角的菜单获得。注意演示和文档 > 程序演示。
在目标系统、本地主机或外部系统中,安装 SSH 服务器。这是一种可能性。
sudo apt install openssh-server
在 A2 菜单中调用工具 > 安全外壳。对于主机,指定 "localhost" 或 "127.0.0.1"(不带引号)或外部机器的名称或地址。指定您的用户 ID。单击连接。在提示时提供您的密码。
使用 IMAP 的邮件客户端位于应用程序 > 邮件客户端。Oberon 子系统有 Mail.Panel 支持 POP、POP3 和 SMTP,ETH Oberon 的说明和说明 适用。
在 A2 屏幕的左下角,菜单工具 > Oberon 和开发 > Oberon 全屏允许交互式启动 Oberon 子系统。
子系统也可以通过 Configuration.XML 的自动启动部分中的命令或命令打开。在 UnixAos,修订版 4929 中,Configuration.XML 中有这些行。
<Section name="Autostart"> ... <Setting name="OberonDisplay" value="OberonDisplay.Install Oberon 1100x704 0 74 ~"/> <Setting name="OberonStart" value="Oberon.Call System.Init Oberon"/>
这在更新的版本中[7]。
<Section name="Autostart"> ... <Setting name="Start an Oberon" value="Oberon.Start Oberon 1100x704 0 74 ~"/>
尺寸 1100x704 可根据需要调整,以便在查看器中获得文本的最佳比例。如果通过鼠标抓住右下角拉伸 Oberon 窗口,则文本与查看器的比例会保持不变。
鼠标的使用方式不寻常,但效率很高。学习使用鼠标绝对值得花费一小点时间。拥有三个按钮或两个按钮和滚轮的鼠标几乎是必不可少的。<Esc> 键用于中断任务。例如,它可以中断长时间运行的 FTP.GetFiles。<F1> 设置 * 标记。<F2> 清除所有标记。如果意外按下鼠标按钮,则在释放任何按钮之前一起按下的所有鼠标按钮都不会生效。有关鼠标和键盘输入和使用方式的完整详细信息,请参阅 鼠标支持、鼠标教程 和 键盘支持 页面。
Telnet 是一种不安全的协议,但它在 Oberon 子系统中提供了一个主机控制台。ETH Oberon 说明 适用于 Oberon 子系统。
与邮件服务器一样,新闻服务器现在也需要身份验证。因此,需要对 NetSystem 和 News 模块进行修订以支持身份验证。编译修订后的模块。
TextDesc 是 Objects.ObjDesc 的扩展。添加到 TextDesc 中的字段与从 ObjDesc 继承的字段不同,它们具有不同的背景颜色。
类型 | 字段的 TextDesc |
字段类型 | 注释 |
---|---|---|---|
Texts.Text,指向 Texts.TextDesc 的指针 | stamp | LONGINT | 整数 |
dlink | Objects.Object | 指针 | |
slink | Objects.Object | 指针 | |
lib | Objects.Library | 指针 | |
ref | INTEGER | ||
handle | Objects.Handler | 指针 | |
len | LONGINT | 文本长度。 | |
obs | Objects.Library | 指针 | |
trailer | Texts.Piece | 指向 哨兵节点 的指针,该节点位于片段列表中。 | |
org | LONGINT | 最后一个找到的片段中第一个字符的偏移量,在 [0,len) 中。 | |
pce | Texts.Piece | 最后找到的片段。 |
类型 | LibDesc 的字段 | 字段类型 | 注释 |
---|---|---|---|
Objects.Library,指向 LibDesc 的指针 | next | Objects.Library | 指针 |
ind | Objects.Index | 指针 | |
f | Files.File | 指针 | |
R | Files.Rider | 指针 | |
name | Objects.Name | ||
dict | Objects.Dictionary | 指针 | |
maxref | INTEGER | ||
GName | POINTER |
类型 | PieceDesc 的字段 | 字段类型 | 注释 |
---|---|---|---|
Texts.Piece,指向 Texts.PieceDesc 的指针 | f | Files.File | 指针 |
off | LONGINT | 整数 | |
len | LONGINT | ||
obj | Objects.Object | 指针 | |
lib | Objects.Library | 指针 | |
ref | INTEGER | ||
col | SHORTINT | ||
voff | SHORTINT | ||
prev | Piece | 指针 | |
next | Piece | 指针 |
A2 中大约 2000 个源代码的示例。
当代 Firefox 浏览器尝试从 扩展名 推断“内容类型”。默认情况下,Firefox 错误地推断出源文件 *.Mod 包含“Amiga SoundTracker 音频”,并且无法打开它。通过调整 Firefox 与“内容类型”关联的“操作”可以解决此问题。打开 汉堡菜单 > 设置 > 常规 > 应用程序。对于“Amiga SoundTracker 音频”,选择一个编辑器,例如 /usr/bin/mousepad 或 /usr/bin/gedit。A2 中的大多数源代码已转换为 纯 ASCII 文本;一些仍然是 Oberon 文本。Gedit 可以打开所有这些。Mousepad 和其他几个编辑器无法打开 Oberon 文本。“纯文本文档”的内容类型也应设置为所选编辑器。通过这些调整,Firefox 应该可以打开存储库中的大部分文件。
在某些情况下,用户可能无法找到浏览器配置来打开存储库中的文件。无论如何,浏览器应该打开 Wikibook 复制品。
- ↑ Git 存储库(后面有描述)是一种更近期的安装和版本跟踪方法。
- ↑ 类 Unix 系统中的命令行前缀是用户可配置的,并且可以配置为空字符串。为简单起见,此处显示的大多数命令中都省略了前缀。
- ↑ 如果在系统关闭之前未卸载文件系统,则文件系统可能会损坏。目录也可能因存储介质的自然退化而损坏。如果文件系统完好无损,则 e2fsck 的执行时间可以忽略不计。
- ↑ 请参阅 Oberon/Text。
- ↑ “通用”是指加载器和链接器适用于所有目标系统,与语言和运行时系统的更改无关。
- ↑ 允许 A2 在 树莓派 上使用。
- ↑ Oberon 子系统使用 MenuPage30.XML 启动。从两个命令更改为一个命令的更改由
svn diff -r 5253:5254 .../MenuPage30.XML
报告。 - ↑ 在某些情况下,Wikibook 复制品与 ETHZ 存储库中的最新文件不同。为了进行准确的比较,请使用文件比较器;Oberon 中的 Diff.Do,Linux 中的 comm。一些源代码有讨论页面。例如,Oberon.Mail.Mod 讨论。
- ↑ 执行
BootManager.Split BootManager.Bin
命令将 BootManager.Bin 分割成 BootManagerMBR.Bin 和 BootManagerTail.Bin。有关更多详细信息,请参阅 André Fischer 的 说明文档。