我的下一台奔腾是 DEC Alpha

作者:Bryan W. Headley

随着 Linux 传播到非英特尔平台,我们不再受限于 PC 来运行我们最喜欢的 *nix 系统。我一直对过去几年看到的“每 6 个月推出一款奔腾”现象感到警惕(即,无论你买什么,在你把它带回家之前就已经过时了)。每一款都提供了渐进式的增强,但没有什么值得太兴奋的。

我的目标是找到一台能够良好运行 Windows NT 的新机器,并为我提供一个有趣的 Linux 工作平台。(嗯,总得有人研究敌人!)如果仅限于奔腾,在低于 133 MHz 的任何机器上运行 NT 都无法满足要求。坦白说,在惠普/英特尔 PA-Risc 合并芯片发布(即将推出的 P7)之前,我对奔腾系列没有任何乐趣的期望。所以,我转向了其他方向。一项快速的市场调查表明,DEC Alpha 满足我的要求,价格具有竞争力,并且性能良好。

我最终选择了 DEC 通用桌面盒 (UDB),又名 Multia。这是一个相当紧凑(2.8x12.5x12.5 英寸)的包装,其中包括 166 或 233-MHz Alpha 处理器、24MB 内存(可扩展至 128MB)、256KB 缓存、以太网、软盘驱动器、两个串行端口、一个并行端口、SCSI-2、声音和视频组件。166-MHz 型号配备一个内置的 340MB 硬盘,或者一个 520MB 硬盘。可以通过一个 PCI 卡槽和两个 PCMCIA 插槽进行扩展。视频芯片支持从 640x480 到 1280x1024 的多同步显示器,刷新率从 60 Hz 到 75 Hz;声卡是 Microsoft Sound 系统的克隆。

额外的好处

我发现内置硬盘太小了。然而,移除它是不可行的。Digital 公司安装了一个 2.5 英寸规格的驱动器,这种尺寸在笔记本电脑中很流行,但通常是 IDE 驱动器。我可以强行安装一个 3.5 英寸 SCSI-2 驱动器,但谁会想要我移除的那个驱动器呢?它还不错。我将内置驱动器用于启动分区和交换空间,以及一个外部 1GB 磁盘和一个 CD-ROM 驱动器。

Multia 配备了一个三键 PS/2 鼠标,但没有键盘。您可以获得支持 PS/2 或 PC/AT 样式键盘连接器的 UDB。选择一种键盘类型和一台标准的多同步显示器,您就可以运行了。

Alpha 主板具有 PCI 适配器。因此,您有现成的 PC 兼容适配器卡,可以与 Multia 一起使用。例如,有操纵杆适配器的驱动程序。即使 UDB 已经配备了您想要的大部分功能,也没有理由不能安装不同的视频卡、ISDN 控制器等,只要驱动程序可用。

UDB 的特别之处在于缺乏花哨的功能。Digital 为了降低价格,在没有软件或许可证的情况下销售这款机器,并且只有大约三页的“文档”——一份关于如何将外部设备连接到连接器、如何打开机箱并插入 RAM 的图文说明,一个指向 Alpha 上的 Linux 主页的指针 (www.azstartnet.com/~axplinux) 以及关于如何加入 declinux 邮件列表的信息。

感谢造成困惑

Digital 认为他们相当喜欢“Multia”这个名字。因此,这个名字既指我向您描述的 Alpha 版本,也指英特尔奔腾版本。这些盒子看起来非常相似,并且针对相同的市场。我没有看到任何将英特尔 Multia 称为 UDB 的文档,而对于 Alpha 版本,这两个名称是可以互换的。Windows NT 将该单元称为“Multia”,而 Linux FAQ 更喜欢“UDB”。所以您可以随意选择,但请确保 DEC 的人员知道您指的是哪一个。

Alpha Linux 快速介绍

这台机器似乎非常适合 Linux 和 Windows NT。事实上,DEC 看到低成本 *nix 的市场,参与了与 Linus 和互联网社区一起开发端口的工作。结果是一个 64 位 Unix,它与静态链接的 DEC Unix(以前称为 OSF-1)应用程序二进制兼容。因此,商业软件的可用性不是太大的问题。如果您需要像 Netscape 或 WordPerfect 这样的程序,请获取 DEC Unix 版本。如果是静态链接的,它应该可以毫无问题地运行。

Alpha Linux 有趣之处在于,平台特定代码的主要存储库之一保存在 gatekeeper.dec.com 上。[请参阅 Jim Paradis 在 LJ #19 中撰写的“将 Linux 移植到 DEC Alpha”——编者注] 同样有趣的是,许多平台特定代码是由 DEC 工程师编写(并共享源代码)的。

我们在内核源代码树的哪个位置?

DEC Alpha 源代码已合并回通用 Linux 版本 1.3.x。结果是,您可以访问 Linus 的主页,下载并构建带有完整 Alpha 支持的 linux-pre2.0.10。但是,(目前)不支持共享库(既不支持 QMAGIC/ZMAGIC,也不支持 ELF)。计划是转向 ELF,同时通过静态链接的二进制文件保留 DEC Unix 兼容性。

可用的 Alpha 发行版

BLADE 0.3 基于 1.3 内核;免费提供

Red Hat 2.1 1.3.57 内核;商业发行版;正在发货

Craftworks 2.1 1.3.89 内核;商业发行版;即将发货

在这些发行版中,BLADE 0.3 是最初的 稳定 发行版。gatekeeper.dec.com 上的 README 文件建议您使用商业发行版。因此,BLADE 基本上是最近的遗留代码,尽管可以免费获得。

BLADE、Red Hat 和 Craftworks 都带有您期望从基本 Linux 发行版中获得的所有必需的内核、编译器、库和实用程序。然而,商业发行版带有您期望(并获得)从其英特尔兄弟那里获得的所有“好东西”——例如编辑器、网络、X-Windows、TCL/TK 等。

一个商业发行版与另一个商业发行版的区别在于每个供应商随 CD 提供的软件包组合。安装包的易用性必须权衡考虑。对于 Alpha 和 Intel 版本,文档本质上是相同的。然而,Red Hat 和 Craftworks 都附带安装说明。Red Hat 在文档中添加了 Alpha FAQ。无论哪种方式,AXP 都没有太多独特之处需要定制文档。

我的 UDB 预装了 Windows NT 和 Linux(我订购了 Red Hat 2.1)。供应商 DCG Computers 安装了 Craftworks 2.1 包的预发布版本,以便我可以帮助他们比较和对比这两个版本。以下是我的一些发现。

发行版比较

Craftworks 产品比 Red Hat 2.1 更新;您获得的是 Linux 内核 1.3.89,而 Red Hat 的是 1.3.57。两者都相当稳定,当然,无论您使用哪个软件包,您都可以随时下载最新的内核。

DEC DC21030 显示控制器芯片(又名 TGA)内置于 Multia 中。Red Hat 2.1 没有为这款芯片提供 X 显示驱动程序,但 Craftworks 提供了。其他视频驱动程序随 Alpha 的 XFree86 端口一起提供,包括 S3、P9000 和 Mach 64(Red Hat 和 Craftworks 都有)。当 Red Hat 2.1 发布时,您必须购买 PCI 视频适配器才能在 UDP 上运行 X。在此期间,DEC 发布了 TGA 的 X 服务器,Craftworks 包含在内。Craftworks 还附带了 Lesstif,一个类似 Motif 1.2 的小部件库。

最大的均衡器是安装程序。两者都运行得相当好,但每个都有一些小的个性怪癖,会带来几分钟的烦恼。Red Hat 包会分区您的硬盘,创建交换分区 (mkswap),但随后会忘记创建 ext2 分区 (mke2fs)。幸运的是,您可以切换到第二个虚拟终端,并在继续安装过程之前处理这个遗漏。

Craftworks 安装包在强制交换分区的大小方面有些过分。他们希望您拥有 32 MB 的交换空间。这很好,但我之前使用 Red Hat 创建了一个较小的交换空间。关于小交换分区的通知/恼人提示不断弹出。它不允许我对它做任何事情,例如终止它和调整分区大小,但它非常坚持其警告。我最终不得不调出 Red Hat 的分区编辑器手动删除所有分区,然后才能继续。它可以理解空分区表,但无法处理之前错误创建的分区表。

安装程序提供的考验和磨难更多的是娱乐性。所以,问题是,我会使用哪个发行版?嗯,在我在临阵退缩并告诉您我手动合并了我喜欢的两个发行版中的东西(例如:来自 Red Hat 的 glint,来自 Craftworks 的 NYS 影子密码,Craftworks X 服务器,1.3.89 内核等)之前,让我告诉您,并非所有候选发行版都已发声。

Red Hat 计划发布 3.0.3 版本。我注意到他们有新的 X 服务器。毫无疑问,他们的 标准 软件包已更新,以匹配他们的英特尔 3.0.3 产品。

真正的考验和磨难

在 PC 上,启动 ROM 尝试读取主软盘驱动器或主硬盘的初始扇区。从该扇区引导,操作系统的其余部分被加载。这种设计相当有限,DEC 摆脱了这种无意义的做法是好消息。Multia 的 SRM 控制台加载器带有 ARC 加载器。ARC 非常酷,因为您可以配置多个操作系统(您可以在启动时从中选择);这些系统的引导扇区可以存在于任何可寻址设备的任何分区上,包括软盘或 CD-ROM。事实上,您可以将 vmlinux 放在软盘驱动器上,并将根分区放在硬盘上。这些都是好消息。

坏消息是我是一个危险的家伙。正如我提到的,我让 DCG Computers 一起安装了 Windows NT 和 Linux。不幸的是,给 NT 的空间太多了(更恰当地说,我喜欢将 2GB 的 Linux 安装到 1GB 的分区上)。所以,在那里,在拆开所有东西并启动它一个小时后,我正在重新调整分区表,并试图让 ARC 加载器了解我在做什么。好吧,我最终导致 ARC 不知道任何操作系统,分区表为空,我既无法启动 NT 也无法启动 Linux!现在到了获得深刻教训的时刻...

Craftworks 附带了软盘上的启动和根/安装分区。有关于如何重新编程 ARC 以使其理解软盘上有操作系统的说明。Red Hat 在 CD-ROM 上有这些软盘的映像,但您必须找到一种方法将这些映像下载到软盘上。一个拥有 PC 和 CD-ROM 驱动器的朋友很有用(绝对,绝对,绝对 在您完成安装后制作这些软盘的主副本)。

ARC 由微软和 DEC 编写。它的专长是从它理解的文件系统(特别是 MSDOS FAT 分区)加载操作系统。一旦您指向一个,您就告诉它要运行哪个可执行文件才能加载所需的操作系统。对于 Windows NT,这将是 OSLOADER.EXE。对于 Linux,这将是 MILO。但是,这里的要求是您的加载程序必须在 FAT 文件系统上找到(它可以位于任何子目录中,给定您想要的任何名称)。让我再增加一些乐趣,告诉您我最初收到的 UDP 没有 Craftworks CD-ROM 和启动软盘(它们在下周才到)。哦,别忘了三页文档:没有一张图片告诉我关于 ARC 我想知道的东西。

值得庆幸的是,我有 Windows NT,并且 ARC 的编写是为了简化 NT 支持。有一个名为“安装 NT”的菜单选项,它将从 CD-ROM 安装。微软关于任何非英特尔平台的文档有点幽默,说“有关您平台的详细安装说明,请参阅供应商的文档。”但是,然后它说要运行 cd:\system\setupldr。System,system;什么是 system?!?

值得庆幸的是,奔腾就在附近,快速浏览 NT 的 CD-ROM 的目录后发现,有几个目录以 risc 处理器命名,可以在其中找到 setupldr。其中之一是“alpha”...(此处插入“D'Oh!”)。

我飞快地开始了。Setupldr 允许安装 NT,这给了我一个不错的 FAT 分区。在 Windows NT 分区上,我放置了一个 MILO 副本。一个有趣的星期六,由于结果... 我把它延长到了星期日凌晨 4 点

那么,我可以将 Red Hat CD 移动到奔腾并让它制作启动软盘吗?是的,但是如果我仍然以 Alpha 为中心,我就注定要失败。此外,我必须学习 ARC,并期望让 Windows NT 自行安装能够充分教育我以度过难关。事实确实如此;但是如果您在没有任何背景知识的情况下看待这样的事情,它看起来很可怕

LOADIDENTIFIER=Linux
SYSTEMPARTITION=multi(0)disk(0)fdisk(0)
OSLOADER=multi(0)disk(0)fdisk(0)\linload.exe
OSLOADPARTITION=multi(0)disk(0)fdisk(0)
OSLOADFILENAME=\milo
OSLOADOPTIONS=

如果我查看 SYSTEMPARTITION,它告诉我系统分区可以在 Multia 上找到,在软盘控制器上,在软盘 0 上。这与我当前的 Linux 设置相反

LOADIDENTIFIER=Linux
SYSTEMPARTITION=scsi(0)disk(0)rdisk(0)partition(1)
OSLOADER=scsi(0)disk(0)rdisk(0)partition(1)\linload.exe
OSLOADPARTITION=scsi(0)disk(0)rdisk(0)partition(1)
OSLOADFILENAME=\udb.arc
OSLOADOPTIONS=boot sdb1:vmlinux.gz root=/dev/sdb1

它说我应该转到 SCSI 控制器,SCSI 硬盘,原始硬盘 0,分区 1。您是否注意到这看起来像一个分层文件系统?事实确实如此,只不过它描述的是获取启动代码的控制器/硬件路径。

暴风雨后的平静

当然,我造成了自己的灾难,但这使得修复工作更有意义(您有那种解脱感)。在度过了第一个有趣的周末之后,我还能做什么来消遣呢?移植一些我最喜欢的实用程序会很有趣。Red Hat 和 Craftworks 已经移植了 Apache Web 服务器和浏览器,这在一定程度上减少了乐趣,但我仍然可以通过移植其他东西来获得一些乐趣。所以,下一个问题是,“您需要知道什么才能将代码移植到 Alpha Linux?”

移植提示

使用 IMakefile 的 X-Windows 应用程序基本上可以开箱即用。使用 autoconf/configure 来确定它正在运行什么系统的 GNU 软件往往会感到困惑。它合成的机器配置字符串看起来像 alpha-unknown-linuxaout。这很令人困惑,因为它是一个 Alpha,它既没有运行 DEC Unix,也没有在 Intel 系统上运行 Linux。该怎么办?嗯,我通常在 configure 中放入以下代码段

alpha-dec-osf3* )
    machine=alpha opsys=decosf3-1
  ;;
  ## We're Alpha Linux
  alpha-*-linux* )
    machine=alpha_linux opsys=linux_axp
 ;;

  ## Altos 3068
  m68*-altos-sysv* )
    machine=altos opsys=usg5-2
  ;;

但这意味着我必须编写一个 ./src/m/alpha_linux.h(我将通过混合 alpha.h 并删除任何 cd DEC Unix 特定的内容来制作),以及 ./src/s/linux_axp.h(这将从 linux.h 制作,减去关于如何制作共享库的说明)。这些都不太困难。随着 autoconf 的更新以及开发人员开始使用新版本,大多数软件的更高版本将附带预构建的配置文件。

您遇到的另一个问题是,一些公开可用的程序假定为 32 位地址和 32 位整数。Alpha 的 Linux 是一个 64 位操作系统,具有 64 位地址。通常,这会提供关于将 32 位偏移量添加到 64 位指针的无害警告。

然后是一些程序试图覆盖操作系统调用的定义。已标准化为采用 size_t 等参数的系统调用(但正在为无符号整数重新定义)将导致编译器发出警告。

然而,真正阴险的事情是那些不考虑可移植性而进行位操作的程序。一般来说,我已经学会对任何没有使用 autoconf/IMakefile 打包、仅在一个平台上运行的程序(例如,它在 Linux 上运行;如果您告诉我们它是否在 Solaris、BSD、HPUX 等上运行)保持怀疑。

未来一片光明

许多软件包都可以开箱即用。随着 ELF 支持的到来,可以将 Java JDK 移植过来。Sun、HP 和其他知名公司正在向市场发布他们的 64 位处理器。当每个人都在争论 Unix 的 64 位标准将是什么时,我们已经到达那里,并已转向更有趣的项目。

Bryan W. Headley (bheadley@interaccess.com) 自 1978 年以来一直从事 Unix 工作,除了被那个入侵者 MS-DOS 中断了一段时间。白天是 Unix 应用程序开发人员,晚上他变成了一名 Linux 黑客。没有他觉得不值得玩的编译器或内核。

加载 Disqus 评论