久々の投稿です。
悪戦苦闘の結果、ultra96 (version 1 基板?) 上で petalinux 2019.1 を動かすことが出来たので、メモします。
準備
Vivado で ultra96 ボードを選択し(ultra96ボードの定義ファイルは avnet の GitHub に落ちています)、プロジェクトを作成します。
ZynqMP+ を配置し、クロックのみ配線します(右側に出ているクロック端子を左の2つのクロック端子に直配線します)。
通常通り bitstream 作成を行い、Vivado SDK にエクスポートします。この時、bitstream を含むようにします。
wpa_supplicant.conf の編集
自分が使う AP に合わせて wpa_supplicant.conf を編集します。
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1
network={
key_mgmt=WPA-PSK
ssid="[ssid]"
psk=[wpa_passphrase で生成したパスワード]
}
などとすれば OK。
petalinux プロジェクトの作成
petalinux-create -t project -n ultra96 --template zynqMP
などとして、ultra96 プロジェクトを作成します。ultra96 ディレクトリに cd で移動します。
petalinux-config --get-hw-description=[Vivado SDK 用の hdf を含むディレクトリ]
でハードウェア情報を取り込みます。
デバイスツリーの修正
デバイスツリーを修正して、デバイスが認識できるようにします。
微妙な感じですが、私が適用したものをここに置きましたのでご参考までに。
device-tree ディレクトリ以下にあるファイルを ultra96/project-spec/meta-user/recipes-bsp/device-tree 以下にコピーします。
kernel の設定
nl80211 および wl18xx デバイスドライバを利用するように設定します。petalinux のデフォルトでは両方とも使用するようになっているようです。
roofs への iw, wifi-firm アプリの追加
petalinux-create -t apps -n iw
petalinux-create -t apps -n wifi-firm
を実行し、iw, wifi-firm アプリを生成します。これらはここに置いてある iw, wifi-firm で置き換えます。
ちなみに iw は iw-5.0 の Makefile を bitbake 用に書き換えたものです。wifi-firm は TI wl18xx 用のファームウェアです。公式版はここに置いてあることになっていますが、私の手持ちとちょっと違うようです。
ライブラリ、アプリの有効化
petalinux-config -c rootfs
を実行し、libnl, wpa_supplicant, iw, wifi-firm を選択する。
コンパイル実行
petalinux-build を叩いて bitbake を起動する。気長に待つ。
途中ワーニングが出るが気にしない。
BOOT.BIN 作成と SD イメージ作成
後は SD カードを用意していつもの作業。
SD カードは fdisk で予めパーティションを2つ切っておきます。
cd images/linux
petalinux-build --force --boot --fsbl zynqmp_fsbl.elf --fpga system.bit --pmufw pmufw.elf --u-boot
sudo mount -t vfat /def/sdd1 /mnt
sudo cp BOOT.BIN image.ub /mnt
sudo umount /mnt
sudo dd if=rootfs.ext4 of=/dev/sdd2
sudo e2fsck -f /dev/sdd2
sudo resize2fs /dev/sdd2
私の環境では SD カードスロットが /dev/sdd* でしたが、それぞれの環境に合わせてください。
SD カードを ultra96 に挿して起動すると wifi が起動するはずです。
お疲れ様でした。
問題点
wpa_supplicant.conf-sane はコンフィグ時に定期的に監視しているらしく、いつの間にか置き換え前の内容に戻ってしまう場合があります。
その場合は改めて wpa_supplicant.conf-sane をコピーして bitbake を起動し直すと良いようです。ユーザは最初 root しかいませんが、ssh は root によるログインを禁止しているため、結局ネットワーク経由では最初は入れません!
この問題は新たなユーザを useradd 等で作成すると解決できますが、bitbake 時に予め作っておく方法が分かりませんでした。