我正在开发一个使用串行端口与某些设备通信的Linux应用程序。 我为所有设备使用usb-to-serial转换器,因此所有串口都通过usb连接。
目前我正在使用每个端口的名称来识别它(ttyAM0或ttyUSB1等),但这是非常有问题的,因为端口限制不断变化。
我无法创建udev规则,实际上不应该将任何内容更改为操作系统本身,因为认为最终用户无法/熟练地执行此操作。 (这是一个商业应用程序)。
所以问题是:我如何唯一地识别每个串口并存储下次重启后要使用的信息?
答案 0 :(得分:0)
好的,我找到了解决方案......
由于我只对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();
}
}
}