在内核 6.8 之前 [编辑:实际上在 6.3 之前(包括 6.3);我无法检查 6.3 和 6.8 之间的内核],固定串行端口(ttySxx)的驱动程序路径解析为/sys/bus/platform/drivers/serial8250并且只需检查名称是否为“ serial8250 ”就足以判断是固定设备还是可移动(USB)设备 - 如果驱动程序名称不是“ serial8250 ”,则可以假设它是(a)可移动设备并且(b)无需进一步检查以确保它是真实设备(即不仅仅是占位符)。
这是 Soren Holm 在此处提供的检查端口的解决方案中使用的: https://stackoverflow.com/questions/2530096/how-to-find-all-serial-devices-ttys-ttyusb-on-linux-without-opening-them 多年来,在我编写的软件中我一直在使用 Soren 代码的 Pascal 翻译,没有任何问题或抱怨。
但是从内核 6.8 开始(Ubuntu 24.04LTS),驱动程序路径已经改变。现在它解析为/sys/bus/serial-base/drivers/port,并且名称“ port ”太过通用,不能用作决策依据 - 内核 6.8 破坏了 Soren 的代码。到目前为止,我还没有在网上找到关于内核这一变化的任何有用讨论。
我的问题是,对于内核 6.8 及更高版本,是否有任何可靠的替代检查来确定串行端口是否与“ serial8250 ”驱动程序相关联?有没有专家知道串行端口驱动程序的更改、更改的原因以及解决后果的解决方法?
欢呼吧,Rob :-)
附录:澄清一下,我检查了 6.3 及之前的内核、6.8 及之后的内核,但没有检查 6.3 和 6.8 之间的内核。因此,在内核 6.3 之后的任何地方都可能发生更改
驱动程序名称不再有助于识别固定串行设备,因此我想出了替代代码(用 Pascal 编写),它似乎适用于 6.8 和更早版本的 Ubuntu 内核: