e-tipsmemo

ごった煮

Ubuntu 22.04 LTS on Zynq with Petalinux

前回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に関しては別記事で書く。

感想

XSDKをまったく使わずにアプリ開発できそうなのは良い
デバイスドライバとかを書いてみたいが
それらしいHDLを書く必要がある