システムで、dshot信号を作るのをpicoでやらせていた。UARTの使用の関係で、pico1台で、2つのモータに信号を送っていたので、2つのpicoを使っていた。それまでは、pico二信号を送って、あなたはどちらのpicoですかと問い合わせして、その答えを聞いて /dev/ttyACM0か/dev/ttyACM1であるかを区別した。プログラムは面倒だが、正しくソースがかければ、難なく区別できた。
しかし、ここに来て、ラズパイをやめて、ミニPCに変えた。GPIO的ピン操作やI2Cのやりとりなどを、PC自体ではできないので、picoを経由でやるのが、手っ取り早くて柔軟にできるので、さらに2つpicoを追加した。すると、4つのpicoがどのデバイスファイルになっているのか、を区別しなければならなくなった。2つのときと同じでもできなくはないが、色々面倒になる。しかも、imuからi2c経由でデータを取るときは、 picoに対して制御信号は送らなくていいのに、区別のためだけに信号の送受信手続きをプログラムしなければならない。これが痛く面倒だ。
しらべると、Linuxのudevというデーモンが、デバイスファイルの割り振りを制御していることを知った。今頃知るのはおそすぎだと言われそうだ。そこで、/etc/udev/rules.d/に、90-picos.rulesというファイルを用意し以下のように書いた。
SUBSYSTEM=="tty", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="000a", ATTRS{serial}=="E660C062134F4F27", SYMLINK+="ttyPi\
coA", MODE="0666"
SUBSYSTEM=="tty", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="000a", ATTRS{serial}=="E663AC91D371B438", SYMLINK+="ttyPi\
coB", MODE="0666"
SUBSYSTEM=="tty", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="000a", ATTRS{serial}=="E660D4A0A7933224", SYMLINK+="ttyPi\
coC", MODE="0666"
SUBSYSTEM=="tty", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0003", ATTRS{serial}=="E0C9125B0D9B", SYMLINK+="ttyPicoD"\
, MODE="0666"
これで、 それぞれのデバイスが
/dev/ttyPicoA
/dev/ttyPicoB
/dev/ttyPicoC
/dev/ttyPicoD
にシンボリックリンクをはられていた。
0 件のコメント:
コメントを投稿