<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ubuntu中用udev规则绑定usb串口和映射别称的办法]]></title><description><![CDATA[<h3>1、为什么要把usb串口号映射绑定到usb口</h3>
<p dir="auto">  usb转串口设备是常用的外设，用来扩展主机的串口功能。在实操过程中，一个机器人底盘往往会外接多个usb转串口设备，如果不对这些串口设备利用udev规则加以区分，则每次系统上电时这些串口设备的设备号是随机分配的。比如超声波模块的串口第一次开机分配成ttyUSB0, 自动充电模块串口则分配了ttyUSB1这个串口号，然后你重新断电开机后会发现ttyUSB1竟然被系统分配给了超生波模块的串口号，导致超生波和充电模块的ros驱动都工作异常。<br />
  解决办法就是把usb口和串口设备进行绑定，同时给这个串口设备映射一个新的名字，比如第一个usb口和超声波串口进行绑定，绑定后超声波串口映射成一个新的名字bwSensors，超生波<br />
的ros驱动程序通过新名字bwSensors对串口进行操作，这样无论系统如何断电重启，都不会串台了。因为usb口的系统编号在关机重启后不会变化，绑定了usb口也就等价获取了静态分配的串口号。</p>
<h3>2、如何把usb串口设备绑定到usb口同时映射一个新名字</h3>
<h4>2.1确定要绑定的usb口在系统中的名字</h4>
<pre><code>#执行下列指令
dmesg --follow
</code></pre>
<p dir="auto">将usb串口设备插在你要绑定的usb口上，观察上面指令的输出信息，确定系统这次分配的串口号是什么，一般是ttyUSB0、ttyUSB1之类，如下图中attached to ttyUSB1表示给新插入的设备分配了ttyUSB1这个编号。</p>
<p dir="auto"><img src="/assets/uploads/files/1701670993993-1fc331d0-c579-4267-a72b-427eff9dc533-%E5%9B%BE%E7%89%87.png" alt="1fc331d0-c579-4267-a72b-427eff9dc533-图片.png" class=" img-responsive img-markdown" /><br />
再通过系统分配的串口号确定当前usb口的编号,下列指令输出信息中找到下图蓝色方框所在位置，红色方框内的2-2.3:1.0就是我们要获取的信息。</p>
<pre><code>#ttyUSB1要换成你上面实际获取的串口号
udevadm info /dev/ttyUSB1
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/1701671648866-814b7606-9513-424c-922c-536ceaea3ee6-%E5%9B%BE%E7%89%87.png" alt="814b7606-9513-424c-922c-536ceaea3ee6-图片.png" class=" img-responsive img-markdown" /></p>
<h4>2.2建立udev规则文件</h4>
<p dir="auto">在/etc/udev/rules.d/路径下新建95-persistent-serial.rules，如果文件之前存在，不用新建直接修改内容。</p>
<pre><code> sudo nano  /etc/udev/rules.d/95-persistent-serial.rules
</code></pre>
<p dir="auto">文件内容如下</p>
<pre><code>ACTION!="add", GOTO="persistent_serial_end"
SUBSYSTEM!="tty", GOTO="persistent_serial_end"
KERNEL!="ttyUSB[0-9]*", GOTO="persistent_serial_end"

KERNELS=="2-2.3:1.0"         ,SYMLINK="bwSensors" ,OWNER="xiaoqiang",    MODE="0666"

KERNELS=="2-2.4:1.0"         ,SYMLINK="bwIMU" ,OWNER="xiaoqiang",    MODE="0666"

LABEL="persistent_serial_end"
</code></pre>
<p dir="auto">KERNELS==“2-2.3:1.0” 中的"2-2.3:1.0"换成上面获取的usb口信息。<br />
SYMLINK=“bwSensors” 中的"bwSensors"就是我们要设置的别称，你可以修改成自己想要的名字。<br />
OWNER="xiaoqiang"中的"xiaoqiang"是系统当前用户名，要改成你自己的用户名。</p>
<pre><code>上面实列是把2-2.3:1.0这个usb口上的usb转串口设备绑定映射成bwSensors，把2-2.4:1.0这个usb口上的usb转串口设备绑定映射成bwIMU，
一行代表一个端口的映射，理论上几十个usb转串口设备都可以通过这种方式进行绑定区分，你只要添加对应内容就行。
</code></pre>
<p dir="auto">Ctrl + s保存后, Ctrl + x退出。</p>
<h4>2.3主机重启生效</h4>
<p dir="auto">重启后用ls /dev指令，一切正常的话会看到自己映射成功的设备号</p>
<pre><code>ls  /dev
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/1701674270874-f43b7848-4842-40f2-a574-40848cfc6d3c-%E5%9B%BE%E7%89%87.png" alt="f43b7848-4842-40f2-a574-40848cfc6d3c-图片.png" class=" img-responsive img-markdown" /></p>
]]></description><link>http://community.bwbot.org/topic/16624/ubuntu中用udev规则绑定usb串口和映射别称的办法</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 18:13:24 GMT</lastBuildDate><atom:link href="http://community.bwbot.org/topic/16624.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Dec 2023 07:18:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ubuntu中用udev规则绑定usb串口和映射别称的办法 on Mon, 04 Dec 2023 07:18:19 GMT]]></title><description><![CDATA[<p dir="auto">上面的方法是使用udev规则来绑定USB串口和映射别称，这可以解决在多台设备同时使用USB转串口设备时，每次系统重启后串口分配不一致的问题。这样我们就可以通过固定的名字来访问对应的串口设备了。<br />
需要注意的是，在创建udev规则文件时，要确保内容的正确性，并且在写完规则文件之后需要重启计算机以使新规则生效。另外，在编写udev规则文件时要注意权限问题，一般情况下需要使用root用户身份进行操作。</p>
]]></description><link>http://community.bwbot.org/post/17317</link><guid isPermaLink="true">http://community.bwbot.org/post/17317</guid><dc:creator><![CDATA[小助理]]></dc:creator><pubDate>Mon, 04 Dec 2023 07:18:19 GMT</pubDate></item></channel></rss>