QEMUにマシンを追加する(事前準備編)

- [はじめに](#はじめに)
- [実行環境の用意](#実行環境の用意)
- [ドキュメント](#ドキュメント)
- [qemu](#qemu)
- [クロスコンパイラ](#クロスコンパイラ)
- [IPL(ブートローダ)](#iplブートローダ)
- [FSP(アプリケーションプログラム)](#fspアプリケーションプログラム)
  - [e2studio](#e2studio)
    - [e2studioのダウンロード](#e2studioのダウンロード)
      - [XServer](#xserver)
      - [e2studioインストーラの起動](#e2studioインストーラの起動)
    - [e2studioのインストール](#e2studioのインストール)
  - [サンプルプログラムのダウンロード](#サンプルプログラムのダウンロード)
  - [FSP作成のためのライブラリダウンロード](#fsp作成のためのライブラリダウンロード)
  - [e2studioの起動とビルド](#e2studioの起動とビルド)

# はじめに
qemuのバージョンは記載時の最新であるv8.0.50を使用しました。
作成したのはarm互換マシンになります。

今回参考にしたのは[RenesasのRZ/A3UL](https://www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rz-mpus/rza3ul-powerful-1ghz-64-bit-mpus-rtos-support-enables-high-definition-hmi-and-quick-startup)になります。

理由は以下です
- [ハードウェアマニュアル](https://www.renesas.com/jp/ja/document/mah/rza3ul-group-users-manual-hardware?r=1619651)や[評価ボードのマニュアル](https://www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rz-mpus/rza3ul-evaluation-board-kit-rza3ul-evaluation-board-kit)が公開されている。
- [IPLのソースコード](https://github.com/renesas/rza-initial-program-loader)が公開されている。
- [アプリケーションプログラム例のソースコード](https://www.renesas.com/jp/ja/document/scd/rza3ul-evk-example-projects)が公開されている
- 日本の会社なので日本語の情報が多い

試した環境は以下です。
- iMac Late 2015

# 実行環境の用意
Mac上だと何かと面倒なのでdockerでubuntuを起動させてubuntu内で作業します。

dockerのインストール手順は割愛します。
自分は[lima](https://formulae.brew.sh/formula/lima)を使用しました。
インストール手順は[この辺](https://zenn.dev/matsukaz/articles/31bc31ff1c54b4)が参考になります。

エラーが出るたびに適当にaptでインストールすれば良いのですが
一応こちらで使用したDockerfileを貼り付けておきます。
今回特に必要になるのは2つ目のブロック(bison,flex等)になります。


<details>
<summary>Dockerfile</summary>



```Dockerfile
FROM ubuntu:22.04

RUN apt-get update -qq \
	&& DEBIAN_FRONTEND=nointeractive apt-get install -yq --no-install-recommends \
	build-essential \
	curl \
	less \
	git \
	&& apt-get clean \
	&& rm -rf /var/cache/apt/archives/* \
	&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN apt-get update -qq \
	&& DEBIAN_FRONTEND=nointeractive apt-get install -yq --no-install-recommends \
	bison \
	flex \
	python3 \
	ninja-build \
	pkg-config \
	sudo \
	libglib2.0-0 \
	libglib2.0-dev \
	libpixman-1-dev \
	gdb \
    unzip \
    bzip2 \
    libfuse2 \
    libgtk2.0-0 \
    libdbus-glib-1-2 \
	vim

RUN apt-get update -qq && apt-get upgrade -yq

RUN DEBIAN_FRONTEND=nointeractive apt-get install -yq --no-install-recommends \
	openssh-client \
	openssh-server \
    iproute2 \
    iputils-ping \
    language-pack-ja-base \
    language-pack-ja \
	wget

RUN apt-get install --reinstall ca-certificates

RUN adduser --disabled-password --gecos "" "user"
RUN echo user:user | chpasswd
RUN echo "user ALL=NOPASSWD: ALL" >> /etc/sudoers
```

</details>

ビルドコマンド(Dockerfileを置いた場所で)
```shell
docker build -t qemu .
```

# ドキュメント
今回作成するマシンのリファレンスとなる[ハードウェアマニュアル](https://www.renesas.com/jp/ja/document/mah/rza3ul-group-users-manual-hardware?r=1619651)をダウンロードします。

解凍してPDFの表示が出来ればOKです。

# qemu
以降は全てdocker上で作業します。dockerを起動させてください。
```shell
docker run -i -t -p 220:22  -e DISPLAY=host.docker.internal:0.0 -v ~/.Xauthority:/home/user/.Xauthority qemu
```
どうしてもファイルのやり取りが必要と思われたためscp用に22番を転送しています。
ポートは適当な番号で、自分のPCではimapを使っていないのでわかりやすい220にしました。
また、GUIの操作も必要そうなのでXの転送も有効にしています。

rootでログインするので適当にユーザを作ってください。
```shell
adduser user
```
sudoも有効にしておきましょう
```shell
echo "user ALL=NOPASSWD: ALL" >> /etc/sudoers 
```
以降は一般ユーザで作業します。
```shell
su user
```

qemuを持ってきます
```shell
mkdir qemu
cd qemu
mkdir build
git clone --depth 1 https://github.com/qemu/qemu.git
```
ディレクトリイメージです。
```
workdir
├─ qemu
│  ├─ qemu
│  └─ build
```
buildディレクトリに入ってqmeuをビルドします。
```shell
cd build
../qemu/configure --target-list=aarch64-softmmu --enable-debug
make
```
正常にビルドが出来て`qemu-system-aarch64`が出来ればOKです。
エラーが出る場合は大体何かのライブラリが足らない場合と思われるので
エラーメッセージを見ながらaptでインストールして下さい。

# クロスコンパイラ
後掲するe2studioをインストールすれば不要ですが、
そうでない場合はコンパイラが必要です。

qemu上で動くプログラムをコンパイルする[クロスコンパイラ](https://developer.arm.com/downloads/-/gnu-a)をダウンロードします。
x86_64 Linux hosted cross compilersの
AArch64 ELF bare-metal target (aarch64-none-elf)
が該当のものになります。
```shell
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
```

解凍してパスを通して下さい。
PATHの設定は.bashrcなどに記載しておくのが良いと思います
```shell
tar xf gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
export PATH=`readlink -f gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf`/bin:${PATH}
echo export PATH=${PATH} >> ~/.bashrc
```

aa[Tab]と打って、`aarch64-none-elf-`と出てきたらOKです。


# IPL(ブートローダ)
ダウンロードしてビルド確認します。
```shell
git clone https://github.com/renesas/rza-initial-program-loader.git ipl
cd ipl
CROSS_COMPILE=aarch64-none-elf- make PLAT=qemu V=1 DEBUG=1 2>&1 | tee make.log
CROSS_COMPILE=aarch64-none-elf- make PLAT=a3ul BOARD=a3ul_smarc_qspi V=1 DEBUG=1 2>&1 | tee make.log
```

以下が作成されればOKです。
- ./build/qemu/debug/bl1.bin
- ./build/a3ul/debug/bl2.bin

# FSP(アプリケーションプログラム)
FSPをコマンドラインでビルドする方法はわかりませんでした。
仕方がないのでe2studioをインストールします。
e2studioはGUIのIDEなのでMacOS上にXServerを起動して表示させます。

## e2studio
### e2studioのダウンロード
[ここ](https://www.renesas.com/jp/ja/software-tool/e2studio-information-rz-family#download)にあるのですが、ルネサスへのユーザ登録必須となっています。

また、自分の環境ではルネサスの認証を突破可能なブラウザを
ubuntu上に動作させることが出来ませんでした。
<details>
<summary>一応試したブラウザ</summary>

|ブラウザ |結果 |
|--|--|
| midori | 同意画面で同意を押しても反応しない|
| vivaldi | 重すぎてまともに動かない |
| firefox | 重すぎてまともに動かない |
|古いfirefox(v32.0) | 同意画面で同意を押しても反応しない|
</details>

仕方がないのでMacOSでダウンロードしてscpで転送しています。
docker起動時にポート転送指定したのはこのためです。
docker上でsshdが起動していなければ
```
/usr/sbin/sshd -D &
```
などで起動させて下さい。

ポート転送済みなのでscpコマンドは以下のように出来ます。
```
scp -P 220 e2studio_installer-2023-04_linux_host.run user@localhost:/tmp/
```

#### XServer
GUIをMacOS上で表示させるために[XQuartz](https://www.xquartz.org)の実行が必要になります。
普通にダウンロードしてインストールして下さい。

起動させた後、メニューからXQuartz -> 環境設定 -> セキュリティで
ネットワーク・クライアントからの接続を許可にチェックを入れて
XQuartzを再起動する必要があります。

#### e2studioインストーラの起動
ubuntu上で
```
chmod +x /tmp/e2studio_installer-2023-04_linux_host.run
/tmp/e2studio_installer-2023-04_linux_host.run
```
とするとインストーラが起動します。
### e2studioのインストール
[アプリケーションノート](https://github.com/renesas/rza-initial-program-loader/blob/main/application_note/r01an6413ej0120-rza3-ipl-application-note-qspi.pdf)の`6.1 Procedure for building a development environment for Widows10 PC`あたりを見ながらインストールしてください。
ubuntu版も次の章に記載されていますが大して違いはありません。


## サンプルプログラムのダウンロード

[ここ](https://www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rz-mpus/rza3ul-evaluation-board-kit-rza3ul-evaluation-board-kit#document)の[サンプルコード](https://www.renesas.com/jp/ja/document/scd/rza3ul-evk-example-projects?language=en&r=1619666)からソースコードをダウンロードするのですが
Renesasへのユーザ登録が必須となっていて
wgetなどの直接ダウンロード方法が不明となっています。

e2studioと同様にMacOS側でダウンロードしてscp等で転送してください。

## FSP作成のためのライブラリダウンロード
[ここ](https://github.com/renesas/rza-fsp)にあります。
ダウンロードして解凍した後、e2studioのディレクトリへ保存します。
```
wget https://github.com/renesas/rza-fsp/releases/download/v1.2.1/RZA_FSP_Packs_v1.2.1.zip
unzip RZA_FSP_Packs_v1.2.1.zip
mv internal/ ~/.local/share/renesas/e2_studio/
```

## e2studioの起動とビルド
以下で起動します。
```
~/.local/share/renesas/e2_studio/eclipse/e2studio &
```
[アプリケーションノート](https://github.com/renesas/rza-initial-program-loader/blob/main/application_note/r01an6413ej0120-rza3-ipl-application-note-qspi.pdf)の`6.1 Procedure for building a development environment for Widows10 PC`あたりを見ながらビルドしてください。

```
Build Finished. 0 errors, 0 warnings. 
```
と表示されればOKです。


[QEMUにマシンを追加する(枠の追加)](https://qiita.com/t-yano-tryhard/items/820e2d177ddf208fbbe9)に続きます