{"componentChunkName":"component---src-templates-blog-post-js","path":"/raspberry_pi/2020-08-06-Raspberry-Pi-3-B+-USB-포트-고정/","result":{"data":{"site":{"siteMetadata":{"title":"Jinote","author":"jinoan","siteUrl":"https://jinoan.netlify.app","comment":{"disqusShortName":"","utterances":"jinoan/blog-comment"},"sponsor":{"buyMeACoffeeId":"jinoan"}}},"markdownRemark":{"id":"403f9a3a-04fe-5b32-a851-d1f1b2c9fd41","excerpt":"라즈베리파이에서 시리얼 통신할 때 USB 포트가 변경되면서 끊어지는 현상 발생. USB 장치의 고유 정보를 이용해서 포트가 변경돼도 변경된 포트로 통신이 이어지도록 이름을 지정해 줄 수 있다. 터미널에서  입력 여기서 필요한 정보 출력문 중에서  다음에 오는 문자. 여기서는  자동 할당된 USB…","html":"<p>라즈베리파이에서 시리얼 통신할 때 USB 포트가 변경되면서 끊어지는 현상 발생.<br>\nUSB 장치의 고유 정보를 이용해서 포트가 변경돼도 변경된 포트로 통신이 이어지도록 이름을 지정해 줄 수 있다.</p>\n<ol>\n<li>\n<p>터미널에서 <code class=\"language-text\">dmesg | grep ttyUSB</code> 입력</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">$ <span class=\"token function\">dmesg</span> <span class=\"token operator\">|</span> <span class=\"token function\">grep</span> ttyUSB\n<span class=\"token punctuation\">[</span>    <span class=\"token number\">5.652316</span><span class=\"token punctuation\">]</span> usb <span class=\"token number\">1</span>-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB0</code></pre></div>\n<p>여기서 필요한 정보</p>\n<ul>\n<li>출력문 중에서 <code class=\"language-text\">usb</code> 다음에 오는 문자. 여기서는 <code class=\"language-text\">1-1.1.2</code></li>\n<li>자동 할당된 USB 포트. 여기서는 <code class=\"language-text\">ttyUSB0</code></li>\n</ul>\n</li>\n<li>\n<p>터미널에서 <code class=\"language-text\">udevadm info --name=/dev/ttyUSB0 --attribute-walk</code> 입력</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">looking at parent device <span class=\"token string\">'/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2'</span><span class=\"token builtin class-name\">:</span>\n   <span class=\"token assign-left variable\">KERNELS</span><span class=\"token operator\">==</span><span class=\"token string\">\"1-1.1.2\"</span>\n   <span class=\"token assign-left variable\">SUBSYSTEMS</span><span class=\"token operator\">==</span><span class=\"token string\">\"usb\"</span>\n   <span class=\"token assign-left variable\">DRIVERS</span><span class=\"token operator\">==</span><span class=\"token string\">\"usb\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>idProduct<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"6001\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>devnum<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"4\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>bNumConfigurations<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"1\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>devpath<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"1.1.2\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>serial<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"AR0JXJ3Q\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>authorized<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"1\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>manufacturer<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"FTDI\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>busnum<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"1\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>bmAttributes<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"a0\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>avoid_reset_quirk<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"0\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>bMaxPacketSize0<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"8\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>quirks<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"0x0\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>devspec<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"  (null)\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>configuration<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>bDeviceSubClass<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"00\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>tx_lanes<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"1\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>rx_lanes<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"1\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>product<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"FT232R USB UART\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>urbnum<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"5488424\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>ltm_capable<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"no\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>version<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\" 2.00\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>bMaxPower<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"90mA\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>removable<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"removable\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>bcdDevice<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"0600\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>bDeviceProtocol<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"00\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>bDeviceClass<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"00\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>bNumInterfaces<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\" 1\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>idVendor<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"0403\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>bConfigurationValue<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"1\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>maxchild<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"0\"</span>\n   ATTRS<span class=\"token punctuation\">{</span>speed<span class=\"token punctuation\">}</span><span class=\"token operator\">==</span><span class=\"token string\">\"12\"</span></code></pre></div>\n<p><code class=\"language-text\">looking at parent device</code> 라고 나오는 줄의 끝 문자열이 <code class=\"language-text\">1-1.1.2</code> 인 부분을 찾는다.<br>\n여러 속성 중에서 장치를 특정할 수 있는 정보를 기억해 둘 것.</p>\n<p>예를 들어 <code class=\"language-text\">ATTRS{idProduct}==&quot;6001&quot;</code> 이 부분을 기억해 둔다.</p>\n<p>일반적으로 <code class=\"language-text\">idProduct</code>, <code class=\"language-text\">idVendor</code>, <code class=\"language-text\">serial</code> 을 사용.</p>\n</li>\n<li>\n<p>USB 포트 이름 규칙 생성</p>\n<p><code class=\"language-text\">/etc/udev/rules.d/</code> 폴더 안에 <code class=\"language-text\">.rules</code> 파일 생성.<br>\n예를 들어 <code class=\"language-text\">sudo nano /etc/udev/rules.d/10-usb-serial.rules</code><br>\n파일명에서 숫자 10은 rules 파일 실행 우선순위를 나타내는데 굳이 안 따라도 된다.</p>\n<p>파일 안에 다음처럼 입력하고 저장</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">SUBSYSTEM==&quot;tty&quot;, ATTRS{idProduct}==&quot;6001&quot;, ATTRS{idVendor}==&quot;0403&quot;, ATTRS{serial}==&quot;AR0JXJ3Q&quot;, SYMLINK+=&quot;ttyUSB_DEV1&quot;</code></pre></div>\n<p><code class=\"language-text\">SYMLINK</code> 에 있는 <code class=\"language-text\">ttyUSB_DEV1</code> 이 앞으로 사용하게 될 포트 명이다. 당연히 다른 이름으로 해도 됨.</p>\n</li>\n<li><code class=\"language-text\">sudo udevadm trigger</code> 명령으로 변경사항 적용</li>\n<li>\n<p><code class=\"language-text\">ls -l /dev/ttyUSB*</code> 을 쳐서 변경사항 확인</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">$ <span class=\"token function\">ls</span> -l /dev/ttyUSB*\ncrw-rw---- <span class=\"token number\">1</span> root dialout <span class=\"token number\">188</span>, <span class=\"token number\">0</span> Aug  <span class=\"token number\">5</span> 03:19 /dev/ttyUSB0\nlrwxrwxrwx <span class=\"token number\">1</span> root root         <span class=\"token number\">7</span> Aug  <span class=\"token number\">5</span> 03:19 /dev/ttyUSB_DEV1 -<span class=\"token operator\">></span> ttyUSB0</code></pre></div>\n</li>\n</ol>\n<blockquote>\n<p>참고</p>\n<ul>\n<li><a href=\"https://www.freva.com/2019/06/20/assign-fixed-usb-port-names-to-your-raspberry-pi/\">https://www.freva.com/2019/06/20/assign-fixed-usb-port-names-to-your-raspberry-pi/</a></li>\n<li><a href=\"https://mokga.tistory.com/54\">https://mokga.tistory.com/54</a></li>\n</ul>\n</blockquote>","frontmatter":{"title":"Raspberry Pi 3 B+ USB 포트 고정","date":"August 06, 2020"}}},"pageContext":{"slug":"/raspberry_pi/2020-08-06-Raspberry-Pi-3-B+-USB-포트-고정/","previous":{"fields":{"slug":"/sqlalchemy/2020-08-03-SQLAlchemy-CRUD/"},"frontmatter":{"title":"SQLAlchemy CRUD","category":"sqlalchemy","draft":false}},"next":{"fields":{"slug":"/docker/docker-compose로-redis-server-생성하기/"},"frontmatter":{"title":"Docker Compose로 Redis Server 생성하기","category":"docker","draft":false}}}},"staticQueryHashes":["3128451518","521680639"]}