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 的网络连接允许您使用 x3270、tn3270 或其他 3270 仿真器,从 PC 或工作站上的 xterm 窗口启动。使用 DEF GRAF 命令,像 xterm 这样的应用程序,以及此 Linux-390 3270 驱动程序,您有另一种与您的 Linux 机器通信的方式。

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

安装

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

警告:如果您正在使用 3270 控制台支持,则每次更改控制台地址(可能是通过使用 silo 的 /boot/parmfile 中的 condev= 参数)时,都必须重新运行配置脚本。更准确地说,您应该在每次您的 3270 集(包括控制台 3270)相对于彼此的子通道标识符发生更改时重新运行配置脚本。在运行配置脚本和生成的 /tmp/mkdev3270 后,尽快重新 IPL。

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

您可以生成 3270 和 3215 控制台支持,或两者之一,或两者都不生成。如果您同时生成两者,则 VM 下的控制台类型不会更改。使用 #CP Q TERM 查看当前的控制台类型。使用 #CP TERM CONMODE 3270 将其更改为 3270。如果您仅生成 3270 控制台支持,则驱动程序会在启动时自动将您的控制台转换为 3270(如果它是 3215)。

简而言之,这些是步骤

  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>” 拨入您的虚拟机来宾后立即看到)。由于行模式主号码为 227,因此要添加的行应为

alias char-major-227 tub3270

3. 如果您尚未这样做,请将图形设备定义给您的虚拟机来宾机器。在您重新启动 (reipl) 之前定义它们

  • DEFINE GRAF 620

  • DEFINE GRAF 621

  • DEFINE GRAF 622

  • DEFINE GRAF 623

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

5. 运行 3270 配置脚本 config3270。它与 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. 是否如上述安装步骤 3 中所述修改了 /etc/inittab 文件?使用 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 执行前进功能。(理由:在 bash 的 vi 模式行编辑中,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>