重新指派usb转串口模块在linux系统中的设备调用名称
来源:互联网 发布:windows hadoop2.7.3 编辑:程序博客网 时间:2024/06/07 23:33
How to remap /dev/ttyUSB* to a specific name to be called by my program.
How to map /dev/ttyUSB* to specific device.
ref: How can I match a ttyUSBX device to a usb serial device
ref: http://unix.stackexchange.com/questions/81754/how-can-i-match-a-ttyusbx-device-to-a-usb-serial-device
ref: http://ubuntuforums.org/showthread.php?t=168221
and : http://unix.stackexchange.com/questions/64266/putty-can-access-serial-port-as-dev-ttyusb0-but-not-as-named-udev-device
Quickly Reference/Steps:
Brief Steps:1. Command: >> lsusb This lists your usb devices and "067b:2303",for instance, as its ID or: >> ls -l /sys/bus/usb-serial/devices An other locations worth exploring are /sys/class/tty/2. Write this to /etc/udev/rules.d/50-usb.rules ---- SUBSYSTEM=="tty", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", SYMLINK+="ONDA" SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14ac", SYMLINK+="HUAWEI" ---- Reboot. Now you can use /dev/ONDA to get to your ONDA device. If you want non-root users to be able to use these, then add ---- , MODE="0666" ---- to the end of each line. 3. To get enough information to distinguish the devices try something like this for all devices: Command: >> $ udevadm info --query all -name /dev/ttyUSB0 --attribute-walk4. To start using these new rules, you need to run the command udevstart Command: >> sudo udevstart You can also restart udev using Command: >> sudo /etc/init.d/udev restart #you may need to reboot if this doesn't work. 5. Command: >>
Create your own udev rules to control removable devices
I'm sure many people who use removable devices have noticed that sometimes they don't appear where they were before.You plug your USB drive in, and use fdisk to find the device node and then mount it. Sometimes the USB appears as /dev/sda1, sometimes /dev/sdb1. It can depend on what order you plug in your USB devices, and where you plug them in. This is a real pain if you mount devices manually or if you are trying to customise your /etc/fstab.
udev allows the assignment of a persistant device node, /dev/..., based on a rule match defined by your specific hardware. In other words, if a device is attached that matches certain criteria it is given it's own device node, rather than being assigned a dynamic one.
It's actually really easy to setup.
To start with you need to know the dynamic device node that is given to a device when attached for the first time. The way that I would do this is to use thetail command
tail -f /var/log/messages
Apr 30 16:37:01 localhost kernel: [4294885.853000] scsi5 : SCSI emulation for USB Mass Storage devices
Apr 30 16:37:02 localhost usb.agent[10421]: usb-storage: already loaded
Apr 30 16:37:06 localhost kernel: [4294890.859000] Vendor: Model: TS128MJFLASHA Rev: 1.00
Apr 30 16:37:06 localhost kernel: [4294890.859000] Type: Direct-Access ANSI SCSI revision: 02
Apr 30 16:37:06 localhost kernel: [4294890.883000] SCSI device sdd: 253400 512-byte hdwr sectors (130 MB)
Apr 30 16:37:06 localhost kernel: [4294890.896000] sdd: Write Protect is off
Apr 30 16:37:06 localhost kernel: [4294890.924000] SCSI device sdd: 253400 512-byte hdwr sectors (130 MB)
Apr 30 16:37:06 localhost kernel: [4294890.937000] sdd: Write Protect is off
Apr 30 16:37:07 localhost kernel: [4294890.937000] /dev/scsi/host5/bus0/target0/lun0: p1
Apr 30 16:37:07 localhost kernel: [4294891.046000] Attached scsi removable disk sdd at scsi5, channel 0, id 0, lun 0
Apr 30 16:37:07 localhost scsi.agent[10469]: sd_mod: loaded sucessfully (for disk)
sudo fdisk -l
So next thing is to find out some unique information from the device, information that will be used in defining the udev rule, remembering a match is required to assign the persistant node. The next command I have used is from theWriting udev rules link at the bottom of this HOWTO
udevinfo -a -p $(udevinfo -q path -n /dev/sdd)
Note the bolded text in the output. It is important that information used in a udev rule is contained in the one section.
udevinfo starts with the device the node belongs to and then walks up thedevice chain, to print for every device found, all possibly useful attributesin the udev key format.Only attributes within one device section may be used together in one rule,to match the device for which the node will be created. looking at the device chain at '/sys/devices/pci0000:00/0000:00:02.0/usb1/1-3': BUS=="usb" ID=="1-3" DRIVER=="usb" SYSFS{bConfigurationValue}=="1" SYSFS{bDeviceClass}=="00" SYSFS{bDeviceProtocol}=="00" SYSFS{bDeviceSubClass}=="00" SYSFS{bMaxPower}=="100mA" SYSFS{bNumConfigurations}=="1" SYSFS{bNumInterfaces}==" 1" SYSFS{bcdDevice}=="0100" SYSFS{bmAttributes}=="80" SYSFS{configuration}=="" SYSFS{devnum}=="6" SYSFS{idProduct}=="0005" SYSFS{idVendor}=="0c76" SYSFS{maxchild}=="0" SYSFS{product}=="TS128MJFLASHA" SYSFS{speed}=="12" SYSFS{version}==" 1.10"
The items that contain specific information regarding my USB disc have been coloured red. These are the two items of interest to me, the device is connected to theUSB bus, and the product is identified byTS128MJFLASHA
______
The next step is to create the udev rule concerning this device. I'll start by creating my own .rules file
sudo nano /etc/udev/rules.d/10-local.rules
The rule I will use for the flash disc looks like this.
- The BUS==”usb” and SYSFS{product}==”TS128MJFLASHA” options are the same as those I picked out from theudevinfo output.
- The option KERNEL="sd?1" will only match locations like /dev/sda1, /dev/sdb1 and more importantly, it won't match nodes like /dev/sda, /dev/sdb, which can be fdisk'ed. The 'Writing udev rules' guide also mentions this.
- The options NAME="128FLASH" and SYMLINK="usbdisc/128FLASH" will create the persistant node at /dev/transcend128mb and a symlink /dev/usbdisc/transcend128mb that points to the persistant node /dev/transcend128mb. The SYMLINK option is not required. The reason I have included it is so that all my USB devices will have a symlink starting with /dev/usbdevices/...
I just think its neater.
There are other options that could be used to create udev rules, such as GROUP=”some_group”, if you want to assigned the group ownership of the device node to a specific group, and MODE=”0660”, which would give the owner/group read and write permissions, likechmod.
The Writing udev rules guide contains some more detailed information on these other options.
______
To start using these new rules, you need to run the command udevstart
sudo udevstart
sudo /etc/init.d/udev restart #you may need to reboot your linux system if this doesn't work.
- thanks to ash211 for pointing this out
Now to quickly check that the new node for my example has been created.
user@ubuntu:~$ ls -l /dev/trans*brw-r----- 1 root plugdev 8, 49 2006-04-30 16:37 /dev/transcend128mbuser@ubuntu:~$ ls -l /dev/usbdevices/lrwxrwxrwx 1 root root 17 2006-04-30 16:37 transcend128mb -> ../transcend128mb
Finally the fstab can be edited to include the new persistant device node, but first we'll back it up
sudo cp /etc/fstab /etc/fstab_backupsudo nano /etc/fstab
/dev/transcend128mb /media/usb128mb vfat iocharset=utf8,umask=000 0 0
/dev/usbdevices/transcend128mb /media/usb128mb vfat iocharset=utf8,umask=000 0 0
sudo mount /media/usb128mb
sudo mount -a
And you're all done!
Hope that helps some people, like it did me.
Please let me know if this works for you, and of course if there are any typos, errors or things that need clarifying.
The useful links I needed to get this working
Kernel.org - udev
Writing udev rules
Last edited by Sutekh; May 27th, 2006 at02:02 PM.
- 重新指派usb转串口模块在linux系统中的设备调用名称
- Linux系统下使用USB转串口连接工业设备
- Linux USB虚拟串口设备
- linux 使用usb转串口模块并读串口数据
- Linux中的设备名称
- LINUX系统下USB转串口
- Linux系统 串口设备
- 虚拟机中的LINUX使用USB转串口
- 浅析usb转serial串口设备在linux内核中枚举创建及生成tty设备的全过程
- 浅析usb转serial串口设备在linux内核中枚举创建及生成tty设备的全过程
- 浅析usb转serial串口设备在linux内核中枚举创建及生成tty设备的全过程
- 浅析usb转serial串口设备在linux内核中枚举创建及生成tty设备的全过程
- 浅析usb转serial串口设备在linux内核中枚举创建及生成tty设备的全过
- 在Ubuntu下配置USB转串口设备的权限
- linux下如何使用USB转串口设备
- Linux下如何使用USB转串口设备
- Linux下USB转串口的模块编译安装问题
- linux USB 转串口
- ffmpeg混音(将多个声音合成一个)命令
- Android studio 的一些使用,如adb无线调试,用户名直接输入等
- onClick与onClientClick区别
- CSS3选择器
- iOS设置圆形(圆角)UIView、UIButton的简单方法
- 重新指派usb转串口模块在linux系统中的设备调用名称
- hdu hdoj 1598 find the most comfortable road【最小生成树】
- Android 之ExpandableListView几个特殊的属性
- 大话数据结构 第一章 读书笔记
- Sublime Text 3103 Crack 破解 注册码
- 加载大图多图内存溢出
- Java单元测试Junit(四)使用Cactus测试Servlet
- Java开发常用工具
- main函数第3个参数envp装的是什么