Next Previous Contents

2. 关于“编译和安装 Ftape”的相关问题!

2.1 我应该使用哪个 Ftape 版本?

始终使用最新的稳定版本,_应该_可以从 ftp://sunsite.unc.edu/pub/Linux/kernel/tapeshttp://www-math.math.rwth-aachen.de/~LBFM/claus/ftape/ 获取。

在撰写本文时,最新的稳定版本是 ftape-4.02

<来自 Claus Heine 的回答>

2.2 我在使用内置驱动程序的 2.0.xx 内核下运行 XYZ 驱动器时遇到问题。我该如何解决?

2.0.xx 内核源代码中包含的默认 Ftape 版本是 2.08 或 2.09,这已经非常过时了。请从 Ftape 主页 更新 Ftape 驱动程序 到最新版本。

<来自 Tim Jones 的回答>

2.3 我正在运行 Linux/SMP,当尝试访问 Ftape 设备时,系统会冻结!

您需要在 MCONFIG 文件中的 KERNEL_OPT 变量中添加 -D__SMP__。在较新的 ftape 版本中,您只需要取消注释 MCONFIG 文件中的某一行。

<来自 Claus Heine 的回答>

2.4 为什么 depmod 抱怨“未定义的符号”?

忽略 depmod 错误消息。问题是 Ftape 模块 必须在没有版本校验和功能 (即 CONFIG_MODVERSIONS) 的情况下使用 2.0.* 内核进行编译。即使模块与支持此功能的内核一起使用,这也不会导致问题;只是 depmod 错误地抱怨未定义的符号。忽略 depmod 的抱怨,并尝试插入模块,尽管有这些抱怨。

modprobe zftape
如果这失败了,那就有问题了。

<来自 Claus Heine 的回答>

2.5 “insmod”说内核版本错误

insmod 程序可以通过两种方式检查内核版本与编译 Ftape 所针对的版本是否一致:它可以直接比较 Ftape 模块 中记录的内核版本号与正在运行的内核的版本,或者,如果内核和 Ftape 都使用版本化符号编译,则比较使用的内核符号的版本。

如果您已将 GCC 版本升级到 v2.7.0 或更高版本,则必须使用 gcc v2.7.x 重新编译模块实用程序。

较新版本的 insmod 允许您“强制”将模块插入内核,即使版本字符串不正确。

<来自 Ftape-Howto>

2.6 “insmod”说内核 1.2.0 和 1.2.0 不同

您是否记得将 ksyms.c 补丁应用于内核?如果否,请阅读源代码发行版中的 README.linux-1.2 文件。

<来自 Ftape-Howto>

2.7 尝试编译 Ftape 时出现错误“modversions.h: 没有这样的文件或目录”

modversions.h 文件是在内核编译时启用了配置项 CONFIG_MODVERSIONS 时创建的。启用此选项后,该文件将在 make dep 步骤期间创建。

另一个方便的技巧是 make mrproper 将删除 /usr/include/linux/modversions.h。您需要重新配置内核并执行 make dep 才能重新获得该文件。

<来自 Ftape-Howto>

2.8 那么,这个版本化符号的东西到底是什么?

当您在 `make config' 期间对 CONFIG_MODVERSIONS 说 `yes' 时,内核导出的所有符号,即加载模块可以“看到”的符号,都会被增强,以包含跨调用/返回参数类型的校验和。这允许 insmod 检测内核中变量或函数的定义自 Ftape 编译时以来是否已更改。

这确保了高度的安全性,这样您就不会因为将过时的模块与您的内核一起使用而使内核崩溃。

如果您在内核中启用 CONFIG_MODVERSIONS,请确保您已

-DMODVERSIONS -include /usr/include/linux/modversions.h
Ftape Makefile 的 MODULE_OPT 行中取消注释。相反,如果您没有启用 CONFIG_MODVERSIONS,请确保将其注释掉。

<来自 Ftape-Howto>

2.9 我似乎得到的是 sftape 而不是 zftape。当我运行 "ftmt status" 命令时,我得到的输出与 Ftape 文档中说的 sftape ( /dev/qft0: 无效的参数 ) 对应。为什么?

问题可能有(至少)两个来源

<来自 Claus Heins 的回答>

2.10 我的 Ditto DASH/FC-20/Exabyte Accelerator 卡在 Microsoft Windows 下工作正常,但在 Linux 下尝试使用时,我在 /var/log/messages 中收到驱动器未找到类型的错误。

您可能正在尝试使用与板载 FDC 相同的 IRQ 和 DMA 设置。这在 3.03b 之前的 Ftape 版本中不起作用。请从 Ftape 主页 更新 Ftape 驱动程序 到最新版本。

<来自 Tim Jones 的回答>

2.11 Ftape DMA 传输给出 ECC 错误

遗憾的是,有些 SVGA 卡和以太网卡无法正确解码其地址。当 Ftape 缓冲区在 0x1a00000x1c0000 范围内时,通常会发生这种情况。不知何故,DMA 写入周期被破坏,并且写入的每个其他字节都会获得一个错误值 (0xff)。据报告,SVGA 和以太网卡都发生了这些问题。我们至少知道一张(坏的?)ATI 16 位 VGA 卡导致了这种情况。

最简单的解决方案是将卡插入 8 位插槽(通常重新配置卡为 8 位传输是不够的)。将 Ftape 缓冲区移出 VGA 范围只是部分解决方案;Linux 中使用的所有 DMA 缓冲区都可能存在此问题!让我们明确这一点:这与 Ftape 软件无关。

<来自 Ftape-Howto>

2.12 救命!我的 syslog 文件中出现 'dmaalloc() failed'。

仅当您尝试 insmod ftape.o 模块时,您才应该看到这个错误。首先尝试运行 swapout。它随独立的 Ftape 源代码提供。它不会出现在内核提供的 Ftape 源代码中。

这是一个关于如何设置 rc.local 文件以使用它的示例。

# Install the Floppy Tape Driver
if [ -f /boot/modules/`uname -r`/misc/ftape.o ]; then
   echo Installing ftape for Linux `uname -r`
   swapout
   insmod /boot/modules/`uname -r`/misc/ftape.o
fi

请注意,如果您将 Ftape 驱动程序 编译到内核中,您就不会遇到此类问题。

<来自 Ftape-Howto>

2.13 Syslogd 在运行 Ftape 时过度工作

Ftape 中的编译时选项 NO_TRACENO_TRACE_AT_ALL 控制系统日志记录的量。将适当的选项添加到 Makefile 中的 FTAPE_OPT 行并重新编译。

<来自 Ftape-Howto>

2.14 我如何更改跟踪级别?

您可以通过三种方式执行此操作(按个人喜好顺序排列)。

顺便说一句,以下是各种跟踪级别的含义。

  1. 使用 insmod 更改跟踪级别 如果您使用模块机制加载 Ftape 驱动程序,您可以将跟踪级别指定为 insmod 命令的选项。
            /sbin/insmod ftape.o tracing=<tracing-level>
    
  2. 使用 mt 更改跟踪级别 Ftape 驱动程序中有一个 hack,允许在 mt 中使用 fsr 选项来设置跟踪级别。zftape 没有这个 hack。
            mt -f /dev/ftape fsr <tracing-level>
    
    mt 中使用 fsr 命令是一个 hack,并且可能会随着时间的推移而消失或更改。
  3. 重新编译以更改跟踪级别 tracing.c 文件包含一行 int tracing = 3;。将 3 更改为适当的值并重新编译。

<来自 Ftape-Howto>

2.15 我在使用 Ftape 时遇到问题。我正在使用来自 Ftape 主页的最新版本的 Ftape,并且相信我已经找到了一个真正的 bug。我应该怎么办?

检查 Ftape 主页 是否有更新的版本。然后检查该软件包中包含的 FAQ,看看您的问题是否列在那里。接下来,尝试检查 Ftape 发行版 随附的手册是否提到了您的问题。

没有必要阅读整个手册,只需检查“概念索引”是否包含可能与您的问题相关的关键字,然后跳转到手册中的适当位置。

如果您仍然确信您找到了一个 bug,那么请向 Linux-Tape 邮件列表 发布一个描述该问题的一般性问题,但不要附加您的整个 Ftape 错误日志。如果我们以前见过这个问题,我们会告诉您解决工作的进展情况。如果我们没有见过,Ftape 维护者 很可能会要求您将整个 Ftape 错误日志(从您的系统消息文件中剪辑)发送给他。

<来自 Tim Jones 的回答>


Next Previous Contents