在LINUX 中,会经常用到USB转串口的设备。而LINUX中通用的做法是根据插入USB设备的先后顺序依次注册ttyUSB0\1\2\3..等设备,但是这样就有一个问题了,例如我有多个USB的口,要接多种不同USB转串口设备,那么我插上USB的顺序不同,那同一个设备注册的设备名就不同了,这样就造成在APP中调用的USB的设备名变化的,这样就增加了APP开发的难度。那么可不可把不同的设备注册的串口号固定下来呢?
在linux的USB转串口的驱动中,定义了一个serial_table的指针数组,这个数组保存每一个注册的USB串口设备。当USB插上时,usb_serial_probe会被执行,这个函数会调用get_free_serial。在get_free_serial中,会遍历整个数组,寻找第一个没有被赋值的单元,将设备的usb_serial结构的地址保存的这个单元,同时将该数组元素的下标赋值给usb_serial结构中port[N]的number(一个USB设备可以有多个PORT),而这个number就是最后注册的设备名ttyUSB0\1\2\3..后面的数字。
那么是不是我们可以给每一个设备指定一个开始的number号,那么不论先后顺序设备名都可以固定了。
下面还有一个问题,就是怎么在get_free_serial中判断是什么设备呢?这个LINUX已经给我们准备好了,就是description,我们只要比较description和我们要指定的设备是否相同就好了。这个保存在usb_serial结构的type->description下,这个description我们是定义在设备驱动的usb_serial_driver结构的description。如果没有定义description,那么将用usb_serial_driver结构中的driver->name作为description。
有了上面的知识,我们的工作就很简单了只要在get_free_serial的开头加上下面的代码,就大功告成了。
if(memcmp(serial->type->description,"dev name ",6) ==0)
{
i=_DEF_NUMBER;
}
else
{
i=0;
}
相关文章
- 虚拟机Linux(Fedora10)下USB转串口的使用, minicom: cannot open /dev/ttyUSB0的解决
- linux下向来坑死人的多USB设备名(多串口)
- [置顶] linux USB虚拟串口设备名的修改
- LINUX下(虚拟机中的LINUX系统)串口通讯 part3------fedora 9下USB转串口的应用和minicom的设置(转载)
- Linux虚拟机下使用USB转串口线——配置minicom、以及screen的使用
- 【转】linux下usb转串口线的使用 和 关于VMware虚拟机下串口配置的使用技巧
- Linux USB虚拟串口设备
- 虚拟机下Linux读取USB设备的问题虚拟机下Linux无法读取USB设备的解决方案
- linux下向来坑死人的多USB设备名(多串口)
- 【转】linux下usb转串口线的使用 和 关于VMware虚拟机下串口配置的使用技巧