装置の蓋を開けずにデザインを交換したいという要求があった。該当の装置は外部へのデバッグ用I/FがUSBを使ったUARTのみしかなく、UART経由でデザインを更新することを考える。
lrzを使用することで、TeratermのZMODEというものを使用してファイルを送信し、SDカードを更新できる。
方法
lrzコマンド
通常、petalinuxでは、
# petalinux-config -c rootfs
して、「Filesystem Package」->「console」->「network」の「lrzsz」を有効にすると、lrzコマンドが使用可能になる。 容易にSDカードが取り出せない状態で、何回も更新する必要があるような場合、便利なのかもしれない。(ただし速度が遅く11KB/sec)
*参考 http://aster-ism.hatenablog.com/entry/2017/07/11/223550
今回はこのlrzszを有効にしていない状態なので、力技でlrzコマンドを使えるようにし、ファイル転送を行う。lrzコマンドをテキストエディタでバイナリモードでASCIIデータとして開く。このASCIIデータをechoコマンドを使ってTeratermから転送し、lrzコマンドを作る。
lrz_bin_echo.txtを送る際に、一度に70行ぐらいを転送しようとすると、Teratermの制限か何かで、途中までしか転送されないことがあるので、30行づつぐらいに刻んでコピペをするとよい。(1行に何文字あるか、にも依存すると思う。)
*参考 https://nagayasu-shinya.com/bash-echo-binary/
TeratermのZMODEを使用してファイル転送
あとはlrzコマンドを叩き、
# chmod 777 /path/to/lrz # /path/to/lrz lrz waiting to receive.**B0100000023be50
となるのでTeraterm上の「ファイル」->「転送」->「ZMODEM」->「送信」でファイル選び、転送する。
※ちなみに
前述したように転送速度が11KB/secとなり、今回転送したかったBOOT.BIN(約17MB)を転送するのに30分ぐらいかかる。