1: 2023-07-02 (日) 13:30:41 takaboo ソース
Line 1: Line 1:
 +TITLE:Tasting the RZBoard V2L
 +[[RZboard V2L>https://www.renesas.com/jp/ja/produc​ts/microcontrollers-microprocessors/rz-m​pus/rz-partner-solutions/avnet-rzboard]]​に触れる機会があり、その際に聞かれて操作を促した内容を紹介。あくまで必要に迫られた時の操作に限定しているため、yoctoが具体的にどうのこうのやらDRP-AIの環境整備といったネタには触れていない。~
 +にわかでやるための、ありきたりかつ間違えようの無い操作のみを雑多に記載しているため、後々は[[こちら>https://renesas.info/wiki/RZ-V]]のリソースが参考になるかと。
 +いずれにせよRZ/V2LはDRP-AIが主たる目的で、Linuxはその介添えに過ぎない。OSが動いても余力がある訳ではないので、遊び甲斐は無い。
 +*Yocto Project [#r3454cef]
 +[[Yocto Project>https://www.yoctoproject.org/]]に目を通すまでも無く、以下の手順を踏めば基本的にブートイメージが生成できる事になっている。~
 +[[https://github.com/Avnet/meta-rzboard/​tree/rzboard_dunfell_5.10_vlp_v3.0.2]]~
 +ここではビルド環境としてUbuntu 22.04 LTSを新規でインストールしたPC(Intel N100搭載の小型PC)を使ってみた。なお使い込んだUbuntu 22.04の環境だとうまくいかないようで、真っ新な状態でUbuntuをインストールし直せば解消するらしい。それでもだめなら素直に20.04で。
 +
 +大半の操作はCUI上で行う。まずはUbuntu上へ必要なツール類をインストール。ちなみに「$」はターミナルのプロンプトのつもりなので、入力するものではない。もちろんインターネットに接続している前提。
 +#html{{
 +<pre class="brush: bash;">
 +$ sudo apt install -y gawk wget git-core diffstat unzip texinfo gcc-multilib \
 +build-essential chrpath socat cpio python3 python3-pip python3-pexpect \
 +xz-utils debianutils iputils-ping libsdl1.2-dev xterm p7zip-full libyaml-dev \
 +rsync curl locales bash-completion
 +</pre>
 +}}
 +次にrenesasから提供されるドライバやライブラリ等の圧縮ファイルを展開するためのスクリプトをダウンロード。
 +#html{{
 +<pre class="brush: bash;">
 +$ cd ~/
 +$ wget https://raw.githubusercontent.com/Avnet/​meta-rzboard/rzboard_dunfell_5.10_v2/too​ls/create_yocto_rz_src.sh
 +</pre>
 +}}
 +ダウンロードしたcreate_yocto_rz_src.shに記述されているパッケージだが、renesasのサイトで公開されているものの方が新しい場合がある。2023/6/4現在以下が最新の模様(簡便化のため直リンクご容赦、リンク先はrenesasのアカウントが必要だったり許諾が必要だったりするが48時間以内で許可が出た試しは無い)。適宜create_yocto_rz_src.shを修正。~
 +-[[RZ/V Verified Linux Package [5.10-CIP]>https://www.renesas.com/jp/ja​/software-tool/rzv-verified-linux-packag​e]]~
 +[[RZ/V Verified Linux Package v3.0.2(RTK0EF0045Z0024AZJ-v3.0.2.zip)>ht​tps://www.renesas.com/jp/ja/document/swo​/rzv-verified-linux-package-v302rtk0ef00​45z0024azj-v302zip?r=1628526]]
 +-[[RZ MPU Graphics Library Unrestricted Version for RZ/V2L>https://www.renesas.com/jp/ja/pro​ducts/microcontrollers-microprocessors/r​z-arm-based-high-end-32-64-bit-mpus/rz-m​pu-graphics-library-evaluation-version-r​zv2l]]~
 +[[RZ MPU Graphics Library V1.4 Unrestricted Version for Verified Linux Package of RZ/V2L(RTK0EF0045Z14001ZJ-v1.4_rzv_XX.zi​p)>https://www.renesas.com/jp/ja/documen​t/sws/rz-mpu-graphics-library-v14-unrest​ricted-version-verified-linux-package-rz​v2lrtk0ef0045z14001zj?r=1843541]]
 +-[[RZ MPU Graphics Library Evaluation Version for RZ/V2L>https://www.renesas.com/jp/ja/pro​ducts/microcontrollers-microprocessors/r​z-arm-based-high-end-32-64-bit-mpus/rz-m​pu-graphics-library-evaluation-version-r​zv2l]]~
 +[[RZ MPU Graphics Library Evaluation Version for RZ/V2L (RTK0EF0045Z13001ZJ-v1.4_JP.zip)>https:/​/www.renesas.com/jp/ja/document/swo/rz-m​pu-graphics-library-evaluation-version-r​zv2l-rtk0ef0045z13001zj-v14enzip?r=18435​41]]
 +-[[RZ MPU Video Codec Library Unrestricted Version for RZ/G2L>https://www.renesas.com/jp/ja/sof​tware-tool/rz-mpu-video-codec-library-ev​aluation-version-rzg2l]]~
 +[[RZ MPU Video Codec Library v1.1.0 Unrestricted Version for Verified Linux Package of RZ/G2L (RTK0EF0045Z16001ZJ-v1.1.0_XX.zip)>https​://www.renesas.com/jp/ja/document/sws/rz​-mpu-video-codec-library-v110-unrestrict​ed-version-verified-linux-package-rzg2l-​rtk0ef0045z16001zj?r=1535641]]
 +-[[RZ MPU Video Codec Library Evaluation Version for RZ/G2L>https://www.renesas.com/jp/ja/sof​tware-tool/rz-mpu-video-codec-library-ev​aluation-version-rzg2l]]~
 +[[RZ MPU Video Codec Library Evaluation Version for RZ/G2L (RTK0EF0045Z15001ZJ-v1.1.0_XX.zip)>https​://www.renesas.com/jp/ja/document/swo/rz​-mpu-video-codec-library-evaluation-vers​ion-rzg2l-rtk0ef0045z15001zj-v110xxzip?r​=1535641]]
 +-[[RZ/V2L DRP-AI Support Package [V7.30]>https://www.renesas.com/jp/ja/pr​oducts/microcontrollers-microprocessors/​rz-arm-based-high-end-32-64-bit-mpus/rzv​2l-drp-ai-support-package]]~
 +[[RZ/V2L DRP-AI Support Package Version 7.30 (r11an0549ej0730-rzv2l-drpai-sp.zip)>htt​ps://www.renesas.com/jp/ja/document/sws/​rzv2l-drp-ai-support-package-version-730​?r=1558356]]
 +-[[RZ/V2L ISP Support Package [V.1.21]>https://www.renesas.com/jp/ja/p​roducts/microcontrollers-microprocessors​/rz-arm-based-high-end-32-64-bit-mpus/rz​v2l-isp-support-package]]~
 +[[RZ/V2L ISP Support Package Version 1.21 (r11an0561ej0121-rzv2l-isp-sp.zip)>https​://www.renesas.com/jp/ja/document/sws/rz​v2l-isp-support-package-version-121?r=15​58361]]
 +-[[RZ/V2L Group Multi-OS Package>https://www.renesas.com/jp/ja/so​ftware-tool/rzv2l-group-multi-os-package​]]~
 +[[RZ/V2L CM33 Multi-OS Package V1.10 (r01an6238ej0110-rzv2l-cm33-multi-os-pkg​.zip)>https://www.renesas.com/jp/ja/docu​ment/sws/rzv2l-cm33-multi-os-package-v11​0?r=15701811]]
 +
 +以下は修正したcreate_yocto_rz_src.shの一部を抜粋。
 +#html{{
 +<pre class="brush: bash;first-line:6"; title="~/create_yocto_rz_src.sh">
 +# RZ/V Verified Linux Package [5.10-CIP]  V3.0.2
 +REN_LINUX_BSP_PKG="RTK0EF0045Z0024AZJ-v3.0.2"
 +SUFFIX_ZIP=".zip"
 +
 +# RZ MPU Graphics Library V1.4 Unrestricted Version
 +REN_GPU_MALI_LIB_PKG="RTK0EF0045Z14001ZJ-v1.4_rzv_JP"
 +# RZ MPU Graphics Library Evaluation Version V1.4
 +REN_GPU_MALI_LIB_PKG_EVAL="RTK0EF0045Z13001ZJ-v1.4_JP"
 +
 +# RZ MPU Video Codec Library v1.1.0 Unrestricted Version
 +REN_VEDIO_CODEC_LIB_PKG="RTK0EF0045Z16001ZJ-v1.1.0_rzg_JP"
 +# RZ MPU Video Codec Library Evaluation Version V1.1.0
 +REN_VEDIO_CODEC_LIB_PKG_EVAL="RTK0EF0045Z15001ZJ-v1.1.0_JP"
 +
 +# RZ/V2L DRP-AI Support Package Version 7.30
 +REN_V2L_DRPAI_PKG="r11an0549ej0730-rzv2l-drpai-sp"
 +
 +# RZ/V2L ISP Support Package Version 1.21
 +REN_V2L_ISP_PKG="r11an0561ej0121-rzv2l-isp-sp"
 +
 +# RZ/V2L Multi-OS Package V1.10
 +REN_V2L_MULTI_OS_PKG="r01an6238ej0110-rzv2l-cm33-multi-os-pkg"
 +</pre>
 +}}
 +修正したスクリプトを実行し、更に必要なファイルをgit cloneしたらおもむろにイメージを生成(bitbake)。bitbakeはPCのリソースをフルに使う処理なので、PCは良く冷やす事。今回使ったPCでは夜寝る前に仕掛けて朝起きたら終わっていた感じだが、ここ最近のマルチコアのPCを使っても数時間かかるかと。
 +#html{{
 +<pre class="brush: bash;">
 +$ cd ~
 +$ bash create_yocto_rz_src.sh
 +$ cd ~/yocto_rzboard/
 +$ git clone https://github.com/Avnet/meta-rzboard.gi​t -b rzboard_dunfell_5.10_vlp_v3.0.2
 +$ mkdir -p ./build/conf
 +$ cp meta-rzboard/conf/rzboard/* build/conf/
 +$ source poky/oe-init-build-env build/
 +$ bitbake avnet-core-image
 +</pre>
 +}}
 +ターミナル上に赤い文字と共にERRORが表示されていなければ、「~/yocto_rzboard/build/tmp/deploy/images/​rzboard」の中に成果物が生成されている。avnet-core-image-rzboard-~.wicができていればまずはOK。もしrenesas社から提供されるアーカイブファイルが更新されているのを見かけたら、更新された部分のみcreate_yocto_rz_src.shを修正しスクリプトを実行すれば良い。エラーが出て止まっていた場合は、bitbakeを繰り返すことで成功する事が多いが、どうにもならない場合は原因を特定するスキルが無い限り真っさらからやり直した方が早道かも。~
 +なおrenesasから提供されるアーカイブファイルが更新されているのを見かけたら、更新された部分のみcreate_yocto_rz_src.shを修正し、スクリプトを実行してからbitbakeすれば良い。
 +#html{{
 +<pre class="brush: bash;">
 +$ cd ~
 +$ bash create_yocto_rz_src.sh
 +$ cd ~/yocto_rzboard/
 +$ source poky/oe-init-build-env build/
 +$ bitbake avnet-core-image
 +</pre>
 +}}
 +これぐらいの数とサイズのファイルが含まれるので、HDDの空き容量には注意。
 +#ref(yocto_rzboard_filesize.png)
 +
 +最後にwicファイルをRZBboard上のeMMCに書き込むのだが、USBシリアルコンバータの準備が面倒だったので、ここではSDカードにイメージを書き込んで済ませた(これが徒となってpanicになったが...)。~
 +なおWindowsを使ってwicファイルをSDカードに書き込む場合は、[[Win32 Disk Imager>https://sourceforge.net/projects/​win32diskimager/]]を使えばwicファイルと書き込み先のSDカードのドライブを指定するだけなので簡単。ubuntuを使ってSDカードへ書き込む場合は、bmaptoolを準備をしておくと良いかも(と書いておきながら時々起動に失敗するのでダメかも)。~
 +RZBoardをSDカードでブートさせる際はSW1-1とSW1-2は共にOFFで。
 +
 +*Additional functions [#z5cbe282]
 +先のavnetが提供する環境は、少しでも欲張ると色々足りない。初めてでもこの程度であれば大事には至らないといった範疇で少し改造してみる。
 +
 +**add package [#xc74c6fc]
 +概ね「~/yocto_rzboard/build/conf/local.conf」のへの追記で対応。Python好いている御仁向けに少しモジュールを追加、Dropbear SSHでは何かと不都合があったのでOpenSSHに入れ替え、timezoneが無いので追加、guiアプリを作ってみたかったのでgtk+3追加、また[[bmaptool>https://github.com/intel/bmap​-tools]]使ってイメージを書き込む際に使われるブロックマップの生成も促す。
 +#html{{
 +<pre class="brush: ini;"; title="~/yocto_rzboard/build/conf/local.conf">
 +IMAGE_INSTALL_append = " python3-pip python3-pyserial python3-numpy python3-psutil python3-pygobject gtk+3"
 +IMAGE_INSTALL_append = " packagegroup-core-ssh-openssh openssh-sftp-server"
 +IMAGE_INSTALL_append = " tzdata"
 +DEFAULT_TIMEZONE = "Asia/Tokyo"
 +
 +IMAGE_FSTYPES += " wic.bmap"
 +</pre>
 +}}
 +
 +追記したらイメージ生成。
 +#html{{
 +<pre class="brush: bash;">
 +$ cd ~/yocto_rzboard
 +$ source poky/oe-init-build-env build/
 +$ bitbake avnet-core-image
 +</pre>
 +}}
 +その他のパッケージ追加も大抵はこの手でOKな事が多い。
 +----
 +日本語のサポートは含まれていないので、日本語を含むファイルの扱いが困難。文字化けする程度であれば無視すれば済むが、日本語を含むファイルの編集となると少々難儀である。GUIを含めて日本語を表示できるようにするにはlocal.confに次を追記してbitbakeする。
 +#html{{
 +<pre class="brush: ini;"; title="~/yocto_rzboard/build/conf/local.conf">
 +IMAGE_LINGUAS ?= "ja-jp ja-jp.euc-jp"
 +GLIBC_GENERATE_LOCALES = "en_GB.UTF-8 en_US.UTF-8 ja_JP.UTF-8 ja_JP.EUC-JP"
 +IMAGE_INSTALL_append = " ttf-vlgothic ttf-sazanami-gothic ttf-sazanami-mincho"
 +</pre>
 +}}
 +起動したらlocalectlでロケールを設定したら一度再起動。リモートターミナルの文字コードがUTF-8になってさえいれば、Linuxが再起動した後から一部コマンドのヘルプが日本語化され、UTF-8で記述されたファイルの編集や閲覧が文字化けしなくなる。
 +#html{{
 +<pre class="brush: bash;">
 +$ localectl set-locale LANG=ja_JP.UTF-8
 +$ reboot
 +</pre>
 +}}
 +weston-terminalも日本語表示に対応する。
 +#ref(wayland_jp_screenshot.png,35%)
 +
 +**kernel config [#u4d7c546]
 +USB機器のデバイスドライバ絡みであれば、menuconfigで済む場合が多い。
 +#html{{
 +<pre class="brush: bash;">
 +$ cd ~/yocto_rzboard
 +$ source poky/oe-init-build-env build/
 +$ bitbake -c menuconfig linux-renesas
 +</pre>
 +}}
 +#ref(kernelconf-1.png,60%)
 +編集が終わったら「.config」として保存。
 +#ref(kernelconf-2.png,60%)
 +再びイメージ生成。大して時間はかからない。
 +#html{{
 +<pre class="brush: bash;">
 +$ bitbake avnet-core-image
 +</pre>
 +}}
 +menuconfigするのに何か足りなければ追加しておく。
 +#html{{
 +<pre class="brush: bash;">
 +$ sudo apt install tmux libevent-dev ncurse-*
 +</pre>
 +}}
 +
 +**Resize SD card partition [#i9baf103]
 +デフォルトでは必要最低限程度のサイズでイメージが生成されるため、残りのSDカードの容量は未使用状態である。[[Hardware User Guide>https://www.avnet.com/wps/wcm/conn​ect/onesite/86d72e54-3eef-4ceb-8464-de54​e28dd79f/RzBoard+V2L+Hardware+User+Guide​+%28v1.0%29.pdf?MOD=AJPERES&CACHEID=ROOT​WORKSPACE.Z18_NA5A1I41L0ICD0ABNDMDDG0000​-86d72e54-3eef-4ceb-8464-de54e28dd79f-og​meSxB]]の12.3に記載されている操作を行えば、SDカードの最大サイズまで拡張できる。なお態々debug connectorを経由して操作する必要は無い。
 +
 +#html{{
 +<pre class="brush: bash; highlight:[12, 19, 31, 32, 36, 40, 41, 42, 43, 48, 50, 55];">
 +root@rzboard:~# df -h
 +ファイルシス  サイズ  使用  残り 使用% マウント位置
 +/dev/root        3.5G  2.8G  468M  86% /
 +devtmpfs        426M  4.0K  426M    1% /dev
 +tmpfs            651M    0  651M    0% /dev/shm
 +tmpfs            651M  9.9M  641M    2% /run
 +tmpfs            651M    0  651M    0% /sys/fs/cgroup
 +tmpfs            651M    0  651M    0% /tmp
 +tmpfs            651M  24K  651M    1% /var/volatile
 +/dev/mmcblk0p1  100M  22M  78M  22% /boot
 +tmpfs            131M    0  131M    0% /run/user/0
 +root@rzboard:~# fdisk /dev/mmcblk0
 +
 +fdisk (util-linux 2.35.1) へようこそ。
 +ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
 +書き込みコマンドを使用する際は、注意して実行してください。
 +
 +
 +コマンド (m でヘルプ): p
 +ディスク /dev/mmcblk0: 29.74 GiB, 31914983424 バイト, 62333952 セクタ
 +単位: セクタ (1 * 512 = 512 バイト)
 +セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
 +I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
 +ディスクラベルのタイプ: dos
 +ディスク識別子: 0xcb176a81
 +
 +デバイス      起動 開始位置 終了位置  セクタ サイズ Id タイプ
 +/dev/mmcblk0p1 *          32  204831  204800  100M  c W95 FAT32 (LBA)
 +/dev/mmcblk0p2        204832  7824703 7619872  3.6G 83 Linux
 +
 +コマンド (m でヘルプ): d
 +パーティション番号 (1,2, 既定値 2): 2
 +
 +パーティション 2 を削除しました。
 +
 +コマンド (m でヘルプ): n
 +パーティションタイプ
 +   p  基本パーティション (1 primary, 0 extended, 3 free)
 +   e  拡張領域 (論理パーティションが入ります)
 +選択 (既定値 p): p
 +パーティション番号 (2-4, 既定値 2): 2
 +最初のセクタ (204832-62333951, 既定値 206848): 204832
 +最終セクタ, +/-セクタ番号 または +/-サイズ{K,M,G,T,P} (204832-62333951, 既定値 62333951):
 +
 +新しいパーティション 2 をタイプ Linux、サイズ 29.6 GiB で作成しました。
 +パーティション #2 には ext4 署名が書き込まれています。
 +
 +署名を削除しますか? [Y]es/[N]o: N
 +
 +コマンド (m でヘルプ): w
 +
 +パーティション情報が変更されました。
 +ディスクを同期しています。
 +
 +root@rzboard:~# resize2fs /dev/mmcblk0p2
 +resize2fs 1.45.7 (28-Jan-2021)
 +Filesystem at /d[  662.106753] EXT4-fs (mmcblk0p2): resizing filesystem from 952484 to 7766140 blocks
 +ev/mmcblk0p2 is [  662.115758] EXT4-fs (mmcblk0p2): resizing filesystem from 952484 to 7766016 blocks
 +mounted on /; on-line resizing required
 +old_desc_blocks = 1, new_desc_blocks = 4
 +[  664.033021] EXT4-fs (mmcblk0p2): resized filesystem to 7766016
 +The filesystem on /dev/mmcblk0p2 is now 7766140 (4k) blocks long.
 +
 +root@rzboard:~#
 +</pre>
 +}}
 +
 +**Debug UART [#ta91ec8c]
 +結局UARTのデバッグポート(J19)を使わずに全ての操作を完結させることができないので、手持ちの[[USBシリアル変換モジュール>https://akizukidenshi.com/catalog/g/gM-​08461/]]を使用。通信にかかる3つの端子は配列が一致しているので、適当なメスピンヘッダをモジュールにハンダしてJ19に装着。
 +#ref(mod_j19_usb.png)
 +
 +*RZBoard initialization [#ea998692]
 +「/boot/uEnv.txt」の記述が殆ど無いので追記。特にmacアドレス(ethaddr)を設定しないままだと起動の度にランダムな値になり、それに伴いルーターからのIPアドレスの割り当てがコロコロ変わって少し面倒。
 +#html{{
 +<pre class="brush: ini;"; title="/boot/uEnv.txt">
 +fdtfile=rzboard.dtb
 +enable_overlay_cm33=1
 +enable_overlay_disp=hdmi
 +enable_overlay_uart2=yes
 +enable_overlay_i2c=yes
 +enable_overlay_gpio=yes
 +enable_overlay_adc=yes
 +enable_overlay_audio=yes
 +#fdt_extra_overlays=rzboard-mipi-ph72012​8t003.dtbo
 +#fdt_extra_overlays=1.dtbo 2.dtbo 3.dtbo
 +ethaddr=??:??:??:??:??:??
 +</pre>
 +}}
 +----
 +westonにはターミナルしか登録されていないので寂しいが、gui絡みのアプリケーションを実行した際の出力先になる。「/etc/xdg/weston/weston.ini」に以下を追記しておくと良い場合は設定すべし。
 +#html{{
 +<pre class="brush: ini;"; title="/etc/xdg/weston/weston.ini">
 +[output]
 +name=HDMI-A-1
 +mode=1280x720@60
 +#mode=1920x1080@60
 +
 +[keyboard]
 +keymap_rules=evdev
 +keymap_layout=jp
 +vt-switching=true
 +</pre>
 +}}
 +
 +westonを再起動
 +#html{{
 +<pre class="brush: bash;">
 +$ systemctl restart weston@root
 +</pre>
 +}}
 +[launcher]とか追加すると多少は使い物になるかなと。
 +
 +現状では上記設定いかんにかかわらず最近の高解像度のモニターでは表示されないことが多いので、解像度はさほど高くなく複数入力の無いインテリでないものを使うことをお勧めする。~
 +またOSが立ち上がる途中でHDMIケーブルを後差しすると表示されなかったり、後差ししないと表示されない等など人によって違うことを言われるが、調べがついていないので正直なところ良くわからない。
 +----
 +WiFiを使うのであれば[[Linux Yocto User Manual>https://www.avnet.com/wps/wcm/con​nect/onesite/9fe02bc9-8335-4da2-924a-1bd​de941e534/RzBoard-Linux-Yocto-UserManual​-v2.1.pdf?MOD=AJPERES&CACHEID=ROOTWORKSP​ACE.Z18_NA5A1I41L0ICD0ABNDMDDG0000-9fe02​bc9-8335-4da2-924a-1bdde941e534-ogmf6kR]​]の3.11に記載されている操作ではなく、ConnManを使うのが簡単。レシピではConnManのサービス化を止められていたので、まずは起動(以後定期的にスキャンが発動し、その都度シリアルポートにログを吐くようになるので注意)。
 +#html{{
 +<pre class="brush: bash;">
 +$ systemctl enable connman
 +$ systemctl start connman
 +</pre>
 +}}
 +次にconnmanctlをインタラクティブモードで操作。
 +#html{{
 +<pre class="brush: bash; highlight:[2,4,6,10,12,16,18];">
 +$ connmanctl
 +connmanctl> enable wifi  #WiFiをイネーブル
 +Enabled wifi
 +connmanctl> scan wifi    #周辺のWiFiルータを検索
 +Scan completed for wifi
 +connmanctl> services    #検索結果を表示
 + ....
 + * AR MyWiFiSSID          wifi_abcdabcdabcd_aabbccddeeffaa_managed​_psk
 + ....
 +connmanctl> agent on    #エージェントを登録
 +Agent registered
 +connmanctl> connect wifi_abcdabcdabcd_aabbccddeeffaa_managed​_psk #検索結果のHASH値を使ってWiFiルータへつなぐ
 +Agent RequestInput wifi_abcdabcdabcd_aabbccddeeffaa_managed​_psk
 +  Passphrase = [ Type=psk, Requirement=mandatory, Alternates=[ WPS ] ]
 +  WPS = [ Type=wpspin, Requirement=alternate ]
 +Passphrase? PASSPHRASE  #WiFiルータの暗号化キーを入力
 +Connected wifi_abcdabcdabcd_aabbccddeeffaa_managed​_psk
 +connmanctl> quit        #ひとまず終了
 +</pre>
 +}}
 +駆け足だがこれでつながっているので、ifconfig等で確認。~
 +自動接続については、検索結果にあるWiFiルータのSSIDとHASH値を元に、/var/lib/connman/MyWiFiSSID-psk.configの名前で次のファイルを作成。MyWiFiSSID・HASH値・PASSPHRASEは適宜変更の事。
 +#html{{
 +<pre class="brush: ini;"; title="/var/lib/connman/MyWiFiSSID-psk.config">
 +[service_wifi_abcdabcdabcd_aabbccddeeffa​a_managed_psk]
 +Type = wifi
 +Name = MyWiFiSSID
 +Passphrase = PASSPHRASE
 +AutoConnect = True
 +</pre>
 +}}
 +RZBoardを再起動した際にIPアドレスが割り当てられていれば成功。WiFiに限らずBluetoothや有線LANにも使え、IPアドレスを固定させることも可。
 +
 +*Windows [#e28411c3]
 +Windowsが必要とされているのはeMMCへイメージを書き込む時以外に無いのだが、リモートクライアントとしてなら使い道はある。その際はsshクライアントの[[PuTTY>https://www.chiark.greenend.org.​uk/~sgtatham/putty/latest.html]]を使えば便利。~
 +リモートログインするなら
 +#html{{
 +<pre class="brush: bash;">
 +putty.exe -ssh -pw avnet root@rzboard:22
 +</pre>
 +}}
 +
 +相互のファイル転送には同梱のpscpが使える。次のようなバッチを作っておくとコマンドライン上でのファイルコピーがお気楽(毎回ログインしに行くため遅い)。
 +#html{{
 +<pre class="brush: ini;"; title="tx.cmd">
 +@rem win to rzboard
 +@pscp.exe -scp -unsafe -pw avnet %1 root@rzboard:%2
 +</pre>
 +}}
 +#html{{
 +<pre class="brush: ini;"; title="rx.cmd">
 +@rem rzboard to win
 +@pscp.exe -scp -unsafe -pw avnet root@rzboard:%1 %2
 +</pre>
 +}}
 +
 +もっと横着するならguiベースのsftpクライアントを使えば良い。以下の3つをインストールすればWindowsのドライブとしてrzboardをマウントできる。~
 +-[[SSHFS-Win>https://github.com/winfsp/s​shfs-win/releases/tag/v3.5.20357]]~
 +-[[WinFsp>https://github.com/winfsp/winf​sp/releases/tag/v2.0]]~
 +-[[SSHFS-Win Manager>https://github.com/evsar3/sshfs-​win-manager/releases/tag/v1.3.1]]
 +
 +マウントしたドライブ上のファイルを特定のツールで開こうとしてもドライブが見えなかったり、エディタ等で直接見に行くと時折待たされることがあるが、概ね許容範囲かと思う。
 +----
 +DHCPで割り当てられたRZBoardのIPアドレスが分からないからシリアルターミナルをつないでいるというのであれば、先の通り「rzboard」の名前で見つかる筈。逆にRZBoardからWindows PCや他のLinux PCの場合は「名前.local」で届く。
 +#html{{
 +<pre class="brush: bash;">
 +$ ping winpc.local -c 4
 +PING winpc.local (192.168.11.15): 56 data bytes
 +64 bytes from 192.168.11.15: seq=0 ttl=128 time=380.467 ms
 +64 bytes from 192.168.11.15: seq=1 ttl=128 time=148.134 ms
 +64 bytes from 192.168.11.15: seq=2 ttl=128 time=18.441 ms
 +64 bytes from 192.168.11.15: seq=3 ttl=128 time=41.408 ms
 +
 +--- winpc.local ping statistics ---
 +4 packets transmitted, 4 packets received, 0% packet loss
 +round-trip min/avg/max = 18.441/147.112/380.467 ms
 +$
 +</pre>
 +}}
 +
 +*DXHAT [#a458a623]
 +元来[[DXHAT]]を載せる必要は一切いが、RasPi互換を謳うなら多少なりとも使えるのでは?という事で評価を兼ねて。
 +
 +**電源ボタン [#d446f001]
 +HATの電源ボタンを押してもRZBoardの電源が入らない。PMICの詳細が公開されていないので不確かだが、ブロック図から推察してPMICにボタン入力が無いとレギュレータが生きず、DXHATのKILLが解放されないのだろう。~
 +その後RZBoardのS1を押しながらHAT側の電源ボタンを押すと電源が入り、またS1を押しっぱなしでも電源が切れることは無い事がわかった。~
 +S1の押下状態を維持するように短絡しておけば、HATの電源ボタンのみで電源供給のON/OFFは完結する。
 +#ref(mod_pb.png)
 +なおDXHATの電源ボタンによるOSのシャットダウン励起は、憶測で色々試しすぎてRZBoardのGPIOが壊れてしまったようなのでペンディング。
 +
 +**I2C [#z289acdd]
 +RZBoard側にプルアップ抵抗が装備されていないようで、HAT上のI2CバスリピータのAサイドが正常に機能しない。~
 +こちらも改造して良いのであれば、RZBoardのJ1-3(SDA1)とJ1-5(SCL1)をそれぞれ適当な値の抵抗を介してJ1-1(3V3)へ接続。
 +#ref(mod_iic.png)
 +なおHATには電源バックアップされたRTCが載っているのだが、RZBoardのPMICにもRTCが装備されているようなのと、ドライバやレシピ云々の話になるのでひとまず放置。I2Cで直接アクセスして遊ぶ分には問題ない。
 +
 +**TTL/RS-485 I/F[#m2a7f11c]
 +半二重I/FにSCIF2をつなぐには以下の箇所を半田ジャンパする。
 +#ref(BTE100 DXHAT/E179_SEL_UART0,png)
 +Dynamixel Libraryについては、該当ポートを"/dev/ttySC2"に読み替えた上で[[DXHATのドキュメント>BTE100 DXHAT#x91df052]]の操作が一通り使える。~
 +なおDynamixel Libraryのソースには日本語が含まれているので、先の日本語化対応しておかないと文字化けし、エディタで閲覧や編集が困難。
 +
 +また通信速度を変えて試したところ、ボーレートジェネレータの分解能のせいか、1Mbps以上のボーレートは3M/1.5M/1Mbpsでのみ一致し、3Mbpsでは挙動が一部不審、3Mbpsを超えることはできなかった。
 +
 +**FAN/GPIO [#ub3017c0]
 +GPIOが活性化していれば回せる。
 +#html{{
 +<pre class="brush: bash;"; title="fan_on.sh">
 +#!/bin/bash
 +echo 193 > /sys/class/gpio/export
 +echo out > /sys/class/gpio/P9_1/direction
 +echo 1 > /sys/class/gpio/P9_1/value
 +</pre>
 +}}
 +
 +しかしRaspberry Pi程の発熱がある訳でも無いのに、ビュービュー言わせながらファンを回し続ける意味は無い。以下のように温度を取得しそれに応じてファンを微風で回すプログラムをあてがえば十分。デーモンに登録して自動起動させれば良いだろう。
 +
 +#html{{
 +<style type="text/css">
 +    .syntaxhighlighter {
 +     overflow-y: auto !important;
 +     overflow-x: auto !important;
 +     max-height: 900px;
 +     -webkit-text-size-adjust: 100%;
 +    }
 +</style>
 +<pre class="brush:cpp;"; title="fan.c">
 +#include <stdio.h>
 +#include <stdbool.h>
 +#include <fcntl.h>
 +#include <unistd.h>
 +#include <signal.h>
 +
 +int fd_temp = -1;
 +int fd_fan = -1;
 +int fd_pb = -1;
 +int fd_shut = -1;
 +
 +volatile sig_atomic_t term = 0;
 +
 +void handler (int sig, siginfo_t *info, void *ctx) {
 +  term = 1;
 +}
 +
 +bool init (void) {
 +  int f, ff;
 +  // GPIOO9 (OUT)
 +  if ((f = open ("/sys/class/gpio/export", O_WRONLY)) == -1) {
 +   perror ("Unable to config GPIO9");
 +   return false;
 +  } else {
 +   write (f, "193", 3);
 +   close (f);
 +   if ((ff = open ("/sys/class/gpio/P9_1/direction", O_WRONLY)) == -1) {
 +     perror ("Unable to config GPIO9");
 +     return false;
 +   } else {
 +     write (ff, "out", 3);
 +     close (ff);
 +     if ((fd_fan = open ("/sys/class/gpio/P9_1/value", O_WRONLY)) == -1) {
 +       perror ("Unable to config GPIO9");
 +       return false;
 +     }
 +   }
 +  }
 +
 +  // GPIO48 (IN)
 +  if ((f = open ("/sys/class/gpio/export", O_WRONLY)) == -1) {
 +   perror ("Unable to config GPIO48");
 +   return false;
 +  } else {
 +   write (f, "507", 3);
 +   close (f);
 +   if ((ff = open ("/sys/class/gpio/P48_3/direction", O_WRONLY)) == -1) {
 +     perror ("Unable to config GPIO48");
 +     return false;
 +   } else {
 +     write (ff, "in", 2);
 +     close (ff);
 +     if ((fd_pb = open ("/sys/class/gpio/P48_3/value", O_RDONLY)) == -1) {
 +       perror ("Unable to config GPIO48");
 +       return false;
 +     }
 +   }
 +  }
 +
 +  // GPIO12 (OUT)
 +  if ((f = open ("/sys/class/gpio/export", O_WRONLY)) == -1) {
 +   perror ("Unable to open GPIO12");
 +   return false;
 +  } else {
 +   write (f, "216", 3);
 +   close (f);
 +   if ((ff = open ("/sys/class/gpio/P12_0/direction", O_WRONLY)) == -1) {
 +     perror ("Unable to open GPIO12");
 +     return false;
 +   } else {
 +     write (ff, "out", 3);
 +     close (ff);
 +     if ((fd_shut = open ("/sys/class/gpio/P12_0/value", O_WRONLY)) == -1) {
 +       perror ("Unable to open GPIO12");
 +       return false;
 +     }
 +   }
 +  }
 +
 +  // Temperatrue
 +  if ((fd_temp = open ("/sys/class/thermal/thermal_zone0/temp", O_RDONLY)) == -1) {
 +   perror ("Unable to open temp");
 +   return false;
 +  }
 +
 +  return true;
 +}
 +
 +double get_temp (void) {
 +  char s[20];
 +  lseek(fd_temp, 0, SEEK_SET);
 +  if (read (fd_temp, &s, sizeof(s)) > 0) {
 +   int t;
 +   sscanf (s, "%d", &t);
 +   fsync (fd_temp);
 +   return t / 1000.0;
 +  }
 +  return 999;
 +}
 +
 +void set_fan (bool b) {
 +  write (fd_fan, b ? "1" : "0", 1);
 +}
 +
 +bool get_pb (void) {
 +  char c;
 +  lseek(fd_pb, 0, SEEK_SET);
 +  read (fd_pb, &c, 1);
 +  return (c == '0');
 +}
 +
 +void set_shut (bool b) {
 +  write (fd_pb, b ? "1" : "0", 1);
 +}
 +
 +int main (void) {
 +  double t;
 +  int cnt = 0, duty = 1;
 +
 +  struct sigaction act;
 +
 +  act.sa_sigaction = handler;
 +  act.sa_flags = SA_SIGINFO;
 +  if (sigaction(SIGINT, &act, NULL) < 0) {
 +   return 1;
 +  }
 +
 +  act.sa_sigaction = handler;
 +  act.sa_flags = SA_SIGINFO;
 +  if (sigaction(SIGTERM, &act, NULL) < 0) {
 +   return 1;
 +  }
 +
 +  if (init ()) {
 +   while (!term) {
 +     t = get_temp ();
 +     if (get_pb ())  duty = 10;
 +     else if (t > 55) duty = 10;
 +     else if (t > 50) duty = 6;
 +     else if (t > 45) duty = 4;
 +     else            duty = 1;
 +     for (int i = 0; i < 10; i++) {
 +       set_fan (duty >= cnt);
 +       cnt++;
 +       if (cnt > 10) cnt = 0;
 +       usleep (5000);
 +     }
 +   }
 +   set_fan (0);
 +
 +   close (fd_temp);
 +   close (fd_fan);
 +   close (fd_pb);
 +   close (fd_shut);
 +
 +   return 0;
 +  }
 +  return 1;
 +}
 +</pre>
 +}}
 +
 +*おまけ [#t8efa1e7]
 +調子が良ければ概ね20秒程度でwestonの起動まで行きつく。ひとまずシンプルなアプリケーションがどの程度動くかを見るために、手持ちのRealSenseとシリアルサーボモータをつないで動かしてみたときの画面をキャプチャしてみた。
 +#html{{
 +<video controls="" width="520"> <source src="/download/StartingRZBoard.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' autoplay="" preload="metadata"></source>
 +<p>動画を再生するには、videoタグをサポートしたブラウザが必要です。</p>
 +</video> <br />
 +}}
 +動画の最後、Power down後のpanicは横着してブートローダを更新しなかったからに他ならず。bitbakeした時に生成されたブートローダのイメージファイルをQSPIに書き込み、ようやく事なきを得る。ちなみにSDカードでブートする設定ではu-bootのsaveenvが失敗するため、環境変数やら設定等を覚えてくれることはない。
 +
 +またブートローダ更新のついでにeMMCにもLinuxのイメージを書き込もうとしたところ、とてつもなく時間がかかる。ドキュメントにある操作中の画面のキャプチャでは114684KBの転送に15秒とあるので、その20倍以上かかる状況は何かおかしい。書き込み用のバッチを動かしていたPCをWiFiにつなげていた事が原因。有線に切り替える事で解消。
 +
 +更にubuntuをホストPCとしているなら、シリアルターミナルのためだけにWindowsのTeraTermを引っ張り出してくる必要はない。そのPCにUSBシリアルI/Fをつないでターミナルにすれば良いまで。
 +#html{{
 +<pre class="brush: bash;">
 +$ screen /dev/ttyUSB0 115200,cs8
 +</pre>
 +}}
 +
 +他に気づいたこととして、UARTから吐かれるログのタイミングからして極端に動作が遅い時がある。何に依存しているのか調べていないが、電源ON直後からDDRのクロック周波数が落ちている挙動に見受けられる。
 +
 +J18/J20は使わないと勿体ない機能が含まれている。ヘッダは[[2-2367197-8>https://www.te.com/usa-en/​product-2-2367197-8.html?iso=usa]]なので、ハウジングの[[2-2367198-8>https://www.te.com/usa-en/​product-2-2367198-8.html]]を使って外線つなぐべし。


トップ   差分 リロード印刷に適した表示   全ページ一覧 単語検索 最新ページの一覧   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom