Java中的串口唯一标识

Java中的串口唯一标识,java,linux,serial-port,Java,Linux,Serial Port,我正在开发一个Linux应用程序,它使用串口与一些设备通信。 我的所有设备都使用usb到串行转换器,因此所有串行端口都通过usb连接 目前,我使用每个端口的名称来标识它ttyAM0或ttyUSB1等,但是这是非常有问题的,因为端口枚举一直在变化 我无法创建udev规则,事实上,不应该对操作系统本身进行任何更改,因为人们认为最终用户将无法/熟练地这样做。这是一个商业应用程序 所以问题是:如何唯一地标识每个串行端口并存储这些信息以便下次重新启动后使用?好的,我找到了解决方案。。。 因为我只对Linu

我正在开发一个Linux应用程序,它使用串口与一些设备通信。 我的所有设备都使用usb到串行转换器,因此所有串行端口都通过usb连接

目前,我使用每个端口的名称来标识它ttyAM0或ttyUSB1等,但是这是非常有问题的,因为端口枚举一直在变化

我无法创建udev规则,事实上,不应该对操作系统本身进行任何更改,因为人们认为最终用户将无法/熟练地这样做。这是一个商业应用程序


所以问题是:如何唯一地标识每个串行端口并存储这些信息以便下次重新启动后使用?

好的,我找到了解决方案。。。 因为我只对Linux感兴趣,所以我检查文件夹/dev/serial/by id,以查找每个设备的唯一id。那里的文件有到串行端口的链接

所以。。。 读取该文件夹中的文件名将为您提供id。 读取每个链接的目标会给出端口名

以下是我的一段工作代码:

    HashMap<String, String> portsMap = new HashMap<>();

    File serialFolder = new File("/dev/serial/by-id");
    File[] listOfDevices = serialFolder.listFiles();

    for (int i = 0; i < listOfDevices.length; i++)
    {
        if (Files.isSymbolicLink(listOfDevices[i].toPath()))
        {
            try
            {
                String portName = listOfDevices[i].getName();
                String id = Files
                        .readSymbolicLink(listOfDevices[i].toPath())
                        .toString()
                        .substring(
                        Files.readSymbolicLink(listOfDevices[i].toPath())
                        .toString().lastIndexOf("/") + 1);
                portsMap.put(id, portName);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }

创建udev规则并修改安装程序或安装说明以创建所述udev规则。可以在“设置”中更改端口。PID和VID可能不为人所知,因为设备很多,并且仍在开发中。我的目标也是不给应用程序root权限。