usb-serial のデバイスファイル名を固定する方法

ルーターの設定,シリアルコンソール,arduinoのような自作デバイスで使うUSB-シリアル変換器は,udev を使うと

を自動設定できます.

うまく設定すると rootアカウントや sudo を使わずに シリアルポートが使えるようになり大変便利になります.

以下,具体的な手順をまとめます

USBデバイスのIDを調べる

バイスの識別子(ID)としては

  • USBデバイスのベンダーIDとプロダクトIDの組み合わせ
  • 製品固有のシリアル番号

などが利用できます


これらの識別子は dmesg で簡単に確認できます.

たとえば arduino uno を繋いだ場合は以下の通りです

[518136.789084] usb 3-5: new full-speed USB device number 22 using xhci_hcd
[518136.964454] usb 3-5: New USB device found, idVendor=2a03, idProduct=0043
[518136.964458] usb 3-5: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[518136.964460] usb 3-5: Product: Arduino Uno
[518136.964462] usb 3-5: Manufacturer: Arduino Srl            
[518136.964464] usb 3-5: SerialNumber: *****シリアル番号****
[520646.175416] cdc_acm 3-5:1.0: ttyACM0: USB ACM device

この場合

  • ベンダID,プロダクトIDは,それぞれ 2a03,0043
  • シリアルは伏せ字の部分

になります

また末尾の出力から,とりあえずデバイスファイルの名前は /dev/ttyACM0 となっていることがわかります

このデバイスファイル名を手がかりに udev にデバイスの情報を問い合わせます

$ udevadm info -a -n /dev/ttyACM0

大量に情報が出力されますが,重要なのは識別子に対応する ATTRS{idProduct} や ATTRS{serial} の出力です

 ATTRS{idProduct}=="0043"
 ATTRS{idVendor}=="2a03"
 ATTRS{serial}=="**シリアル番号**"

udev の設定ファイルの作成

設定ファイルを用意します.名前は /etc/udev/rules.d/99-serial.rules とします.

中身は以下の通り

SUBSYSTEM=="tty", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0043", ATTRS{serial}=="**シリアル番号**", SYMLINK+="arduino", MODE="0666"

この設定内容で

になります.

設定を反映させます

$ sudo /etc/init.d/udev reload

動作確認

USBデバイスを挿し直します

/dev/arduino というシンボリックリンクが自動作成されれば成功です


絵で見てわかるIoT/センサの仕組みと活用
株式会社NTTデータ 河村 雅人 大塚 紘史 小林 佑輔 小山 武士 宮崎 智也 石黒 佑樹 小島 康平
翔泳社
売り上げランキング: 10,460