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=168221and : 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-walk 4. 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

Code:
tail -f /var/log/messages

When a device is plugged in, the screen will update with the newest messages, usually imparting some knowledge on the location of the new device. My USB flash disc for example, produced this output when plugged in.

Apr 30 16:37:01 localhost kernel: [4294885.683000] usb 1-3: new full speed USB device using ohci_hcd and address 6

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)

The output shows that the USB device attached is assigned the device node
/dev/sdd
. You may also want to determine the partition number using

Code:
sudo fdisk -l

For my USB flash disc, the partition is /dev/sdd1.



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

Code:
udevinfo -a -p $(udevinfo -q path -n /dev/sdd)

This command outputs a lot information about the hardware associated with
/dev/sdd
. I've left out a lot of the information, leaving only the section I think is most relevant. This section contains the more specific information about my USB flash disc.



Note the bolded text in the output. It is important that information used in a udev rule is contained in the one section.

Code:
udevinfo starts with the device the node belongs to and then walks up the
device chain, to print for every device found, all possibly useful attributes
in 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

Code:
sudo nano /etc/udev/rules.d/10-local.rules

By naming my set of rules 10-local.rules they should be looked at before the other rules set in this folder.



The rule I will use for the flash disc looks like this.

BUS=="usb",
SYSFS{product}=="TS128MJFLASHA", KERNEL=="sd?1",NAME="transcend128mb",SYMLINK="usbdevices/transcend128mb"

A quick explanation.



- 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

Code:
sudo udevstart

You can also restart udev using

Code:
sudo /etc/init.d/udev restart    #you may need to reboot your linux system if this doesn't work.

This should work for later versions of udev, that don't appear to use the udevstart command



- thanks to ash211 for pointing this out



Now to quickly check that the new node for my example has been created.

Code:
user@ubuntu:~$ ls -l /dev/trans*
brw-r----- 1 root plugdev 8, 49 2006-04-30 16:37 /dev/transcend128mb
user@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

Code:
sudo cp /etc/fstab /etc/fstab_backup
sudo nano /etc/fstab

Then we can add an entry for the example USB device using either the device node
or
the symlink (if used), so in my example I could either use the new device node

Code:
/dev/transcend128mb  /media/usb128mb  vfat  iocharset=utf8,umask=000   0   0

or the symlink to the node, which I prefer as all my USB devices have symlinks in /dev/usbdevices. I think makes the fstab look neater.

Code:
/dev/usbdevices/transcend128mb  /media/usb128mb vfat iocharset=utf8,umask=000  0  0

When the entry has been correctly entered, you can save the file (Ctrl+O) and exit (Ctrl+X), and then mount the device, in this example my USB disc using

Code:
sudo mount /media/usb128mb

or

Code:
sudo mount -a

Once this is all completed, the example USB drive will always appear at /dev/transcend128mb so the entry in the fstab can remain unchanged and will always find the device.





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系统中的设备调用名称的更多相关文章

  1. Linux系统中存储设备的两种表示方法

    转:https://blog.csdn.net/holybin/article/details/38637381 一.对于IDE接口的硬盘的两种表示方法: 1.IDE接口硬盘,对于整块硬盘的两种表示方 ...

  2. Linux系统中常见的目录名称以及相应内容

    目录名称 应放置文件的内容 /boot 开机所需文件——内核.开机菜单以及所需配置文件等等 /dev 以文件形式存放任何设备与接口 /etc 配置文件 /home 用户家目录 /bin 存放单用户模式 ...

  3. 龙尚3G、4G模块嵌入式Linux系统使用说明【转】

    本文转载自;http://blog.csdn.net/zqixiao_09/article/details/52506812 驱动部分: 1.kernle/drivers/usb/serial/opt ...

  4. Android OTG之USB转串口模块通讯

    微信公众号:CodingAndroid CSDN:http://blog.csdn.net/xinpengfei521 1.背景简介 我们公司开发了一款室内机平板APP应用,要求平板能去控制智能门锁. ...

  5. Linux系统中的硬件问题如何排查?(3)

    Linux系统中的硬件问题如何排查?(3) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工 ...

  6. Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

    Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://b ...

  7. Linux系统中“动态库”和“静态库”那点事儿【转】

    转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻. ...

  8. LINUX系统中动态链接库的创建与使用

    大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部 ...

  9. LINUX系统中动态链接库的创建与使用{补充}

    大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部 ...

随机推荐

  1. WebService安全性的几种实现方法【身份识别】

     转:http://blog.csdn.net/yongping8204/article/details/8619577 WebService安全性的几种实现方法[身份识别] 标签: webservi ...

  2. MyBatis中的@Mapper注解及配套注解使用详解(上)

    前言: 从mybatis3.4.0开始加入了@Mapper注解,目的就是为了不再写mapper映射文件(那个xml写的是真的蛋疼...).很恶心的一个事实是源码中并没有对于这个注解的详细解释 现在我们 ...

  3. 黄聪:HBuilder左侧项目管理器如何不与标签页一起自动切换

    把这个按钮取消就好了

  4. 【亲测可用,亦可配置同一平台的不同账号,例如阿里云的两个不同账号】Windows下Git多账号配置,同一电脑多个ssh-key的管理

    Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章<Git-TortoiseGit完整配置流程>的拓展,所以需要对上一篇文章有所了解,当然直接 ...

  5. mvc 缓存 sqlCacheDependency 监听数据变化

    mvc 缓存   对于MVC有Control缓存和Action缓存. 一.Control缓存 Control缓存即是把缓存应用到整个Control上,该Control下的所有Action都会被缓存起来 ...

  6. SVM的sklearn实现

    转载:豆-Metcalf 1)SVM-LinearSVC.ipynb-线性分类SVM,iris数据集分类,正确率100% """ 功能:实现线性分类支持向量机 说明:可以 ...

  7. bzoj5050: 建造摩天楼

    Description 属于小Q管辖的n座摩天楼从左往右排成一排,编号依次为1到n,第i座摩天楼的高度为h_i.小Q会进行m次以下两种 操作之一: 2 l r,询问h_l+h_{l+1}+...+h_ ...

  8. bzoj4480: [Jsoi2013]快乐的jyy

    [问题描述] 给定两个字符串A和B,表示JYY的两个朋友的名字.我们用A(i,j)表示A 字符串中从第i个字母到第j个字母所组成的子串.同样的,我们也可以定义B(x,y). JYY发现两个朋友关系的紧 ...

  9. 学习笔记之The Intelligent Investor, Rev. Ed

    The Intelligent Investor, Rev. Ed https://www.safaribooksonline.com/library/view/the-intelligent-inv ...

  10. Jmeter(三十一)Jmeter Question 之 乱码解读

    众所周知,编码的问题影响着众多开发者,当然见多不怪. 先扒了一个编码的原因,也就是为什么要编码: 计算机中存储信息的最小单元是一个字节即 8 个 bit,所以能表示的字符范围是 0~255 个 人类要 ...