IBM 3270 显示系统支持

本文件描述了支持 IBM 3270 设备本地通道连接的驱动程序。它由三个部分组成

  • 简介

  • 安装

  • 操作

简介

本文介绍了在 Linux/390 下安装和操作 3270 设备。3270 设备是一种块模式的行列终端,我确信在二三十年前,IBM 及其克隆厂商售出了数以亿计的此类设备。

你的公司或组织里可能就有 3270 设备而你却不知道。如果你正在使用 VM-ESA 操作系统,请使用命令“DEF GRAF <hex-address>”为你的虚拟机定义一个 3270。本文假设你将使用以下 CP/CMS 命令定义四个 3270 设备

  • DEF GRAF 620

  • DEF GRAF 621

  • DEF GRAF 622

  • DEF GRAF 623

来自 VM-ESA 的网络连接允许你使用从 PC 或工作站的 xterm 窗口启动的 x3270、tn3270 或其他 3270 模拟器。通过 DEF GRAF 命令、诸如 xterm 的应用程序以及这个 Linux-390 3270 驱动程序,你就拥有了与 Linux 主机交互的另一种方式。

本文涵盖了驱动程序的安装以及拨入的 x3270 的操作。

安装

你可以通过安装补丁、构建内核以及运行配置脚本(位于本目录中的 config3270.sh)来安装驱动程序。

警告:如果你正在使用 3270 控制台支持,每当更改控制台地址时(例如通过使用 silo 的 /boot/parmfile 中的 condev= 参数),你都必须重新运行配置脚本。更准确地说,每当你的 3270 设备集合(包括作为控制台的 3270)相互之间的子通道标识符发生变化时,你都应重新运行配置脚本。在运行配置脚本及其生成的 /tmp/mkdev3270 后,请尽快执行 ReIPL。

如果你选择将 tub3270 制作成模块,则需要向 /etc/modprobe.d/ 下的配置文件中添加一行。如果你在 VM 虚拟机上工作,可以使用 DEF GRAF 来定义虚拟 3270 设备。

你可以生成 3270 和 3215 控制台支持,或其中之一,亦或两者都不生成。如果你两者都生成,VM 下的控制台类型不会改变。请使用 #CP Q TERM 查看当前的控制台类型。使用 #CP TERM CONMODE 3270 将其更改为 3270。如果你仅生成 3270 控制台支持,那么如果你的控制台是 3215,驱动程序将在引导时自动将其转换为 3270。

简而言之,步骤如下

  1. 安装 tub3270 补丁

  2. (如果是模块)向 /etc/modprobe.d/*.conf 中的文件添加一行

  3. (如果是 VM)使用 DEF GRAF 定义设备

  4. 重新启动

  5. 配置

为测试一切是否正常工作(假设使用 VM 和 x3270):

  1. 调出一个 x3270 窗口。

  2. 在该窗口中使用 DIAL 命令。

  3. 你应该会立即看到 Linux 登录屏幕。

以下是详细的安装步骤

1. 3270 驱动程序是官方 Linux 内核源码的一部分。使用内核源码和任何必要的补丁构建源码树。然后执行

make oldconfig
(If you wish to disable 3215 console support, edit
.config; change CONFIG_TN3215's value to "n";
and rerun "make oldconfig".)
make image
make modules
make modules_install

2. (仅当将 tub3270 配置为模块时执行此步骤。)向文件 /etc/modprobe.d/*.conf 中添加一行,以便在需要时自动加载驱动程序。添加此行后,引导完成后你将立即在 3270 上看到登录提示(或者对于模拟的 3270,在使用命令“DIAL <vmguestname>”拨入你的 vm 客户机后立即看到)。由于行模式的主设备号是 227,因此要添加的行应为

alias char-major-227 tub3270

3. 如果尚未定义,请为你的 vm 客户机定义图形设备。在重新启动(reipl)之前定义它们

  • DEFINE GRAF 620

  • DEFINE GRAF 621

  • DEFINE GRAF 622

  • DEFINE GRAF 623

4. 重新启动。重启过程会扫描硬件设备(包括 3270),这使得加载后的 tub3270 驱动程序能够正确响应下一步的配置请求。如果你选择了 3270 控制台支持,你的控制台现在将表现为 3270,而不是 3215。

5. 运行 3270 配置脚本 config3270.sh。它与本文档在同一个目录 Documentation/arch/s390 中。检查它生成的输出脚本 /tmp/mkdev3270,然后运行该脚本。这将创建必要的字符特殊设备文件,并对 /etc/inittab 进行必要的修改。

然后通过带 q 操作数的 telinit 命令通知 /sbin/init,/etc/inittab 已更改

cd Documentation/arch/s390
sh config3270.sh
sh /tmp/mkdev3270
telinit q

对于初次安装,这应该就足够了。如果你的 3270 配置发生了变化并且正在重复使用 config3270,你应该遵循以下步骤

Change 3270 configuration
Reboot
Run config3270 and /tmp/mkdev3270
Reboot

以下是详细的测试步骤

1. 调出一个 x3270 窗口,或使用实际的硬件 3278 或 3279,或者使用你选择的 3270 模拟器。你将在你的 PC 或工作站上运行该模拟器。例如,你将使用命令

x3270 vm-esa-domain-name &

如果你想要一个具有 43 行 80 列的 3278 模型 4(默认型号数字)。该驱动程序未利用扩展属性。

你现在看到的屏幕应该包含一个 VM 徽标,底部附近有输入行。使用 TAB 键移动到底部的行,该行可能标有 “COMMAND ===>”。

2. 使用 DIAL 命令而不是 LOGIN 命令来连接你用 DEF GRAF 命令定义的虚拟 3270 之一

dial my-vm-guest-name

3. 你应该会立即看到来自 Linux-390 操作系统的登录提示。如果没有发生这种情况,你将会看到“DIALED TO my-vm-guest-name 0620”这一行。

排错方法:执行以下操作。

A. 驱动程序是否已加载?使用 lsmod 命令(无操作数)来查明。可能没有加载。尝试使用命令“insmod tub3270”手动加载它。该命令是否给出错误消息?哈!问题就在这里。

B. /etc/inittab 文件是否像上面的安装步骤 3 中那样被修改了?使用 grep 命令查明;例如,执行“grep 3270 /etc/inittab”。什么也没找到?问题就在这里!

C. 设备特殊文件是否像上面的安装步骤 2 中那样创建了?使用 ls -l 命令查明;例如,执行“ls -l /dev/3270/tty620”。输出应以字母“c”(表示字符设备)开头,并且在设备名称的左侧应包含“227, 1”。没有该文件?没有“c”?主设备号错误?次设备号错误?问题就在这里!

  1. 如果你收到如下消息

    "HCPDIA047E my-vm-guest-name 0620 does not exist"?
    

如果是这样,你必须从你的 VM 3215 控制台发出命令“DEF GRAF 620”,然后重新启动系统。

操作。

驱动程序在 3270 屏幕上定义了三个区域:日志区、输入区和状态区。

日志区占据了屏幕除底部两行之外的所有空间。驱动程序将终端输出写入其中,从顶行开始向下。当它填满时,状态区从“Linux Running”变为“Linux More...”。在(默认)5 秒的滚动超时后,屏幕被清空并从上到下写入更多输出。

输入区从倒数第二行屏幕行的开头延伸到状态区的起点。你在该区域键入命令并按 ENTER 键执行它们。

状态区初始化为“Linux Running”以给你一种温馨舒适的感觉。当日志区填满且有输出等待时,它会变为“Linux More...”。此时你可以做几件事或什么也不做。如果你什么都不做,屏幕将在(默认)5 秒内清空,并出现更多输出。你可以在输入区未输入任何内容的情况下按 ENTER 键,以便在“Linux More...”和“Linux Holding”(表示不会发生滚动)之间切换。(如果在“Linux Running”状态下且未输入任何内容时按 ENTER 键,应用程序将收到一个换行符。)

你可以更改滚动超时值。例如,以下命令行

echo scrolltime=60 > /proc/tty/driver/tty3270

将滚动超时值更改为 60 秒。如果你希望完全阻止滚动,请将 scrolltime 设置为 0。

当日志区填满时,你还可以执行以下操作:按 PA2 清除日志区并将更多输出写入其中,或者按 CLEAR 清除日志区和输入区并将更多输出写入日志区。

某些程序功能(PF)和程序注意(PA)键被预分配了特殊功能。未被分配的键在按下时会产生报警声。

PA1 会向当前运行的应用程序发送 SIGINT。你也可以从输入区执行相同的操作,只需键入“^C”并按 ENTER 键即可。

PA2 会使日志区被清空。如果有等待的输出,随后会被写入日志区。

PF3 会导致应用程序接收到 EOF 作为输入。你也可以通过键入“^D”并按 ENTER 键来触发 EOF。

没有预分配 PF 键来引起作业挂起,但你可以通过键入“^Z”并按 ENTER 键来引起作业挂起。你可能希望将此功能分配给一个 PF 键。要使 PF7 引起作业挂起,请执行以下命令

echo pf7=^z > /proc/tty/driver/tty3270

如果你键入的输入不以两个字符“^n”结尾,驱动程序会追加一个换行符并将其发送给 tty 驱动程序;否则驱动程序会剥离“^n”且不追加换行符。IBM 3215 驱动程序的行为与此类似。

Pf10 会使最近的命令从终端的命令栈(默认深度为 20)中检索出来并显示在输入区中。你可以再次按下 PF10 获取次近的命令,以此类推。只有当输入区未被隐藏(例如用于输入密码)且与当前顶部条目不相同时,命令才会进入栈中。PF10 在命令栈中向后循环;PF11 向前循环。你可以将向后功能分配给任何 PF 键(甚至 PA 键),例如 PA3,使用命令

echo -e pa3=\\033k > /proc/tty/driver/tty3270

这将字符串 ESC-k 分配给 PA3。类似地,字符串 ESC-j 执行向前功能。(理由:在具有 vi 模式行编辑的 bash 中,ESC-k 和 ESC-j 分别用于向后和向前检索历史记录。欢迎提出建议。)

20 个命令的栈大小不合你的心意?动态更改它。要更改为保存最近 100 个命令,请执行命令

echo recallsize=100 > /proc/tty/driver/tty3270

有一个你经常发出的命令?把它分配给一个 PF 或 PA 键!使用命令

echo pf24="mkdir foobar; cd foobar" > /proc/tty/driver/tty3270

以便在你按下 PF24 时立即执行命令 mkdir foobar 和 cd foobar。想在执行之前先查看命令行?使用 echo 命令的 -n 选项

echo -n pf24="mkdir foo; cd foo" > /proc/tty/driver/tty3270

测试愉快!欢迎对本文档、驱动程序等提出任何及所有的意见和建议。

Dick Hitt <rbh00@utsglobal.com>