FreeRTOSを動かしてみる(6)

うーんだいぶ鬱陶しい

<details>
<summary>めっちゃやられてる</summary>

```
State            Recv-Q            Send-Q                        Local Address:Port                          Peer Address:Port            Process            
ESTAB            0                 0                                 127.0.0.1:56617                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:48880                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:32881                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:41148                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:41409                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:33462                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:58204                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:50647                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:34587                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:34782                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:59473                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:43149                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:35596                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:52096                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:60311                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:36015                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:53033                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:53193                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:36851                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:53472                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:37475                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:38055                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:46897                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:47370                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:39190                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:47590                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:39582                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:56029                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:48233                            127.0.0.1:7144                               
ESTAB            0                 0                                 127.0.0.1:48244                            127.0.0.1:7144   
```

</details>


PC自体が遠隔操作可能で暗号化ストレージのマウントも出来るんじゃしょうがない。
オレンジの嫌がらせは放っておいて実装を進める。

----
# NIC デバイスドライバ

[ホスト側はこんな感じ](https://github.com/tyano461/virtether/commit/835fe5356682805111db06d09109c06ac36ca704)で良いかな。

NICへの割り込みは大分面倒くさそうなので以下のようにした。

![image](https://kroki.io/graphviz/svg/eNp9U8tugzAQvPMVls_lCyw4pZEiRWrVpqeoqhzYBKtgnLVJE0X59-IHFAgpB2TvzI5nvetcHJCrgizINSLth1x-5wJJQjYL5iISfmwwMdgAi3yozmGrC64gobv6TJ-INpey3WDdyBxy-uloutl58axstAH8WgvZnMNB9iv5DsqEujCN-vBd3objAcwgcZBsPMaVGig4XKht4Kxeg6O_3B4DUwBKMFOGUHFqae1l2CJNMSDc-lVWYA6nx87zpqou88Y9pLDOQGs6Yui6gs7fx2JqXtVl2aFZAdk34IRh8-PU8UJjhDwJPVvBneUjVM28Y4uMje47H8vV-rmVH7uYKi8R4G3z8j5RH5zQMegdAf_ppp_bmY6SOZk4xQdtHV-MX_l_OwgkTt29Rl0L4rSv3m6FPAQpDw4mwy_dOIU35tT2UdcruxsUIPAYpNwUummY9NGhV_daE80rYJbKbHksWB6D3IJ8HtwzZ5ndotsvPDUbpA==)

残りは以下

- Qemuからの出力
- Qemuへの入力

出力は当初ファイルを考えていたが共有メモリでも良いかもしれない

# Qemuからの出力
printfが直通出来るんだから他にもなんかあるんじゃないか？
ということで大元のコードを見てみる

[とりあえずこの辺](https://github.com/qemu/qemu/blob/master/hw/arm/mps2.c)

gpioとかi2sとかあるようだけど
どうも簡単には行かなそう

[こんなの](https://www.qemu.org/docs/master/system/devices/ivshmem.html)もあるみたいだけど面倒くさそう

ということでqemuに手を入れようと思う。

実際にやりたいのはqemu-ホスト間通信ではなく、freertos-Linux間でTCP/IP通信が出来ることなので
ロケハンで使うのは適当で良いだろうという判断

# qemuのビルド
## 環境
- fedora 39 xfce

始めたときはubuntu上でやっていたが、今は訳あってfedoraでやっている。
centosとかRHELとかfedoraベースのものは多分同じ感じで行けるはず。

gccとかpythonは入っている前提

## ビルド手順

### ビルドツールのインストール
```
sudo yum install -y ninja-build glib2-devel.x86_64
```

### ソースコードのダウンロード

```
git clone https://github.com/qemu/qemu.git
```

### build
```
mkdir build_qemu
cd build_qemu
../qemu/configure --target-list=arm-softmmu --enable-debug
make

```

Core i5-4200U で20分くらい

### 動作確認

```
 sudo /path/to/build_qemu/qemu-system-arm -machine mps2-an385 -m 16 -monitor null -semihosting --semihosting-config enable=on,target=native -kernel ./build/RTOSDemo.axf -serial stdio -nographic
[0000] NetworkInterface.c(132) pxFillInterfaceDescriptor mac:0 fr:0x53a7 
[1cd8] NetworkInterface.c(192) ether_task  fr:0x281 
[67ac] FreeRTOS_IP.c(1397) xSendEventStructToIPTask et:0 fr:0x56c1 
[2510] app_server.c(14) server_task  fr:0x281 
[2510] app_server.c(31) vCreateTCPServerSocket sock:536948136 fr:0xd951 
[2510] FreeRTOS_IP.c(1397) xSendEventStructToIPTask et:9 fr:0x98e1 
[2d48] app_client.c(28) client_task  fr:0x281 
[2d48] app_client.c(36) client_task fopen failed fr:0x281 
[2d48] app_client.c(54) vTCPSend IN fr:0xd827 
[2d48] app_client.c(64) vTCPSend socket fr:0xd827 
```
いい感じ


今回もFreeRTOS全く関係なかった
当分はスタブ側かなぁ