萌えハッカーニュースリーダー

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

出典: https://lupyuen.org/articles/unicorn4.html
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

まあ、ややこしいのはいつものことじゃ!

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

Search