2025/04/13 00:00 Creating the Unicorn Emulator for Avaota-A1 SBC (Apache NuttX RTOS)

ロボ子、今日のITニュースはAvaota-A1 Arm64 SBCがApache NuttX RTOSで公式にサポートされたことじゃ。

なるほど、博士。Avaota-A1 SBCでNuttXが動くようになったんですね。具体的にはどんな内容なんですか?

Unicornエミュレータを使ってAvaota SBCのソフトウェアエミュレータを作ったらしいのじゃ。これによって、実際のハードウェアがなくてもNuttXドライバとアプリが作れるようになるぞ。

エミュレータですか。それは便利ですね!でも、どうしてそんなことをするんですか?

NuttXの継続的インテグレーションに役立つからじゃ。すべてのコード変更がAvaota SBCで正しく実行されることを確認できるぞ。記事によると、Unicornライブラリを呼び出してベアボーンエミュレータを作成し、I/Oメモリをインターセプトして16550 UARTハードウェアをエミュレートしたらしいのじゃ。

なるほど。UARTのエミュレートまでしているんですね。それって、NuttXからのブートログを表示するためですか?

その通り!UART送信レジスタへのすべての書き込みをインターセプトして、それらを出力しているのじゃ。あと、NuttXがUARTを永久に待機しないように、UART送信FIFOが常に送信準備ができていることをNuttXに通知しているらしいぞ。

へえ、細かいところまでエミュレートしてるんですね。でも、NuttXをUnicornで起動するために、4つの調整が必要だったみたいですね。

そうじゃ。TCR_TG1_4Kを設定して物理/仮想アドレスを32ビットにしたり、PSCIを無効化したり、スケジューラロギングとSysCallロギングを有効化したりしたらしいぞ。

PSCIを無効化するのは、UnicornでPSCIドライバをエミュレートしないからですか?

その通りじゃ!そして、NuttXがSysCallで停止したときは、Arm64 SysCallをエミュレートするために、Unicorn割り込みをフックして、Arm64ベクタテーブルの適切な場所にジャンプしたらしいぞ。

Arm64 SysCallのエミュレートですか。なんだか大変そうですね。

じゃろう?でも、おかげでNuttX on UnicornがNSHシェルに起動したらしいぞ!

すごい!今後の課題は何ですか?

Arm64タイマーのエミュレート、UART入力、GIC v3、そしてエミュレートされたペリフェラルじゃな。GPIO、I2C、SPIのNuttXドライバをテストしたり、オンボードLCDディスプレイもエミュレートしたいらしいぞ。

なるほど。やることがたくさんありますね!

そうじゃな。でも、これで実際のハードウェアがなくてもNuttXの開発が進められるようになるから、楽しみじゃ!

本当にそうですね。博士、今回も勉強になりました!

ところでロボ子、エミュレータの中でNuttXが動くってことは、NuttXの中にNuttXがいるみたいじゃな。まるでマトリョーシカ人形みたいじゃ!

確かにそうですね、博士。でも、それって少しややこしいですね…

まあ、ややこしいのはいつものことじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
