RZBoard V2LでUbuntu

RZBOARD V2L(Avnet製)にUbuntu base 22.04LTSを導入します。

## ブートドライブ
/dev/mmcblk0がmSDまたはeMMCに割り当てられています。内蔵mSDスロットとeMMCは排他利用で、同時に利用することができないようです。
これに関してAvnetドキュメントを見るとこんなことが書かれています。

3.9 Storage
> Note：Due to the SD card and eMMC flash shar e the same hardware interface. Therefore, the system starts from SD card if it detects an SD card, and starts from eMMC if it does not，cannot use SD card and eMMC at the same time.

2.2 Booting RZBoard
>RzBoard supports Linux boot from eMMC or SD card.
a) Booting u-boot and the Linux System image from eMMC
b) Booting u-boot from QSPI flash, booting Linux system image from SD card

それから、電気的にはSDスロットが空で __BOOT0信号__ が1、挿入されていると0だと思います。

## 出荷時ブートローダーの書き込み
bootloaderが書き変わっている場合、出荷時ROM　(RZBoard_dashboard_eMMC.zip)を入手し、これに含まれるflash_bootloader.batを使ってQSPI flashにubootを書き込みます。
>2.1.4 Procedure to Reflash the Bootloader Firmware 
https://avnet.me/RZBoard_emmc

:::note warn
eMMCへの書き込みではありません。
flash_bootloader.batを実行すると書き込み先を訊かれますので、QSPIを選びます。
:::

## mSD上にrootFSを構築
出荷時Linuxイメージ(avnet-core-image-rzboard-20221213083153.rootfs.wic)を書き込んだmSDカードを用意します。
容量32GBytes程度のmSDを用意すると良いでしょう。mSDには/dev/mmcblk0p1 (/boot, 100MBytes)と/dev/mmcblk0p2 (poky, 3GBytes)が存在し、残りは未使用領域のはずです。

##### mSDの未使用領域にUbuntu baseのrootFSを作成します。
0. mSDの未使用領域に/dev/mmcblk0p3パーティションを作成
0. ext4でフォーマット(mkfs.ext4 /dev/mmcblk0p3などとします)
0. /dev/mmcblk0p3にubuntu-base-18.04*-base-arm64.tar.gzとmodules*.tgzのふたつを展開します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/1e9d5bad-56a3-891d-9fbb-fdcc274528b6.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/f106f0ba-5394-25e9-568b-b86c90b97127.png)


このmSDからRZBoard V2Lを起動します。
/dev/mmcblk0p2の出荷時Linuxイメージ(poky)でブートし、rootでログインします。
Linux(poky)が起動したらまず、ネットワークがreachableで正常に名前解決ができることを確認しておきましょう。(以下の作業はUbuntuリポジトリに接続できる環境が前提です。)

##### chrootしてpathを偽装しつつ、aptコマンドで環境構築します。 
```
# cd /lib/modules/5.10.83-cip1-g51ea567d6d/
/lib/modules/5.10.83-cip1-g51ea567d6d# depmod -a
/lib/modules/5.10.83-cip1-g51ea567d6d# cd

# export TZ=JST-9
# date -s "2023/5/1 12:34:56"
Thu May 1 12:34:56 JST 2023

# mount /dev/mmcblk0p3 /mnt

# mount -t proc none /mnt/proc
# mount -t sysfs none /mnt/sys
# mount -t devtmpfs none /mnt/dev
# chroot /mnt /bin/bash

# echo nameserver 8.8.8.8 >/etc/resolv.conf
# apt update

# apt install -y apt-utils perl-modules ubuntu-standard
# apt install -ynano vim net-tools ssh sudo tzdata rsyslog udev iputils-ping

# apt full-upgrade
```

4. カレントディレクトリを /lib/modules/<KernelVersion>に移動し、depmod -aコマンドを実行します。
4. システム時刻を正しい現在日時に設定します。(aptパッケージデータベースの日時判定を正しく動作させるため)
4. Ubuntu baseのrootFSをマウントします。
4. Ubuntu baseの/にchrootします。(chrootコマンドの実行でエラーが返る場合、ここまでの準備に誤りがあることを意味します)
4. DNSサーバーを仮設定しパッケージデータベースを更新します。(Ubuntuリポジトリに接続するため)
4. 必須コマンド等をインストール
4. Ububtu 18 LTSの更新があるはずなのでアップグレード

(TimeZone設定)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/0ac5e0e0-368a-f671-7133-c357976de05e.png)表示されたら、Asia/Tokyoを指示します。

##### 続いてネットワーク廻りの初期設定を行います。

```
# cd /etc/systemd/network
/etc/systemd/network# ls
/etc/systemd/network# nano 01-eth0.network
/etc/systemd/network# cat 01-eth0.network
[Match]
Name=eth0

[Network]
DHCP=ipv4
/etc/systemd/network# cd /etc
/etc# nano shadow
/etc# cat shadow
root::187655:0:99999:7:::
…
/etc# cd /etc/ssh/

/etc/ssh# nano sshd_config
/etc/ssh# cat sshd_config
…
permitRootlogin yes
…
/etc/ssh# cd
```

4. DHCPクライアントの設定をします。
4. rootアカウントでSSH接続するための設定をします。

(/etc/systemd/network/01-eth0.network)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/3c65c36a-d415-ac3c-4624-77144ca15091.png)
(/etc/shadow)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/c6ca894e-1a69-5b26-a274-689334072795.png)
(/etc/ssh/sshd_config)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/f9cb0417-a03c-753c-a083-b241fd1ac925.png)


##### systemd-networkdサービスの初期設定をします。

```
# systemctl enable systemd-networkd
# cp /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount
# systemctl enable tmp.mount
# systemctl enable systemd-resolved
# rm /etc/resolv.conf -f
# ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
```

##### chroot環境を終了して再起動
リブートしたら2秒以内にキーを押してU-Bootメニュー投入します。
```
# ^D
exit
# reboot
…
U-Boot 2021.01 (Jun 1 2021 - 00:36:02 +0000)
…
Hit any key to stop autoboot: 0
```

rootFSを/dev/mmcblk0p3に切り替えてブートします。
```
=> setenv bootargs 'rw rootwait earlycon root=/dev/mmcblk0p3'
=> setenv mmcbootargs 'setenv bootargs rw rootwait earlycon root=/dev/mmcblk0p3'
=> saveenv
=> run bootcmd
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/9a995558-9c51-d0d5-9a4c-9baa6c598bd8.png)

rootアカウントは初期パスワード無しです。ターミナルからログインできることを確認して完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/41da6d45-227c-6867-a862-465dcae3a8ef.png)
この時点のUbuntu baseは18.04 LTSです。デスクトップ版のUbuntu同様に、do-release-upgradeコマンドで20.04 LTSにアップグレートできます。
```
# apt update
# apt install update-manager-core
# apt full-upgrade
# do-release-upgrade
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/7151f0d9-e8e0-108d-dd6a-e901f708d81e.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/5c45fbcb-f14b-80e6-8326-f67b93d4d263.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/4fba49f2-f7b3-44dc-d1cd-400672a740ec.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/bec6eb5e-4561-c3b6-cd38-337eecda8418.png)
20.04 LTSからもう一度do-release-upgradeコマンドを実行することでで22.04 LTSにアップグレートできます。
```
# apt update
# apt full-upgrade
# do-release-upgrade
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/0b4f1379-9d0d-0dbf-82a2-83a47f4b56de.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376652/0167b67c-3da6-03e0-5b9b-7ec37ffc4930.png)



## とりあえずここまで。