MDT を Zynq にそのまま流用
AIZybo
2019-6-12 0:00 JST

MDT(Mendel Development Tool) を使うとネットワークを有したボードの Linux ベースの開発が楽になりそうです。

Zynq のボードに流用して使ってみます。

Google が展開を始めた Mendel Linux とは?

Coralのページ説明があるので引用します。

Mendel Linux is a lightweight derivative of Debian Linux that runs on a number of Coral development boards, including the Coral EdgeTPU.

どうやら今回 EdgeTPU 用に軽量な Debian Linux を提供ということみたいです。

MDT を使うとどういういいことが?

MDT を使うとネットワークにつないでおくだけでボードに ssh でログインできます。基盤となる技術は mDNS(multicast Domain Name System) の機能です。具体的には Linux の avahi-daemon を立ち上げておくとボードの所在がわかります。クライアント側(私の場合は Windows の Linux Subsystem)で MDT をインストールすることで使えるようになります。インストールに先立ち libffi-dev と libssl-dev が必要になるので注意です。pip3 はドキュメント通り sudo を使わずに素直に --user を使いましょう。この方がアンインストールが楽です。

$ sudo apt install libffi-dev
$ sudo apt install libssl-dev
$ pip3 install --user mendel-development-tool

MDT devices でボードの居所がわかる

MDT で一番便利なのは devices でボードが答えてくれることです。今まで開発用のボードにわざわざ固定 IP アドレスを振り分けていました。MDT なら DHCP で動的に割り当てても追っかけてくれます。表示されるホスト名は /etc/hostname で割り当てられた名称です。

$ mdt devices
GARUDA-HIoT             (192.168.0.100)

MDT shell でボードにログイン

ログインは ssh と同じ機構で行います。python から libssl を使っているようです。ただし、一度、シリアルでつないだ状態で key(id_rsa.pub) をターゲットのボードにコピーしないといけません。ssh の標準的な場所である ~/.ssh/authorized_keysにコピー(あるいは追加)します。シリアルにつないだ状態で mdt pushするようにと本家のドキュメントには書いてありますが、うまくいかなかったので、私は通常のコピー&ペーストで作りました。

ということは、事前に ssh-keygenmdt genkeyでキーを作成しなければなりません。mdt genkey は既存のキーを上書してしまうようですから注意が必要です(秘密キーを失うと二度と入れないホストが出来てしまう可能性がある)。この辺のキーの扱いはちょっと雑な感じがするので将来的には変わる可能性があると思います。自分でインストールするときは本家の最新情報を確認しましょう。

うまくキーを置ければあとは mdt shellでログインできます。対象となるターゲットが近隣に1つならホスト名さえいりません。(username のデフォルトは mendel)

$ mdt shell
Waiting for a device...
Connecting to GARUDA-HIoT at 192.168.0.100
Linux GARUDA-HIoT 4.14.0-xilinx-v2018.3-00452-gd2b7486-dirty #4 SMP PREEMPT Sun May 26 01:19:32 JST 2019 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun 11 02:04:35 2019 from 192.168.0.45
fpga@GARUDA-HIoT:~$

Zynq に簡単インストール

サービスの実体は avahi なので設定を追加すると使えるようになります。Coral の Linux から mdt.services をコピーします。すでにコピーした状態の Zynq を次に示します。デーモンの再起動を忘れずに。

~$ cat /etc/avahi/services/mdt.service
<service-group>
  <name replace-wildcards="yes">%h</name>

  <service>
    <type>_googlemdt._tcp</type>
    <port>22</port>
  </service>
</service-group>

username の追加

MDT のデフォルトの username は mendel です。どうやら、現時点でインターラクティブに変えることは出来ないようです。Python のソースを読むと ~/.config/mdt/attribs/ の下に username という Config を追加すると使えるようになるようです。"例"の ikwzm さんの Linux はユーザ名が fpga なので変えてみます。

$ echo fpga > ~/.config/mdt/attribs/username

うまくログインできるはずです。

リンク集