无法在内核为 5.3.18-lp152.84-default 的 Suse Leap 15.2 上安装串行/并行端口卡驱动程序

无法在内核为 5.3.18-lp152.84-default 的 Suse Leap 15.2 上安装串行/并行端口卡驱动程序

我有一块 IOCREST SI-PEX50103,它是一块 PCI-Express 多 I/O 控制器卡,有 2 个串行端口和 1 个并行端口。它使用供应商提供的 AX99100 驱动程序。我正在运行带有内核 5.3.18-lp152.84-default 的 openSUSE Leap 15.2。

我无法在此 Linux 安装上安装 AX99100 驱动程序。从安装源目录运行 make 命令时,我收到以下错误消息:

CC [M] /home/programming/iocrest/AX99100_LINUX_Driver_v1.0.0_Source/ax99100.o /home/programming/iocrest/AX99100_LINUX_Driver_v1.0.0_Source/ax99100.c: 在函数“receive_chars_dma_done”中: /home/programming/iocrest/AX99100_LINUX_Driver_v1.0.0_Source/ax99100.c:1027:43: 错误:'ch'未声明(在此函数中第一次使用) if (uart_handle_sysrq_char(&up->port, ch)) ^~ /home/programming/iocrest/AX99100_LINUX_Driver_v1.0.0_Source/ax99100.c:1027:43: 注意:每个未声明的标识符对于每个出现的函数仅报告一次

在升级到 Leap 15.2 之前,我已在这台计算机上安装了 openSUSE Leap 15.1,安装驱动程序和使用此卡没有任何问题。目前,我在这台计算机上还安装了 CentOS Linux 7,我可以在该安装上安装驱动程序和使用该卡。

我猜我正在运行的 5.3.18-lp152.84 内核的内核源存在某种问题。如果您能提供任何有关定位问题的建议,我将不胜感激。

答案1

更新 - 必须将 grub 恢复为 Linux Header kernel 5.4.0-110-low-latency 并编辑 make & install driver 中的拼写错误

好的,我终于可以联系供应商(StarTech)支持了......

  1. 供应商表示他们已测试Linux 内核头文件 5.4.0-110适用于 Ubuntu 20.04LTS。

    sudo apt update
    sudo apt install linux-headers-5.4.0-110 -y
    
    • 更新/etc/default/grub以启动5.4.0-110-低延迟默认情况下与 Ubuntu/SUSE 附带的最新版本
  2. 从以下位置下载驱动程序https://www.startech.com/en-us/cards-adapters/PEX1P2,修复 make 文件中的拼写错误(供应商承认这是一个已知问题)。实际上,主要问题错误ax99100.cmake install 抛出错误undeclared ch,只需在脚本中声明即可解决:

    char ch;
    if (uart_handle_sysrq_char(&up->port, ch))
    ...
  1. 驱动程序构建make命令现在应该可以工作了,但是在你的make install命令中缺少一行,因为内核目录不存在。我添加了这行,mkdir -p ...然后 make install 就可以正常工作了

  2. 最后,要加载驱动程序,有一个带有 io & io_high... 的命令,运行sudo lspci -v它以获取为新并行端口硬件分配的十六进制端口值(在我的情况下,e010&e000)。您需要将这些十六进制转换为十进制以作为参数传递(在线转换器在此处:https://www.rapidtables.com/convert/number/hex-to-decimal.html


原来的

有趣的是,我遇到了完全相同的错误,很高兴看到另一个用户最近也遇到了同样的错误。我们的设置

  • 戴尔 OptiPlex 9020
  • Ubuntu 20.04LTS,内核5.4.13(你可以运行uname -r来检查)
  • StarTech PCiE 并行端口

运行他们提供的安装脚本这里,存在一些错误...

值得注意的是,您需要将其更改SUBDIR=$(PWD)M=$(shell pwd)甚至运行sudo make,但随后您会收到ch undeclared错误...我的想法是,这是 StarTech 团队在更新驱动程序 Makefile 时出现的拼写错误/维护不善。

我联系了 StarTech 的聊天支持,分享了这些详细信息,他们针对可能缺失的依赖项提出了以下建议

您能否尝试以下方法并告诉我它是否适合您。

  • 当在运行内核 5.4.0-113 的 Ubuntu 20.04 机器上出现类似错误时,我们测试了这些步骤,似乎运行良好。

  • 在 Makefile 中,确保两个位置上的 $(PWD) 都更改为 $(shell pwd)(有时需要根据客户的配置进行更改)

  • 然后尝试:

    sudo apt-get install linux-source
    sudo apt-get install build-essential
    sudo apt-get install gcc-multilib
    sudo apt-get install linux-libc-dev:i386
    sudo apt-get install linux-headers-5.4.0-110:i386
    sudo apt-get install linux-headers-5.4.0-110
    
  • 如果上述命令不起作用,请尝试此命令

    sudo ln -s /usr/include/asm-generic /usr/include/asm 
    
    • 建立链接以告诉编译器 asm-generic 也是 asm,因为这可能是问题的一部分
  • 最后,以防万一:

  sudo apt-get update        

就像我说的,在我们看来,这似乎可以顺利安装卡,没有任何错误。如果您有任何问题或这是否对您有用,请告诉我。

答案2

我们在 Rocky Linux 内核 5.14 上遇到了类似的问题。讨论在这里

在 ax99100_sp.c 中的一个参数中添加“const”后,Startech 驱动程序进行了编译。

static void serial99100_set_termios(struct uart_port *port, struct ktermios *termios, const struct ktermios *old)

在我们关闭 BIOS 中的安全启动之前,“modprobe”失败了。现在 dmesg 显示 ttyF0 和 ttyF1。

相关内容