2009/09/28

OSX上のArduinoIDE(0017)で"Serial Port Already in Use"エラー

Javaでシリアル通信するためにRXTXライブラリを/Library/Java/Extensions/に入れたら、スケッチをArduinoへ転送する際にタイトルの通りのエラーが出るようになってしまった。

ArduinoIDEのパッケージに含まれるRXTXライブラリと何かしらバッティングでもしてるのか、などと疑って調べてみたら、見当違いだった。エラーは、/Library/Java/Extensions/に入れた方のライブラリが出しているもので、シリアルポートの排他制御のために使う/var/lock/ディレクトリが存在しなかったのが原因。どうやら、RXTXライブラリのコンパイルオプションでは/var/lock/を使うのがデフォルトらしい。
Arduino Forumに情報があった。
the default compilation options for RXTX create a library that uses locks to help ensure that only one program tries to access the serial port at a time. This requires you to setup the lock directory (this was the purpose macosx_setup.command script that used to come with Arduino and Processing). If you don't set up the lock directory, you get an error like the one you saw.

Arduino Forum - Serial Port Already in Use - MacOSX leopard
というわけで対策は、/var/lock/を使わないオプションでRXTXをリコンパイルするか、/var/lock/ディレクトリを作成して、ユーザから書き込めるようにパーミッションを設定してやるか。
僕はお手軽に、
$ sudo mkdir /var/lock
$ sudo chown <user> /var/lock
で済ませた。
ちなみに、Arduino Forumの記事にあるようなchmod 777はちょっとイヤだったので、オーナーを使用ユーザに変更するにとどめておいた。今のところ問題なく動いているようだ。

0 件のコメント: