Ultra96 の mini Display Port

Ultra96 は mini DisplayPort 端子なので、テレビに映したいと思い、パッシブ系の変換ケーブルを買ってきた。

違うメーカーのケーブル 2本買ってみたが、どちらもダメだった。どうやら Ultra96 のビデオ出力はデュアルモードがサポートされていない模様。

もちろん、Display Port への変換ケーブルは機能するので、DP 付きのモニタを使えばよいのだが、10インチ位のディスプレイは HDMI しかサポートしていなかったりする。

仕方がないので、HDMI モニタはラズパイ用にします。

PetaLinux 2018.2 エディションで Ultra96 の wlan1 の dhcp クライアントを使う

Ultra96 ボードを Vivado 2018.2 および PetaLinux 2018.2 から dhcp クライアントとして wlan1 を使用する場合のメモ書きです。

Ultra96 には WiFi チップが乗っていますが、デフォルトでは phy の存在までしか認識されず、wlanX インタフェースを明示的に作成する必要があるようです。

そこで、Ultra96 の wlan1 をWiFiルータに接続するための手順をまとめてみました。

ちなみに、2018.3 にはどうも必要なファイルが足りていないらしく、initramfs からのブートすら出来ませんでした。

  • Xilinx の PetaLinux 2018.2 ダウンロードコーナーにある Ultra96 の BSP をダウンロードする。
  • petalinux-create -t project -s <BSP ファイル名> でプロジェクトを展開する。
  • petalinux-config -c kernel で WiFi チップのデバドラがあることを確認する。
    (デフォルトで入っているので通常はいじらなくてOK)
  • petalinux-config -c rootfs で User packages を選択し、
    packagegroup-petalinux-ultra96-webapp
    ultra96-ap-setup
    のチェックを外す。
  • Filesystem backages => base => busybox にある busybox-udhcpc のチェックをつける。
  • petalinux-config でブート先が SD カードになっていることを確認する。
    (本BSPはデフォルトで SD カードブートになっているので、通常はいじらなくてOK)
  • petalinux-build でコンパイルする。気長に待つ。
  • コンパイルが終了したら、images/linux ディレクトリに降り、
    petalinux-build --boot --force --fsbl zynqmp_fsbl.elf --fpga system.bit --pmufw pmufw.elf --u-boot

    で BOOT.BIN を構築する。

  • sudo su で root ユーザになっておく。また /mnt に何もマウントしていないことを確認する。
  • この投稿の後ろの方に示すスクリプトを走らせ、起動時に wlan1 を作成して udhcpc を起動するようにする。
  • SD カードをセットして、マウントする。/dev/sdX1 (X はお使いのPCによって変わります。私のPCでは “d” でした。) の場合は
    mount -t vfat /dev/sdX1 /mnt

    として、/mnt に FAT32 パーティションをマウントする。

  • BOOT.BIN, image.ub を FAT32 パーティションにコピーする。
    cp -fp BOOT.BIN image.ub /mnt
  • アンマウントして先ほど編集した rootfs.ext4 を dd コマンドで /dev/sdX2 にコピーする。
    umount /mnt
    dd if=rootfs.ext4 of=/dev/sdX2 bs=1M

    これも時間がかかるので気長に待つ。

  • お好みで e2fsck, resize2fs をかけて割り当てたパーティション全体が使用できるようにする。
    e2fsck -f /dev/sdX2
    resize2fs /dev/sdX2

     

以上のように作成した SD カードを Ultra96 に挿して起動すると、wpa_supplicant.conf で指定した WiFi  ルータにつながるようになります。

最後に、rootfs.ext4 を編集するスクリプトを掲載します。SSID, PSK にはお手持ちの環境に合った値を入れて下さい。

#!/bin/bash

mount -t ext4 -o loop rootfs.ext4 /mnt

cat <<EOF >/mnt/etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
        key_mgmt=WPA-PSK
        ssid=""
        #psk=""
        psk=
}
EOF

sed 's/wlan0/wlan1/g' /mnt/etc/network/interfaces > '/mnt/etc/network/interfaces
.XXX'
mv '/mnt/etc/network/interfaces.XXX' /mnt/etc/network/interfaces
cat <<EOF >/mnt/etc/init.d/ultra96-wlan1.sh
#! /bin/sh

### BEGIN INIT INFO
# Provides: Ultra96 wlan1 interface
# Required-Start:
# Required-Stop:
# Default-Start:S
# Default-Stop:
# Short-Description: attaches Ultra96 wlan1
# Description:       attaches Ultra96 wlan1
### END INIT INFO

DESC="ultra96-power-button.sh powers off the board when the power button is pushed"

case "\$1" in
  start)
    echo -n "Start Ultra96 wlan1"
    iw phy phy0 interface add wlan1 type managed
    echo "."
    ;;
  stop)
    echo -n "Stop Ultra96 wlan1"
    ifconfig wlan1 down
    ;;
  *)
    echo "Usage: /etc/init.d/ultra96-wlan1.sh {start|stop}"
    exit 1
esac

exit 0
EOF

chmod +x /mnt/etc/init.d/ultra96-wlan1.sh

rm -f /mnt/etc/rcS.d/S99ultra96-wlan1.sh

pushd /mnt/etc/rcS.d

ln -s ../init.d/ultra96-wlan1.sh S99ultra96-wlan1.sh

popd

umount /mnt

 

petalinux 2018.2 で ZYBO の eth0 を使う

本当に久々の記事更新です。
既知の問題かも知れませんが、散々ぐぐっても出てこなかったので、ここにメモしておきます。

petalinux 2018.2 を使い、ZYBO (Z7 ではなくて古いボード) の eth0 を使おうとしたところ

macb e000b000.ethernet eth0: unable to generate target frequency: 125000000 Hz

という謎のエラーが出て PHY チップと通信できない問題が発生。

ぐぐってもよくわからず、最終的に

https://github.com/wzab/Z-turn-examples/blob/master/README.md

を読んで気づきました。Vivado 2018.2 では ZYNQ-7000 の ENET0 のクロックソースがデフォルトで External になっていることを…。

記事にある通り、IO PLL に設定して hdf ファイルを再作成し、petalinux を再コンパイルしたところ、問題なくリンクが上がりました。
(petalinux 設定はこのサイトを見て実行しました。また、eth0 ポートは GbE に挿してください。)

あとはジャマな IPv6 設定を

echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6

として無効化し、udhcpc を再起動すると IPv4 アドレスが無事、家庭内ルータから取得できました。

 

minosysScript 更新中

minosysScript 実装中です。

今日までに代入、++、– –、比較演算子、+, * を実装しました。
今週は地道に演算子の実装を行う予定です。

今週中に演算子全ての実装が終わると思いましたが、
演算子の数が思ったよりも多く、ちょっと無理そうです。

minosysScript を1年ぶりに更新中

実行エンジンを中途半端に実装して1年間
ほったらかしていた minosys-scrypt ですが、
1年ぶりに実装を追加することになりました。

minosys-script.git を取得するすると最近の
ソースコードが入手できます。

とりあえず、今週末までには class, package
関連以外の内容を追加したいと考えております。
毎日コミット予定なので、言語が出来ていく様子が
リアルタイムで見られるかも?!

minosys-script は最終的には www サーバ
として稼働して www に特化した処理(html の
ダウンロードや画像ファイルの range 転送)
を実装する予定ですので、乞うご期待。

何年先になるか分かりませんが。

 

フリーランス

開業届を税務署に出してきました。

知人には今年の年賀状でフリーランス宣言していましたが、
これで、名実ともにフリーランスということになりました。

当面は請負で食べていくつもりですが、技術コンサルや
製品開発のお手伝いまで間口を広げられればいいなと思っています。

皆様、よろしくお願いします。

自作PCを無償譲渡

お世話になった支援施設に自作PCを進呈することになりました。
スペックは Core i7 860 と初代 Core i7 ですが、Windows10 を
載せてみると意外に快適に動きました。

このPC、今は懐かしい東芝の SpursEngine が乗っていて、
ビデオ圧縮の速さは今なおダントツです。
(ビデオカードは nVidia GT640なのでCUDAも動きますが、
非力です)

その他、HDDが2TB×2発乗っていたりして、完全にビデオ編集向け
仕様なのですが、きっとオーバースペックだろうなあ。

TWELite が電池を消費する問題(3)

TWELite を変更して2週間経過したが、電源電圧は3.08Vと
3V台をキープしている。このまま行けば、最低1か月は
持つのではないだろうか。

変更したのは TWELite デバイスと繰り返し精度を「低」に
にしたことだが、繰り返し精度が消費電力に影響するとは
思えないので、やはり購入したデバイスが外れだったと
考えるのが妥当だろう。

TWELite が2日で電池を消費する問題(2)

PWM, ADC, OUTポート、I2C, SIO と次々に切っていっても
電池を消費してしまうため、試しに SHT31 だけを電池に
つないで放置してみた。

2時間経過しても電源電圧に変化なしだったので、
これは TWELite 側の問題だなと確信し、デバイスを別の
ものに変えてみた。

3時間経過後、電源電圧は降下していていなかったので、
おそらく予想が当たっていたのではないだろうか。