Consistent Linux device enumeration2019 Community Moderator ElectionIs pvcreate destructive? Attempting to recover an lvm2 volume groupHow to check if unmount of USB device is completed?Safely remove usb from linux deviceHow to make a USB device report as “device busy”?Consistent enumeration of a btattached controllerHow to safely insert USB stick/device to Linux computer?why doesn't lsusb list a deviceSpecify Function on USB DeviceLinux - Why are my core IDs not consistent?AT commands communication establishment in Linux USB device driver
Find fails if filename contains brackets
Organic chemistry Iodoform Reaction
Does the Large evolution retroactively increase the cost of Ability Increase evolutions?
How do I repair my stair bannister?
Calculating the number of days between 2 dates in Excel
What is this type of notehead called?
What linear sensor for a keyboard?
Getting the lowest value with key in array
Should my PhD thesis be submitted under my legal name?
Have I saved too much for retirement so far?
Suggestion on Missing Index Creation
How to prevent YouTube from showing already watched videos?
Freedom of speech and where it applies
What would you call a finite collection of unordered objects that are not necessarily distinct?
Why did the EU agree to delay the Brexit deadline?
How will losing mobility of one hand affect my career as a programmer?
What should I use for Mishna study?
Why does the compiler allow throws when the method will never throw the Exception
Can an armblade require double attunement if it integrates a magic weapon that normally requires attunement?
Female=gender counterpart?
What is the term when two people sing in harmony, but they aren't singing the same notes?
JavaScript array of objects contains the same array data
Are MQTT Brokers able to retain/cache some data for a certain amount of time and then send to the subscribers?
Make "apt-get update" show the exact output as `apt update`
Consistent Linux device enumeration
2019 Community Moderator ElectionIs pvcreate destructive? Attempting to recover an lvm2 volume groupHow to check if unmount of USB device is completed?Safely remove usb from linux deviceHow to make a USB device report as “device busy”?Consistent enumeration of a btattached controllerHow to safely insert USB stick/device to Linux computer?why doesn't lsusb list a deviceSpecify Function on USB DeviceLinux - Why are my core IDs not consistent?AT commands communication establishment in Linux USB device driver
In our Linux box we have USB -> serial device which was always identified as/dev/ttyACM0. So I've written an application and until yesterday, everything worked fine. But suddenly (yeah, during the remote presentation ...) the device stopped working. After quick research, I found that the connection changed to /dev/ttyACM1. It was a little untimely, but now I have a problem - how to unambiguously identify my device? Like, for example, the storage drive could be initialized using UUID although the /dev/sd** has changed. Is there some way to do that for serial devices?
Now I use a stupid workaround:
for(int i = 0; i < 10; i ++)
m_port = std::string("/dev/ttyACM") + (char)('0' + i);
m_fd = open(m_port.c_str(), O_RDWR
The link to the device we use.
linux usb-device
add a comment |
In our Linux box we have USB -> serial device which was always identified as/dev/ttyACM0. So I've written an application and until yesterday, everything worked fine. But suddenly (yeah, during the remote presentation ...) the device stopped working. After quick research, I found that the connection changed to /dev/ttyACM1. It was a little untimely, but now I have a problem - how to unambiguously identify my device? Like, for example, the storage drive could be initialized using UUID although the /dev/sd** has changed. Is there some way to do that for serial devices?
Now I use a stupid workaround:
for(int i = 0; i < 10; i ++)
m_port = std::string("/dev/ttyACM") + (char)('0' + i);
m_fd = open(m_port.c_str(), O_RDWR
The link to the device we use.
linux usb-device
add a comment |
In our Linux box we have USB -> serial device which was always identified as/dev/ttyACM0. So I've written an application and until yesterday, everything worked fine. But suddenly (yeah, during the remote presentation ...) the device stopped working. After quick research, I found that the connection changed to /dev/ttyACM1. It was a little untimely, but now I have a problem - how to unambiguously identify my device? Like, for example, the storage drive could be initialized using UUID although the /dev/sd** has changed. Is there some way to do that for serial devices?
Now I use a stupid workaround:
for(int i = 0; i < 10; i ++)
m_port = std::string("/dev/ttyACM") + (char)('0' + i);
m_fd = open(m_port.c_str(), O_RDWR
The link to the device we use.
linux usb-device
In our Linux box we have USB -> serial device which was always identified as/dev/ttyACM0. So I've written an application and until yesterday, everything worked fine. But suddenly (yeah, during the remote presentation ...) the device stopped working. After quick research, I found that the connection changed to /dev/ttyACM1. It was a little untimely, but now I have a problem - how to unambiguously identify my device? Like, for example, the storage drive could be initialized using UUID although the /dev/sd** has changed. Is there some way to do that for serial devices?
Now I use a stupid workaround:
for(int i = 0; i < 10; i ++)
m_port = std::string("/dev/ttyACM") + (char)('0' + i);
m_fd = open(m_port.c_str(), O_RDWR
The link to the device we use.
linux usb-device
linux usb-device
edited Mar 20 at 11:03
Anthony Geoghegan
7,93654055
7,93654055
asked Mar 20 at 7:10
folibisfolibis
20229
20229
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Since we are talking USB devices and assuming you have udev, you could setup some udev rules.
I guess, and this is just a wild guess, somebody or something unplugged/removed the device and plugged it back in/added the device again, which bumps up the number.
Now, first you need vendor and product id's:
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 011: ID 0403:6001 FTDI FT232 USB-Serial (UART) IC
Next, you need the serial number (in case you have several):
# udevadm info -a -n /dev/ttyUSB1 | grep 'serial' | head -n1
ATTRSserial=="A6008isP"
Now, lets create a udev rule:
UDEV rules are usually scattered into many files in /etc/udev/rules.d. Create a new file called 99-usb-serial.rules and put the following line in there, I have three devices, each with a a different serial number:
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="A6008isP", SYMLINK+="MySerialDevice"
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="A7004IXj", SYMLINK+="MyOtherSerialDevice"
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="FTDIF46B", SYMLINK+="YetAnotherSerialDevice"
ls -l /dev/MySerialDevice
lrwxrwxrwx 1 root root 7 Nov 25 22:12 /dev/MySerialDevice -> ttyUSB1
If you do not want the serial number, any device from vendor with same chip will then get the same symlink, only one can be plugged in at any given time.
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", SYMLINK+="MySerialDevice"
Taken from here
3
If you have a recent linux distribution, most likely it already automatically creates the device as/dev/serial/by-id/usb-XXXX_USB2.0-Serial-if00-port0. This might be enough for you without custom udev rules.
– Josef
Mar 20 at 10:07
1
Unfortunately, many no-name devices all have the serial number "0123456789abcdef". That's where it gets interesting.
– mosvy
Mar 20 at 11:03
@mosvy are serial numbers unchangable?
– OganM
Mar 20 at 20:05
@OganM they may be changed ... if you're able to root the devices.
– mosvy
Mar 20 at 20:24
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f507349%2fconsistent-linux-device-enumeration%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Since we are talking USB devices and assuming you have udev, you could setup some udev rules.
I guess, and this is just a wild guess, somebody or something unplugged/removed the device and plugged it back in/added the device again, which bumps up the number.
Now, first you need vendor and product id's:
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 011: ID 0403:6001 FTDI FT232 USB-Serial (UART) IC
Next, you need the serial number (in case you have several):
# udevadm info -a -n /dev/ttyUSB1 | grep 'serial' | head -n1
ATTRSserial=="A6008isP"
Now, lets create a udev rule:
UDEV rules are usually scattered into many files in /etc/udev/rules.d. Create a new file called 99-usb-serial.rules and put the following line in there, I have three devices, each with a a different serial number:
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="A6008isP", SYMLINK+="MySerialDevice"
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="A7004IXj", SYMLINK+="MyOtherSerialDevice"
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="FTDIF46B", SYMLINK+="YetAnotherSerialDevice"
ls -l /dev/MySerialDevice
lrwxrwxrwx 1 root root 7 Nov 25 22:12 /dev/MySerialDevice -> ttyUSB1
If you do not want the serial number, any device from vendor with same chip will then get the same symlink, only one can be plugged in at any given time.
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", SYMLINK+="MySerialDevice"
Taken from here
3
If you have a recent linux distribution, most likely it already automatically creates the device as/dev/serial/by-id/usb-XXXX_USB2.0-Serial-if00-port0. This might be enough for you without custom udev rules.
– Josef
Mar 20 at 10:07
1
Unfortunately, many no-name devices all have the serial number "0123456789abcdef". That's where it gets interesting.
– mosvy
Mar 20 at 11:03
@mosvy are serial numbers unchangable?
– OganM
Mar 20 at 20:05
@OganM they may be changed ... if you're able to root the devices.
– mosvy
Mar 20 at 20:24
add a comment |
Since we are talking USB devices and assuming you have udev, you could setup some udev rules.
I guess, and this is just a wild guess, somebody or something unplugged/removed the device and plugged it back in/added the device again, which bumps up the number.
Now, first you need vendor and product id's:
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 011: ID 0403:6001 FTDI FT232 USB-Serial (UART) IC
Next, you need the serial number (in case you have several):
# udevadm info -a -n /dev/ttyUSB1 | grep 'serial' | head -n1
ATTRSserial=="A6008isP"
Now, lets create a udev rule:
UDEV rules are usually scattered into many files in /etc/udev/rules.d. Create a new file called 99-usb-serial.rules and put the following line in there, I have three devices, each with a a different serial number:
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="A6008isP", SYMLINK+="MySerialDevice"
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="A7004IXj", SYMLINK+="MyOtherSerialDevice"
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="FTDIF46B", SYMLINK+="YetAnotherSerialDevice"
ls -l /dev/MySerialDevice
lrwxrwxrwx 1 root root 7 Nov 25 22:12 /dev/MySerialDevice -> ttyUSB1
If you do not want the serial number, any device from vendor with same chip will then get the same symlink, only one can be plugged in at any given time.
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", SYMLINK+="MySerialDevice"
Taken from here
3
If you have a recent linux distribution, most likely it already automatically creates the device as/dev/serial/by-id/usb-XXXX_USB2.0-Serial-if00-port0. This might be enough for you without custom udev rules.
– Josef
Mar 20 at 10:07
1
Unfortunately, many no-name devices all have the serial number "0123456789abcdef". That's where it gets interesting.
– mosvy
Mar 20 at 11:03
@mosvy are serial numbers unchangable?
– OganM
Mar 20 at 20:05
@OganM they may be changed ... if you're able to root the devices.
– mosvy
Mar 20 at 20:24
add a comment |
Since we are talking USB devices and assuming you have udev, you could setup some udev rules.
I guess, and this is just a wild guess, somebody or something unplugged/removed the device and plugged it back in/added the device again, which bumps up the number.
Now, first you need vendor and product id's:
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 011: ID 0403:6001 FTDI FT232 USB-Serial (UART) IC
Next, you need the serial number (in case you have several):
# udevadm info -a -n /dev/ttyUSB1 | grep 'serial' | head -n1
ATTRSserial=="A6008isP"
Now, lets create a udev rule:
UDEV rules are usually scattered into many files in /etc/udev/rules.d. Create a new file called 99-usb-serial.rules and put the following line in there, I have three devices, each with a a different serial number:
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="A6008isP", SYMLINK+="MySerialDevice"
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="A7004IXj", SYMLINK+="MyOtherSerialDevice"
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="FTDIF46B", SYMLINK+="YetAnotherSerialDevice"
ls -l /dev/MySerialDevice
lrwxrwxrwx 1 root root 7 Nov 25 22:12 /dev/MySerialDevice -> ttyUSB1
If you do not want the serial number, any device from vendor with same chip will then get the same symlink, only one can be plugged in at any given time.
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", SYMLINK+="MySerialDevice"
Taken from here
Since we are talking USB devices and assuming you have udev, you could setup some udev rules.
I guess, and this is just a wild guess, somebody or something unplugged/removed the device and plugged it back in/added the device again, which bumps up the number.
Now, first you need vendor and product id's:
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 011: ID 0403:6001 FTDI FT232 USB-Serial (UART) IC
Next, you need the serial number (in case you have several):
# udevadm info -a -n /dev/ttyUSB1 | grep 'serial' | head -n1
ATTRSserial=="A6008isP"
Now, lets create a udev rule:
UDEV rules are usually scattered into many files in /etc/udev/rules.d. Create a new file called 99-usb-serial.rules and put the following line in there, I have three devices, each with a a different serial number:
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="A6008isP", SYMLINK+="MySerialDevice"
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="A7004IXj", SYMLINK+="MyOtherSerialDevice"
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", ATTRSserial=="FTDIF46B", SYMLINK+="YetAnotherSerialDevice"
ls -l /dev/MySerialDevice
lrwxrwxrwx 1 root root 7 Nov 25 22:12 /dev/MySerialDevice -> ttyUSB1
If you do not want the serial number, any device from vendor with same chip will then get the same symlink, only one can be plugged in at any given time.
SUBSYSTEM=="tty", ATTRSidVendor=="0403", ATTRSidProduct=="6001", SYMLINK+="MySerialDevice"
Taken from here
edited Mar 20 at 8:49
answered Mar 20 at 7:58
thecarpythecarpy
2,6501028
2,6501028
3
If you have a recent linux distribution, most likely it already automatically creates the device as/dev/serial/by-id/usb-XXXX_USB2.0-Serial-if00-port0. This might be enough for you without custom udev rules.
– Josef
Mar 20 at 10:07
1
Unfortunately, many no-name devices all have the serial number "0123456789abcdef". That's where it gets interesting.
– mosvy
Mar 20 at 11:03
@mosvy are serial numbers unchangable?
– OganM
Mar 20 at 20:05
@OganM they may be changed ... if you're able to root the devices.
– mosvy
Mar 20 at 20:24
add a comment |
3
If you have a recent linux distribution, most likely it already automatically creates the device as/dev/serial/by-id/usb-XXXX_USB2.0-Serial-if00-port0. This might be enough for you without custom udev rules.
– Josef
Mar 20 at 10:07
1
Unfortunately, many no-name devices all have the serial number "0123456789abcdef". That's where it gets interesting.
– mosvy
Mar 20 at 11:03
@mosvy are serial numbers unchangable?
– OganM
Mar 20 at 20:05
@OganM they may be changed ... if you're able to root the devices.
– mosvy
Mar 20 at 20:24
3
3
If you have a recent linux distribution, most likely it already automatically creates the device as
/dev/serial/by-id/usb-XXXX_USB2.0-Serial-if00-port0. This might be enough for you without custom udev rules.– Josef
Mar 20 at 10:07
If you have a recent linux distribution, most likely it already automatically creates the device as
/dev/serial/by-id/usb-XXXX_USB2.0-Serial-if00-port0. This might be enough for you without custom udev rules.– Josef
Mar 20 at 10:07
1
1
Unfortunately, many no-name devices all have the serial number "0123456789abcdef". That's where it gets interesting.
– mosvy
Mar 20 at 11:03
Unfortunately, many no-name devices all have the serial number "0123456789abcdef". That's where it gets interesting.
– mosvy
Mar 20 at 11:03
@mosvy are serial numbers unchangable?
– OganM
Mar 20 at 20:05
@mosvy are serial numbers unchangable?
– OganM
Mar 20 at 20:05
@OganM they may be changed ... if you're able to root the devices.
– mosvy
Mar 20 at 20:24
@OganM they may be changed ... if you're able to root the devices.
– mosvy
Mar 20 at 20:24
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f507349%2fconsistent-linux-device-enumeration%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown