伯克希尔 PC 看门狗

产品:PC 看门狗
制造商:伯克希尔产品公司
电话/传真:770-271-0088/770-271-0082x
网址:http://www.berkprod.com/
价格:144.95 美元,带温度监控选项为 159.95 美元
评测人:David Walker
您的互联网服务器是否需要 24 小时/7 天可靠地在线运行?硬件看门狗定时器是确保此类系统停机时间最短的一种方法。伯克希尔产品公司生产的 PC 看门狗系统监控板就是这样一种板卡。
我评测了带温度监控选项的 PC 看门狗(rev. C),部件号为 1090-1。手册上写道:“PC 看门狗板卡是一块短卡,8 位 ISA 卡,用于监控 PC 以确保系统最大程度的可用性。”
该板卡可以通过多种方式监控 PC 的活动,以确定其是否已锁定。板卡上的拨码开关可以设置为监控特定 I/O 地址的活动。如果 PC 看门狗板卡在指定的时间段内未检测到受监控地址上的活动,它将重启机器。
该板卡具有用户 I/O 端口,可用于增强的看门狗控制和监控。这与 Linux 内核 PC 看门狗驱动程序和 PC 看门狗守护进程使用的接口相同。如果在指定时间内未写入板卡上的 I/O 端口,则该板卡将重启机器。
该板卡装在一个防静电袋中,放在一个盒子里,盒子里装有手册和一张 3.5 英寸 MS-DOS 软件磁盘,包括源代码。手册详尽地介绍了硬件的细节。然而,它没有具体描述 Linux 安装,并且磁盘上没有包含 Linux 软件。
该板卡使用三个拨码开关来配置其操作。我配置了该板卡以忽略 I/O 活动,因为 Linux 驱动程序会写入用户 I/O 端口以防止板卡重置 PC。我将用户 I/O 端口的地址设置为 0x0270,并将延迟时间设置为一分钟。我的开关设置如图 1 所示。

我编译了 Linux 2.0.28 内核,并启用了 PC 看门狗驱动程序作为模块。我还从 watchdog_2.0-0.tar.gz(来自 sunsite.unc.edu 的 /pub/Linux/system/Admin)编译了看门狗守护进程,并将其添加到 /etc/rc.d/rc.local。我使用内核文档中关于看门狗(linux/Documentation/watchdog.txt)中指定的主设备号和次设备号创建了 /dev/watchdog 和 /dev/temperature。
当一切准备就绪后,我关闭了机器,切断电源,并按照手册中的说明将 PC 看门狗板卡安装在一个 ISA 插槽中。
板卡上的一根线连接到主板上的复位连接器。来自复位开关的线连接到看门狗板卡上的另一个连接器,以便机箱上的复位开关仍然可以工作。
当我打开电源时,我的机器启动了。在 3.5 分钟的延迟后,PC 看门狗发出哔哔声,然后重启了我的机器。在几次重启后,我断开了从板卡到复位连接器的线,直到我弄清楚如何正确地使软件工作。
我向伯克希尔产品公司 (73201.1270@compuserve.com) 发送电子邮件,询问他们是否有关于 Linux 的任何信息。Simon Machell 迅速回复,将我介绍给了 Ken Hollis (khollis@bitgate.com),他编写了 PC 看门狗板卡的内核驱动程序。
在我等待 Ken 回复期间,我在内核驱动程序中发现了一个错误。在我修复了这个错误后,来自 linux/Documentation/watchdog.txt 的示例看门狗守护进程和来自 watchdog_2.0-0.tar.gz 的守护进程都可以工作了。
列表 1 是我为修复 Linux-2.0.28 中包含的内核驱动程序而打的补丁。它也可能适用于其他内核——您的里程可能会有所不同。
Ken 指导我使用他编写的最新驱动程序:ftp://ftp.bitgate.com/pub/mirrors/bitgate/pcwd/pcwd-1.01.tar.gz。我获取了 tar 文件,查看了内容,然后使用补丁文件 patch-2.0.15 补丁了我的内核源代码树。
修补 linux/drivers/char/pcwd.c 和 linux/include/linux/pcwd.h 并没有成功,所以我将 pcwd-2.0.27.c 复制到 linux/drivers/char/pcwd.c,并将 pcwd.h 复制到 linux/include/linux/pcwd.h。然后看门狗驱动程序编译成功了。
新的驱动程序不适用于旧驱动程序的守护进程;它附带了一个新的守护进程。该驱动程序与附带的守护进程配合良好。随驱动程序附带的守护进程缺少一个有用的功能:watchdog_2.0-0.tar.gz 中的守护进程。当它写入 /dev/watchdog 时,它不会 fork,因此如果进程表已满,它将不会重启机器。
我修改了守护进程,使其在写入 /dev/watchdog 之前 fork,因此进程表已满将导致机器重启。列表 2 是来自 pcwd-1.01.tar.gz 的 watchdog.c 的补丁。
我确实尝试将 PC 看门狗驱动程序作为内核的一部分进行编译,但它导致了一个错误,并且没有正确初始化。作为模块编译时,它可以正常工作。
模块必须加载,并且看门狗守护进程必须在文件系统被 fsck 检查之前启动。fsck 检查文件系统可能比看门狗板卡中内置的延迟时间更长。我将以下命令放入我的 /etc/rc.d/rc.S 文件(Slackware 初始化文件)中,在文件系统检查之前加载模块并启动守护进程。
# load the watchdog module and # start the watchdog daemon if [ -x /lib/modules/2.0.28/misc/pcwd.o ]; then echo -loading watchdog module' /sbin/insmod 'f /lib/modules/2.0.28/misc/pcwd.o if [ -x /usr/sbin/watchdog ]; then echo -starting watchdog daemon- /usr/sbin/watchdog -t 10 & fi
此时,根文件系统以只读方式挂载,因此无法运行 depmod 来构建 modules.dep 文件。因此,当安装新内核时,kerneld 将无法加载看门狗模块。
此时也无法创建到模块目录的通用链接;因此,此处必须使用模块的完整路径名。当安装新内核时,必须更新模块的路径,以确保不会加载旧模块。
我通过杀死看门狗守护进程并运行一个 fork 程序直到进程表已满来测试该板卡。在测试期间,系统自身没有发生任何故障。
PC 看门狗还可以监控机器的温度,尽管内核驱动程序不支持读取温度。我编写了一个简短的程序来读取和打印板卡报告的温度(参见列表 3)。当我用吹风机加热板卡时,我的程序报告了升高的温度,并且当温度达到 56 摄氏度时,板卡开始发出报警声。该板卡有一个选项,当温度超过 60 摄氏度时,可以通过关闭继电器将 PC 保持在复位状态。可以编写一个守护进程,在温度过高时发送电子邮件或呼叫寻呼机,或者关闭 PC。
工业计算机资源公司生产 WDT 看门狗定时器硬件板卡,Linux 内核也有相应的驱动程序。它可以从工业计算机资源公司获得(美国电话:619-677-0877,英国电话:01-243-533900,法国电话:(1) 69.18.74.30)。它看起来与 PC 看门狗板卡类似,尽管我没有使用过它。
Linux 内核也提供软件看门狗驱动程序。软件看门狗无法从某些锁定状态重启系统,也没有温度传感器。硬件板卡应该可以在任何锁定状态后重启系统。
David Walker 是一位 Linux/Unix 系统管理员和程序员,居住在华盛顿州西雅图附近。当他不工作时,他喜欢玩 Linux,在山里远足或骑马。可以通过 dwalker@eskimo.com 联系到他。