8. FAQ/故障排除

这里列出了一系列您可能遇到的常见问题,以及它们可能的解决方案。

8.1. 编译问题

8.1.1. 在 ./configure 期间,我收到 configure: error: You must have linux kernel >= 2.4.0 installed 错误
8.1.2. 我收到 /usr/src/linux/include/linux/modversions.h : no such file or directory 错误
8.1.3. 在运行 bash$ make install 时,我收到 permission denied 错误
8.1.4. 我使用 gcc 3,在编译时,我收到一个类似这样的错误 <command line>:1:13: multi-line string literals are deprecated make[3]: *** [ptserial.o] Error 1
8.1.5. 我使用 RedHat 8.0/Mandrake 9.0,并且我在编译驱动程序时遇到问题。

8.1.1. 我收到一个configure: error: You must have linux kernel >= 2.4.0 installed在 ./configure 期间

如果发生这种情况,您将需要修补您的 configure 脚本。下载文件configure.patch这里 并给出命令

cat configure.patch | patch -p0

Note

我假设您在 pctel-0.9.6 目录中,并且configure.patch也在该目录中

8.1.2. 我收到一个/usr/src/linux/include/linux/modversions.h : no such file or directory

您需要在/usr/src/linux/

下安装内核源代码。如果您将内核源代码安装在其他位置,只需创建适当的符号链接。(有关更多信息,请参阅 7.7 节)如果您已将其安装在/usr/src/linux/下,运行

bash$ make config

bash$ make dep

/usr/src/linux/

8.1.3. 我收到一个permission denied错误,在运行 bash$ make install

您需要在以 root 用户身份登录时执行 bash$ make install

8.1.4. 我使用 gcc 3,在编译时,我收到一个错误,如下所示<command line>:1:13: multi-line string literals are deprecated make[3]: *** [ptserial.o] Error 1.

这不应该再发生,因为 pctel-0.9.6 驱动程序的发布就是为了解决这个问题。但是,如果您仍然遇到此类问题(使用旧版本的驱动程序或其他类似情况),您将必须编辑文件<您的 pctel 目录>src/ptserial/Makefile。在该文件中,找到说

CFLAGS = -D__KERNEL__ -Werror -Wno-trigraphs -fno-common -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing -pipe -fno-strength-reduce -DMODULE -DMODVERSIONS -DEXPORT_SYMTAB -D$(HAL_TARGET) $(AUDIO_ROUTING) -DBUILD_SYSTEM=\""$(BUILD_SYSTEM)\"" -DGCC_VERSION=\""$(GCC_VERSION)\"" -I$(top_srcdir)/include -I$(KERNEL_INCLUDES) -include $(KERNEL_INCLUDES)/linux/modversions.h

的那一行并将其更改为

CFLAGS = -D__KERNEL__  -Wno-trigraphs -fno-common -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing -pipe -fno-strength-reduce -DMODULE -DMODVERSIONS -DEXPORT_SYMTAB -D$(HAL_TARGET) $(AUDIO_ROUTING) -DBUILD_SYSTEM=\""$(BUILD_SYSTEM)\"" -DGCC_VERSION=\""$(GCC_VERSION)\"" -I$(top_srcdir)/include -I$(KERNEL_INCLUDES) -include $(KERNEL_INCLUDES)/linux/modversions.h

....然后重新编译。

Tip

如果您找不到文件src/ptserial/Makefile,则运行 configure 脚本,然后重试。

或者,您也可以尝试 http://www.geocities.com/jcmp3/ 上的预编译(特定于发行版)驱动程序。请注意,我个人没有测试过这些驱动程序,并且我对它们了解不多。

8.1.5. 我使用 RedHat 8.0/Mandrake 9.0,并且我在编译驱动程序时遇到问题。

请参阅 之前 的问题 (8.1.4) 的答案。

8.2. 加载模块时出现问题。

8.2.1. 加载模块时,我收到 unresolved symbols.... 消息
8.2.2. 在尝试加载驱动程序时,我收到 Operation not permitted 错误
8.2.3. 加载模块时,我收到 Warning: loading /lib/modules/2.4.19/misc/ptserial.o will taint the kernel: non-GPL license - GPL linked with proprietary libraries 消息。
8.2.4. 加载模块时,我收到 The module you are trying to load (/lib/modules/2.4.18-14/misc/pctel.o) is compiled with a gcc version 2 compiler, while the kernel you are running is compiled with a gcc version 3 compiler. This is known to not work. 消息。

8.2.1. 我收到unresolved symbols....消息,在加载模块时

首先,检查您是否在加载 pctel.o 之后才加载 ptserial.o

如果这不能解决问题,那么可能是您为错误的内核版本编译了模块。使用命令检查您的内核版本

bash$ uname -r

然后验证您是否在/usr/src/linux.

中拥有正确的文件。此外,如果您有一个用于单处理器机器的正在运行的内核,并且在/usr/src/linux/中具有配置为支持 smp 的内核源代码,那么您将收到 unresolved symbols 错误。检查您是否具有 smp 支持源的一种方法是在/usr/src/linux/中运行 bash$ make menuconfig ,并查看是否选择了 smp 支持。

解决 unresolved symbols 问题的另一种方法是使用来自 http://linmodems.technion.ac.il/pctel-linux/fixscript.gz 的 fixscript 包

步骤是

使用以下命令解压缩下载的文件

bash$ gzip -d fixscript.gz

使其可执行,使用

bash$ chmod +x fixscript

运行它,使用

bash$ ./fixscript old_module.o new_module.o

这将创建新模块,您可以尝试使用以下命令加载它

bash$ insmod new_module.o

如果 fixscript 报告类似这样的错误

objcopy: --redefine-sym: Symbol x is target of more than one redefinition

那么,fixscript 无法帮助您。

最好的方法当然是修复您的内核源代码并重新编译驱动程序。

确保您执行了

bash$ make clean

然后再重新编译。

8.2.2. 我收到一个Operation not permitted错误,在尝试加载驱动程序时

您必须以 root 用户身份登录才能加载驱动程序,否则,您也可以输入

bash$ su

命令,然后加载驱动程序。

8.2.3. 我收到一个Warning: loading /lib/modules/2.4.19/misc/ptserial.o will taint the kernel: non-GPL license - GPL linked with proprietary libraries消息,在加载模块时。

此消息只是通知您,您正在加载一个 Linux 内核开发者不支持的专有模块。它也作为警告,表明驱动程序尚未经过内核的官方测试,并且可能会导致问题,并告诉您,如果在加载这些专有驱动程序后遇到系统不稳定或任何其他问题,您不应向内核开发者发送错误报告。

Note

请记住,这 不是 错误消息 - 它只是通知您正在使用不受支持的模块。

8.2.4. 我收到一个The module you are trying to load (/lib/modules/2.4.18-14/misc/pctel.o) is compiled with a gcc version 2 compiler, while the kernel you are running is compiled with a gcc version 3 compiler. This is known to not work.消息,在加载模块时。

尝试使用 insmod -f pctelinsmod -f ptserial 命令而不是普通的 insmod pctelinsmod ptserial 来加载模块。

Warning

请记住,这不是一个非常好的hack。

8.3. 一般调制解调器相关问题。

8.3.1. 我收到 /dev/modem no such device 错误。
8.3.2. 我的拨号器给出 No Carrier 错误
8.3.3. 我收到 No Dialtone 消息。
8.3.4. 我收到 Modem Busy 错误。

8.3.1. 我收到一个/dev/modem no such device错误。

首先,检查您是否真的加载了驱动程序。您可以使用以下命令执行此操作

bash$ lsmod

此命令列出您已加载的所有模块,如果您看到类似

Module                  Size  Used by
ptserial               47472   0 (unused)
pctel                1211808   0 [ptserial]

的内容,则表示模块已正确加载。

如果不是,只需加载它们并重试。

还要检查文件 /dev/modem 是否符号链接到 /dev/ttyS15

请记住,即使 msdos 或 Microsoft Windows 告诉您调制解调器在 com 3 或 com 4 中,在 GNU/Linux 中,驱动程序也会使其出现在 /dev/ttyS15 中(Microsoft 等效项将是 com 16!!)

如果您有疑问,我建议您使用以下命令重新创建设备文件

bash$ rmmod ptserial

bash$ rmmod pctel

bash$ rm /dev/ttyS15 �/dev/modem

bash$ mknod /dev/ttyS15 c 62 79

注意:/devttyS15 之后的数字是特定于发行版的,c 62 79 适用于 Red Hat Linux 及其衍生版本。如果您有任何其他发行版,请查看您的文档。

bash$ chgrp uucp /dev/ttyS15

bash$ chmod 666 �/dev/ttyS15

bash$ ln -s /dev/ttyS15 /dev/modem

8.3.2. 我的拨号器给出No Carrier错误

这是 kernel 2.4x 系列驱动程序的一个 bug

有关更多信息,请参阅 7.6 节。

8.3.3. 我收到一个No Dialtone消息。

这通常可以通过将 ATX3 添加到您的调制解调器初始化字符串来解决。添加 ATX3 初始化字符串的过程因您使用的拨号器而异。例如,如果您使用 wvdial,您需要在文件Init2行末尾添加 X3/etc/wvdial.conf。另一方面,如果您使用 KPPP,您将需要在初始化字符串 1字段中添加 ATX3,该字段可以在调制解调器命令部分的调制解调器设置KPPP 的对话框中找到。

8.3.4. 我收到一个Modem Busy错误。

错误

首先,检查驱动程序是否已加载,然后再查看是否有任何程序正在使用调制解调器。如果一切似乎都正常,请尝试使用以下命令找出调制解调器的 irq

bash$ lspci -v

如果列出的 irq 明显不正确(例如 0)(或者与您的 M$-Windows 配置不符),则可以使用 setserial 命令

bash$ setserial /dev/ttyS15 irq * (其中 * 是您的调制解调器的 irq)

或调整 BIOS 设置(请参阅 7.8 节)

另一种可能是您的声卡模块与 PCTel 模块冲突。有关此信息,请参阅 7.10 节。

8.4. 我遇到的问题未在此部分列出。我该怎么办?

命令的输出

bash$ tail /var/log/messages

Nov 11 10:50:24 localhost kernel: PCTel device[00:09.0](0x48) found "PCTel Inc HSP MicroModem 56 (rev 01)", iobase=0xe400, irq=12.
Nov 11 10:50:24 localhost kernel: PCTel driver version 0.9.5 [5.05c-4.27.215 (09-14-2001)] (PCT789) (2002-01-31) with MANY_PORTS SHARE_IRQ SERIAL_PCI enabled.
Nov 11 10:50:24 localhost kernel: PCTel driver built on [Linux 2.4.18-14 i686 i686 "2.4.18-14 <132114>"] with gcc-gcc (GCC) 3.2
20020903 (Red Hat Linux 8.0 3.2-7).
Nov 11 10:50:24 localhost kernel: ttyS15 at 0xe400 (irq = 12) is a PCTel

如果出现任何问题,将为您提供大量信息。正常输出应如下所示<discuss@linmodems.org>