前回Zynqにpetalinuxで生成されたいろいろなものを書き込んで
起動できた記事を書いた。
しかしrootfsがbusyboxベースであったので、使い勝手が悪いんじゃないかと思い
Ubuntuやその他軽量なものを入れられるかを試してみる。
(petalinuxはあんまり関係なかった)
やったことは以下の記事と同じだが、今回は追加の手順を書いておく
(ネットワークや開発に便利そうなところ)
e-tipsmemo.hatenablog.com
とりあえず起動
上の手順をやったらUbuntu 22.04 LTSが起動した
sudoers
手順内で追加したユーザーはsudoではないので
rootに代わってsudoに入れておく。
root@ubuntu:/home/petalinux# usermod -G sudo petalinux root@ubuntu:/home/petalinux# id petalinux uid=1000(petalinux) gid=1000(petalinux) groups=1000(petalinux),27(sudo)
どうやら再起動が必要な様子?
ネットワーク
e-tipsmemo.hatenablog.com
昔はMDIOがつながっていなかったりしていたが、Vivadoを確認したところ
デフォルトでMDIOが設定されていた。
記事同様にeth0を起動する必要がある
sudo ip link set eth0 up
ipv4ではないので普通だとつながらないが
ipv6はつながっている
petalinux@ubuntu:~$ ping6 2404:6800:4004:822::200e -c 3 PING 2404:6800:4004:822::200e(2404:6800:4004:822::200e) 56 data bytes 64 bytes from 2404:6800:4004:822::200e: icmp_seq=1 ttl=57 time=2.99 ms 64 bytes from 2404:6800:4004:822::200e: icmp_seq=2 ttl=57 time=2.85 ms 64 bytes from 2404:6800:4004:822::200e: icmp_seq=3 ttl=57 time=3.04 ms --- 2404:6800:4004:822::200e ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 2.851/2.959/3.038/0.079 ms
ipv4の有効化
network: version: 2 renderer: networkd ethernets: eth0: dhcp4: yes
petalinux@ubuntu:~$ sudo netplan apply
で構文チェック。
インデントがタブだと怒られるのでスペース1個にした。
その後、
WARNING: systemd-networkd is not running, output will be incomplete. Failed to reload network settings: No such file or directory Falling back to a hard restart of systemd-networkd.service
と言われてしまった
networkdを起動する
petalinux@ubuntu:~$ sudo systemctl enable systemd-networkd [sudo] password for petalinux: Created symlink /etc/systemd/system/dbus-org.freedesktop.network1.service → /lib/systemd/system/systemd-networkd.service. Created symlink /etc/systemd/system/multi-user.target.wants/systemd-networkd.service → /lib/systemd/system/systemd-networkd.service. Created symlink /etc/systemd/system/sockets.target.wants/systemd-networkd.socket → /lib/systemd/system/systemd-networkd.socket. Created symlink /etc/systemd/system/sysinit.target.wants/systemd-network-generator.service → /lib/systemd/system/systemd-network-generator.service. Created symlink /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service → /lib/systemd/system/systemd-networkd-wait-online.service. petalinux@ubuntu:~$ petalinux@ubuntu:~$ sudo netplan apply
ipv4もOK
petalinux@ubuntu:~$ ping -c 3 google.com PING google.com(nrt13s52-in-x0e.1e100.net (2404:6800:4004:823::200e)) 56 data bytes 64 bytes from nrt13s52-in-x0e.1e100.net (2404:6800:4004:823::200e): icmp_seq=1 ttl=57 time=3.19 ms 64 bytes from nrt13s52-in-x0e.1e100.net (2404:6800:4004:823::200e): icmp_seq=2 ttl=57 time=2.65 ms 64 bytes from nrt13s52-in-x0e.1e100.net (2404:6800:4004:823::200e): icmp_seq=3 ttl=57 time=2.77 ms --- google.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 2.646/2.867/3.185/0.230 ms petalinux@ubuntu:~$
LED点滅
devmemだと前回と同じなのでRustでmemmap2をつかって書く。
zynq上でビルドするのは遅いので、WSL2でクロスコンパイルする。
下準備
rustup default nightly && rustup update cargo install cross cargo new hello --bin cd hello cross build --target armv7-unknown-linux-gnueabihf
どうやらdockerがないとcrossは使えないらしい
info: downloading component 'rust-std' for 'armv7-unknown-linux-gnueabihf' info: installing component 'rust-std' for 'armv7-unknown-linux-gnueabihf' 26.9 MiB / 26.9 MiB (100 %) 12.9 MiB/s in 1s ETA: 0s Error: 0: `docker` failed with exit status: 1 Stdout: The command 'docker' could not be found in this WSL 2 distro. We recommend to activate the WSL integration in Docker Desktop settings. See https://docs.docker.com/docker-for-windows/wsl/ for details.
WSL2にDockerを入れてやり直した。
~/d/r/z/devmem-rs (master)> cross build --target armv7-unknown-linux-gnueabihf Compiling libc v0.2.139 Compiling io-lifetimes v1.0.4 Compiling rustix v0.36.7 Compiling memmap2 v0.5.8 Compiling is-terminal v0.4.2 Compiling clap v4.1.4 Compiling devmem-rs v0.1.0 (/project) Finished dev [unoptimized + debuginfo] target(s) in 6.30s
scpで転送して点いた(devmem2とだいたい同じフォーマットにしてある)
memmap2に関しては別記事で書く。