在 Linux 下使用 iBCS2
Linux 下的 iBCS2 模拟是一个相对较新的功能,它使您能够运行设计为在 SCO Unix 或 SVR4 等系统下运行的应用程序,并直接在运行 Linux 的机器上运行它。此功能对于源代码不可公开获得的商业应用程序最有用,因此不可能简单地将其移植到 Linux。在本文中,我将向您介绍 iBCS2,并告诉您如何在系统上安装模拟代码以运行 iBCS2 程序。未来的文章将更深入地解释一些要素。
作者:Eric Youngdale
iBCS2 引起人们兴趣的原因是,有许多商业应用程序可用于 SCO 和 SVR4,人们希望在 Linux 下运行它们。编写这些应用程序的供应商通常不愿意将其应用程序移植到像 Linux 这样的新平台,除非他们确信他们会卖出很多副本,因此不能保证 Linux 端口会被完成。通过提供 iBCS2 兼容性,我们突然有可能在 Linux 下运行数百个商业质量的应用程序。
在撰写本文时,Linux 的 iBCS2 代码仍处于 ALPHA 状态。这意味着您可能会遇到问题;某些应用程序将无法运行或会做错误的事情。这也意味着您应该熟悉内核的补丁程序。话虽如此,只有少数几个领域仍在进行工作,一旦这些完成,整个事情将变为 BETA。当您阅读本文时,这种情况可能已经发生。
术语 iBCS2 仅代表“Intel Binary Compatibility Specification 2”(英特尔二进制兼容性规范 2),并且是在 Intel 386、486 和“更高”CPU 上运行 Unix 的不同系统之间实现二进制兼容性的标准文档的名称。iBCS2 的某些部分与 POSIX 重叠,由于 Linux 符合 POSIX 标准,这意味着模拟的某些部分是微不足道的。不幸的是,Linux 和 iBCS2 也存在很大差异的地方,因此 iBCS2 模拟绝非易事。
iBCS2 模拟器主要设计为用作可加载的内核模块。这意味着当您启动内核时,模拟器将不会存在于内核的地址空间中,因此任何运行 iBCS2 应用程序的尝试都将失败。您必须运行一个特殊的程序才能将模拟器“加载”到内核的地址空间中,一旦您完成此操作,您就可以使用模拟器了。如果您愿意,您可以在使用完模块后卸载该模块以减少内存使用量,但大多数人不会费心这样做。
要在 Linux 下安装和使用 iBCS2,需要以下几种情况之一。如果您使用的 Linux 发行版已经包含 iBCS2,那么您的处境就相当不错。如果是这样,那么您可能只需找到并加载模块,然后您就可以运行 iBCS2 应用程序了。目前,您的发行版已经应用了 iBCS2 补丁的可能性很小,因此本文的其余部分将告诉您如何构建和加载模拟器。
作为先决条件,您应该运行 1.0 或 1.1 系列内核。您应该知道 1.1 内核是官方的开发内核,可能不如 1.0 内核稳定。随着开发的进行,1.1 内核也经常有补丁,因此如果您是新用户,最好还是使用 1.0 内核。如果您运行的是比 1.0 内核更旧的任何版本,您将遇到无穷无尽的困难,因此您的第一步应该是升级。如果您运行的是 1.1 内核,您应该尽可能使用最新的补丁级别,以最大程度地减少编译和安装方面的困难。
接下来,您应该获取模拟器本身的源代码。这可以通过来自 tsx-11.mit.edu 或 tsx-11 的许多镜像站点之一的匿名 ftp 获得,并且可以在目录 pub/linux/ALPHA/ibcs2 中找到。模拟器的当前版本称为 ibcs-940610.tar.gz,但在您阅读本文时,应该有更新的版本可用。获得此文件后,您需要解压缩它。大多数人将其内核源代码树放在目录 /usr/src/linux 中,我即将给出的示例都假设了这一点。
要解压缩,请使用以下命令
cd /usr/src/linux gzip -d -c path/ibcs-940610.tar.gz | tar xvf -
其中,您将通过匿名 ftp 获取的文件的实际路径替换为单词“path”。
现在您需要查看是否需要将任何补丁应用于内核的其余部分。查看目录 /usr/src/linux/ibcs/Patches,看看那里有什么。在撰写本文时,有一个用于 1.0 内核的补丁文件,但 1.1 内核不需要补丁。如果您运行的是 1.1 内核,请跳至有关 1.1 内核的部分。如果您有 1.0 内核,则应执行以下操作
cd /usr/src patch -p0 < /usr/src/linux/ibcs/Patches/kernel-1.0.pat cd /usr/src/linux make config make dep
当您运行“make config”时,它会询问您是否要在内核中使用 iBCS/ELF/COFF。如果您想将 iBCS2 用作可加载模块,则正确的答案是“N”。如果您回答“Y”,则源代码树将被配置为将 iBCS2 模拟器直接链接到内核中,但这已经很长时间没有经过测试,并且可能无法正常工作。
现在您可以实际构建模拟器了。
只需键入
cd /usr/src/linux make
这将构建内核和 iBCS2 模拟器。完成后,您将必须将内核映像安装在正确的位置,以便您可以从中启动。如果您想从软盘启动,请键入
make zdisk
您将拥有一个可启动的软盘映像。如果您直接从硬盘启动,则必须找到 lilo 程序的配置文件,并查看它希望在哪里找到内核映像。您应该将 zImage 文件复制到此位置并运行 lilo,以便正确记录此信息。如果您不确定在此步骤中要执行的操作,请小心,因为如果您做错了事情,可能会搞砸您的系统,使其无法启动。完成此操作后,您需要重新启动,以便您应用于内核的补丁在您的系统上生效。
如果您运行的是 1.1 内核,并且目录 /usr/src/linux/ibcs/Patches 中没有您需要应用于内核的补丁,那么您只需确保您运行的内核基于您已解压缩 ibcs2 源的源代码树。然后您键入
cd /usr/src/linux/ibcs make
构建模拟器。如果您在添加 iBCS2 内容之前已经运行了从当前 /usr/src/linux 源代码树构建的内核,则无需重新启动。否则,您将需要制作可启动软盘或将 zImage 文件复制到正确的位置并使用 lilo 注册新内核。
至此,您几乎完成了。应该有一个名为 /usr/src/linux/ibcs/iBCS 的文件,它是内核的可加载模块,并且可以加载。除非您的系统上已经有“insmod”程序,否则您需要获取 modutils 软件包的源代码,您可以从 tsx-11.mit.edu 的 pub/linux/sources/sbin 中获取它。在撰写本文时,该软件包称为 modutils-0.99.15,即使它很旧,它仍然可以工作。如果有更新的版本,某些路径可能已更改,因此请密切注意。您可以或多或少在任何地方解压缩它,以下命令说明了如何执行此操作
gzip -d -c modutils-0.99.15.tar.gz | tar xvf - cd modutils-0.99.15 make make install
您需要以 root 用户身份执行“make install”,因为它需要将可执行文件复制到系统目录。完成此操作后,运行 insmod 程序以加载 iBCS2 模拟器,以下命令将完成此技巧
/sbin/insmod /usr/src/linux/ibcs/iBCS
这应该将 iBCS2 模拟器加载到内核内存中。
在您第一次真正尝试使用 iBCS 之前,您需要创建一些特殊的设备文件。这些文件用于来自 SCO 系统的网络应用程序,它们用于访问本地 X 服务器。您需要运行的命令是
mknod /dev/socksys c 30 0 ln -s /dev/null /dev/X0R mknod /dev/spx c 30 1
现在您真正准备好在 Linux 系统上运行 iBCS2 应用程序了;您只需以在系统上运行任何其他程序的正常方式运行它们即可。
在有限的可用空间中,我描述了如何在您的系统上启动并运行 iBCS2。您可能会发现存在这样或那样的问题,并且 iBCS2 模拟器源代码树中存在一些文本文件,您可以使用这些文件来帮助排除系统故障。
目前还有一些模拟元素缺失。对某些类型的网络(特别是 TLI)的支持目前缺失,但人们正在努力解决这个问题,因此希望这只是暂时的限制。但是,支持基于套接字的联网。此外,某些应用程序可能需要某种类型的共享库。这是仍在进行中的工作领域之一,因此您最好的选择是简单地查看状态,方法是询问 iBCS2 频道或查看您从中获取模拟器源的 ftp 站点的目录,在一个名为 libc_s-<date>.tar.gz 的文件中,截至本文撰写时为 libc_s-940616.tar.gz。
最后,您可能希望在花钱购买软件包之前获得软件包的演示版本,您可以使用它来查看应用程序的实际运行情况。一些演示版本可通过匿名 ftp 获得;有一个 WordPerfect 的演示版本,可从 ftp.wordperfect.com 的 ftp/unix/demos/sco/sco.z 获得。此外,在 iBCS2 模拟器源代码树中有一个已知可以工作的应用程序列表,并且会定期更新。
如果您希望及时了解 iBCS2 模拟的最新进展,您可以加入开发人员用于讨论、发布公告和补丁的邮件列表。要加入,您可以发送邮件至 linux-activists-request@joker.cs.hut.fi,您应该在邮件头中或作为邮件的第一行包含以下行
X-Mn-Admin: JOIN IBCS2
在邮件头中或作为邮件的第一行。您应该收到一封回复邮件,确认您已在列表中,您应该保存该邮件,因为它还会告诉您如果将来需要如何从列表中删除。
Eric Youngdale Eric Youngdale 使用 Linux 已超过两年,并且一直积极参与内核开发。他还开发了当前的 Linux 共享库。