[COLUG]
USB to serial converter, udev rule making, one problem solved
charles morrison
charlie2 at ledgible.com
Tue Dec 18 12:32:11 EST 2007
To All:
Review of problem.
The initial request for ideas came from my attempt to install a qbasic
program under dosemu in which I discovered that the dosemu would not
recognize my serial port which is a USB to serial converter. There are
actually two problems: the first is that even though our qbasic program
runs under dosemu, the serial port did not work, and the second was that
the symlink created using udev rules did not work. I have solved the
mystery of the second problem.
The reason for using udev was to create a known point to communicate to
DOS devices using a USB to serial converter. Typically, DOS programs use
COM1, COM2, etc as devices. They must always be at the same device node,
or else when plugging and unplugging devices, the DOS program cannot
search and adjust its node point, so a fixed node name is desired. I
used udev to create this device name as /dev/COM1 for this program. Then
the /etc/dosemu/dosemu.conf file can be adjusted to always look at
/dev/COM1 as COM1 for all DOS programs. Similarly, a symlink can then be
used under WINE in the dosdevices directory.
My udev rules worked and created a symlink to a COM1, to which I could
never send data, even though it worked for the original device node and
under a dosemu command prompt. The reason was in the manner in which
udev creates symlinks (which I do not fully understand).
My current and working rule is for a Belkin USB to serial converter:
/SUBSYSTEMS=="usb-serial", DRIVERS=="mct_u232", SYMLINK+="COM1",
GROUP="dialout", MODE="777"/
This recognizes the USB to serial converter when it is plugged in and
then adds a symlink to it as /dev/COM1.
The problem arose due to matching udev parameters, but not at the
correct level in the hierarchy.
Explanation:
Using the /udevinfo -a -p $(udevinfo -q path -n /dev/ttyUSB0)/ command
yields:
looking at device '/class/tty/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="tty"
DRIVER==""
ATTR{dev}=="188:0"
looking at parent device
'/devices/pci0000:00/0000:00:13.0/usb1/1-1/1-1:1.0/ttyUSB0':
KERNELS=="ttyUSB0"
/SUBSYSTEMS=="usb-serial"/
/DRIVERS=="mct_u232"/
looking at parent device
'/devices/pci0000:00/0000:00:13.0/usb1/1-1/1-1:1.0':
KERNELS=="1-1:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="mct_u232"
ATTRS{modalias}=="usb:v050Dp0109d0102dc00dsc00dp00icFFiscFFipFF"
ATTRS{bInterfaceProtocol}=="ff"
ATTRS{bInterfaceSubClass}=="ff"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bNumEndpoints}=="03"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceNumber}=="00"
looking at parent device '/devices/pci0000:00/0000:00:13.0/usb1/1-1':
KERNELS=="1-1"
*SUBSYSTEMS=="usb"*
DRIVERS=="usb"
ATTRS{serial}=="927135"
*ATTRS{product}=="Belkin Components"*
ATTRS{manufacturer}=="Belkin USB PDA Adapter"
ATTRS{quirks}=="0x0"
ATTRS{maxchild}=="0"
ATTRS{version}==" 1.10"
ATTRS{devnum}=="4"
ATTRS{busnum}=="1"
ATTRS{speed}=="12"
ATTRS{bMaxPacketSize0}=="16"
ATTRS{bNumConfigurations}=="1"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceClass}=="00"
ATTRS{bcdDevice}=="0102"
ATTRS{idProduct}=="0109"
.
.
.
.
When I used the wrong parameters *
SUBSYSTEMS=="usb"/ /and*
*ATTRS{product}=="Belkin Components"
*I got a symlink which did not work and was of the form: crwxrwxrwx 1
root dialout 254, 11 2007-12-18 11:16 ./usbdev1.4_ep02, and also did not
work, since major device 254 is an experimental device node.
When I moved up into the udev description and used
/SUBSYSTEMS=="usb-serial"/
/DRIVERS=="mct_u232"
/the symlink became
lrwxrwxrwx 1 root root 7 2007-12-18 11:43 COM1 -> ttyUSB0
and it now works just as well as if I were using /dev/ttyUSB0.
This problem is solved, but I still have not gotten my qbasic program to
use the serial port.
Charlie Morrison
//
--
Charlie Morrison
American LED-gible, Inc
1776 Lone Eagle Street
Columbus, OH 43228 USA
614-851-1100
FAX 614-851-1121
We use ISO 26300 document standards available through Open Office at http://www.openoffice.org
More information about the colug432
mailing list