我有一块 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)支持了......
供应商表示他们已测试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 附带的最新版本
- 更新
从以下位置下载驱动程序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))
...
驱动程序构建
make
命令现在应该可以工作了,但是在你的make install
命令中缺少一行,因为内核目录不存在。我添加了这行,mkdir -p ...
然后 make install 就可以正常工作了最后,要加载驱动程序,有一个带有 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。