2018年02月03日

STM32のバイナリをQEMUで動かしてみた

qemu-stm32.png
Raspberry PiのベアメタルプログラミングではQEMUを使うことができましたが、同様にしてSTM32のソフトウェアもエミュレータで動かすことができます。
オリジナルのQEMUはSTM32のボードをサポートしていませんが、ここからフォークしたGNU MCU Eclipse用のQEMUでは、いくつかのSTM32ベースのボード(と、Cortex-m7)をサポートしています。

The GNU MCU Eclipse QEMU

Windows版のQEMUをダウンロードして、SW4STM32でビルドしたバイナリを動作させてみました。
最新版では現在Windows版がありませんが、以前のバージョン(私はv2.8.0-20161227を使いました)で問題ありません。

サポートされているボードの中から、NUCLEO-F411REを使ってみることにしました。
CubeMXを使って、Lチカを作成します。
F411REではオンボードLEDがPA5に接続されていますので、メインループを
  while (1)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(500);
}
としました。

ビルドして、QEMUで起動します。オプションは

C:\>"C:\Program Files\GNU ARM Eclipse\QEMU\2.8.0-201612271623-dev\bin\qemu-system-nuarmeclipse.exe" -verbose -board NUCLEO-F411RE --image qemu-test-f411re.bin
のように指定します。最後のbinファイルはビルドしたバイナリファイルです。

すると、
GNU ARM Eclipse 64-bits QEMU v2.8.0 (C:\Program Files\GNU ARM Eclipse\QEMU\2.8.0
-201612271623-dev\bin\qemu-system-gnuarmeclipse.exe).
Board: 'NUCLEO-F411RE' (ST Nucleo Development Board for STM32 F4 series).
Device: 'STM32F411RE' (Cortex-M4 r0p0, MPU, 4 NVIC prio bits, 86 IRQs), Flash: 5
12 kB, RAM: 128 kB.
Image: 'qemu-test-f411re.bin'.
Command line: (none).
Cortex-M4 r0p0 core initialised.
Cortex-M4 r0p0 core reset.

C:\Program Files\GNU ARM Eclipse\QEMU\2.8.0-201612271623-dev\bin\qemu-system-gnu
armeclipse.exe: Attempt to set CP10/11 in SCB->CPACR, but FP is not supported ye
t.

というようにエラーで止まってしまいました。
エミュレータがサポートしていないFPUを利用しようとしたため、ということのようです。
そこで、ソースコード中でこの処理を行っている部分(system_stm32f4xx.c)を以下のようにコメントアウトして再度ビルドしたところ、うまく動作しました。
void SystemInit(void)
{
/* FPU settings ------------------------------------------------------------*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
// SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
#endif

本当はこのあと、GDBに接続させてQEMU上のバイナリをデバッグしてみたいところですが、SW4STM32にGNU MCU EclipseのQEMU Debuggingプラグインを入れただけではうまく動作しませんでした。
posted by boochow at 14:25| Comment(0) | stm32 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
人気記事