Ubuntu Weekly Recipe

第589回 M5StickVの開発用にMaixPy IDEをUbuntuで動かす

この記事を読むのに必要な時間:およそ 5 分

シリアルコンソールデバイスファイル名を固定化する

次にシリアルコンソールのデバイスファイル名を固定化します。LXDではホスト上のデバイスファイルをそのままコンテナに見せることが可能です。その際,デバイスファイル名を指定するのですが,シリアルコンソールデバイスはその認識順によって自動的に名前が割り振られます。このためM5StickVのようなUSBシリアルケーブルを使う場合,ケーブルをPCに繋いだタイミングによって/dev/ttyUSB0だったり/dev/ttyUSB1だったりと最後の数字が変わってしまうのです。

毎回違うファイル名になってしまうのは不便なので,固定的なデバイスファイル名を付けてしまいましょう。それには第555回で紹介したudevが役に立ちます。

試しにM5StickVを繋いだ状態で,次のコマンドを入力し,USBデバイスの属性を表示させてみてください。この例のttyUSB0も,他のUSBシリアルコンソールが接続されている場合は別の名前になるので注意してください。

$ udevadm test-builtin usb_id /sys/class/tty/ttyUSB0
Load module index
Parsed configuration file /usr/lib/systemd/network/99-default.link
Created link configuration context.
ID_VENDOR=Kongou_Hikari
ID_VENDOR_ENC=Kongou\x20Hikari
ID_VENDOR_ID=0403
ID_MODEL=M5Stack_Intf
ID_MODEL_ENC=M5Stack\x20Intf
ID_MODEL_ID=6001
ID_REVISION=0400
ID_SERIAL=Kongou_Hikari_M5Stack_Intf_9952499745
ID_SERIAL_SHORT=9952499745
ID_TYPE=generic
ID_BUS=usb
ID_USB_INTERFACES=:ffffff:
ID_USB_INTERFACE_NUM=00
ID_USB_DRIVER=ftdi_sio
Unload module index
Unloaded link configuration context.

「Kongou Hikari」とはなんぞやというのが気になるところではありますが,今回使うのはID_SERIAL_SHORT=9952499745です。

一般的にUSBデバイスを特定する際は,ID_VENDOR_IDID_MODEL_IDなどを利用します。しかしながら上記の0403:6001はFTDIの「FT232 Serial (UART) IC」として登録されているIDです。つまりID_VENDOR_IDID_MODEL_IDで確認すると,他のFTDI製チップを搭載したUSBシリアルデバイスまでマッチしてしまいます。

よってここではID_SERIAL_SHORT=9952499745を用いて確実に特定のデバイスのみをマッチングさせることにしましょう。この値は,各M5StickVで異なるはずですので,それぞれ上記コマンドで確認した値に読み替えてください。

実際に作るデバイスファイルは/dev/ttyUSBxへのシンボリックリンクとなる/dev/ttyM5STICKVです。複数のM5StickVを同時に繋ぐのなら,シリアル番号ごとに名前を変更してください。udevの設定を行うために,ホスト上で次のコマンドを実行します。

cat <<EOF | sudo tee -a /etc/udev/rules.d/68-m5stick.rules
## For M5StickV
ACTION=="add", SUBSYSTEM=="tty", \\
    ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", \\
    ATTRS{serial}=="9952499745", SYMLINK+="ttyM5STICKV"
EOF

この状態でM5StickVを接続すると,次のようなファイルが作られるはずです。

$ ls -l /dev/ttyM5STICKV
lrwxrwxrwx 1 root root 7 10月  6 21:13 /dev/ttyM5STICKV -> ttyUSB0

シリアルコンソールデバイスをコンテナから見えるようにする

M5StickVの接続によって自動的に作成されるようになった/dev/ttyM5STICKVをコンテナから見えるように設定しましょう。

$ lxc config device add maixpy ttyM5STICKV unix-char \
  source=/dev/ttyM5STICKV path=/dev/ttyUSB0 \
  required=false uid=1000 gid=1000
Device ttyM5STICKV added to maixpy

シリアルコンソールデバイスはキャラクターデバイスとして作られるためunix-charを指定しています。また,コンテナから見える名前は/dev/ttyUSB0にしています。これはMaixPy IDEがどうやら/dev/ttyUSBxしか見ていないような振る舞いをしているためです。

required=falseはUSBデバイスのようなホットプラグ可能なデバイス向けのオプションです。つまりコンテナ起動時に指定したデバイスが存在しなくてもエラーにしないための設定となります。UIDやGIDを設定しているのは,コンテナ内の一般ユーザーがシリアルコンソールを読み書きできるための対応です。

設定後の再起動は不要です。最後に実際にM5StickVを接続した状態で,コンテナ内部から/dev/ttyM5STICKVが見えるか確認しておきましょう。

$ lxc exec maixpy ls /dev/ttyM5STICKV
/dev/ttyM5STICKV

MaixPy IDEのインストール

ここまででようやくMaixPy IDEの準備は整いました。あとはホストと同じようにインストーラーを実行するだけです。

ダウンロード済みのインストーラーイメージをコンテナの中にコピーして,lxc execコマンドで実行しましょう。ポイントはsudoコマンドを使って一般ユーザー,Ubuntuコンテナをそのまま使っているなら「ubuntu」で実行していることです。

$ lxc file push ~/ダウンロード/maixpy-ide-linux-x86_64-0.2.4.run maixpy/home/ubuntu/
$ lxc exec maixpy -- sudo -i -u ubuntu ./maixpyide/bin/maixpyide

GUIコンテナとして正しく設定できていれば,ホスト上のディスプレイにインストーラーのダイアログが表示されます。もしうまく起動しない場合は,たとえばlddコマンドで必要なライブラリーがコンテナ上に揃っているか確認してください。また,インストール後は~/maixpyide/bin/maixpyidelxc execしましょう。M5StickV上でのスクリプトの実行も含めてきちんと動作することを確認したら,第433回のように.desktopファイルを作ると良いでしょう。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。