67
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

QEMU でARM エミュレータ環境を作成する

Posted at

ARM エミュレータ環境はなぜ必要なのか

RaspberryPI を始めとするBareMetal やスマートフォン等に広く搭載されているプロセッサです。Core i7 などのIntel 製プロセッサとは命令セットが異なるため、ARM プロセッサ用バイナリをPCで実行することはできません。

ちょっとしたプログラムを作成し、ARM 環境での動作確認をしたい場合でも、ターゲットとなるボードがなければ実行できないのは大変不便です。

そこでQEMU という有名なエミュレータソフトウェアを用いてお手軽にARMエミュレータ 環境を作成し、簡単なプログラムを動かす方法を解説します。環境はUbuntu を想定しています。またプログラム例はC言語となります。

ユーザーモードエミュレーションの利用

今回の方法ではユーザーモードエミュレーションというQEMU の機能を利用します。これはARM 環境を完全にエミュレートするのではなく、PC上でARMバイナリをユーザーモードで動作させ、プロセスとして起動する、というものです。QEMU というと、仮想環境のイメージ等を用意しなkればいけないイメージですが、ユーザーモードエミュレーションは以下に示すように大変簡単に実行できます。

環境のセットアップ

ユーザーモードエミュレーションのQEMU をインストールします。

$ sudo apt-get install qemu-user-static 

次にARM 用のgcc をインストールします。

$ sudo apt-get install gcc-arm-linux-gnueabi

これで環境が整いました。

プログラムの作成とコンパイル

なんでもいいのですが、以下のような簡単なプログラムを作成します。

#include <stdio.h>
int
main(int argc, char *argv[])
{
    int a = 100;

    printf("Hello,World\n");
    printf("a:%d, &a:%p\n",a,&a);

    return 0;
}

コンパイルします。

$ arm-linux-gnueabi-gcc sample.c

readelf で出来上がったa.out がARM 向けバイナリであることを見てみます。

$ arm-linux-gnueabi-readelf -h a.out
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x833c
  Start of program headers:          52 (bytes into file)
  Start of section headers:          4536 (bytes into file)
  Flags:                             0x5000202, has entry point, Version5 EABI, soft-float ABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         9
  Size of section headers:           40 (bytes)
  Number of section headers:         30
  Section header string table index: 27

Machine がARM になっています。

作成したバイナリをQEMU で実行する

実行します。qemu-arm-static コマンドを使いユーザーモードエミュレーションで起動します。-L で指定しているのはARM 向けライブラリです。これは前半で説明したインストール時に同時に導入されているはずです。

$ qemu-arm-static  -L /usr/arm-linux-gnueabi a.out    
Hello,World
a:100, &a:0xf6fff44c

おわりに

QEMU ユーザーモードエミュレーションによるARM エミュレータ環境を解説しました。Ubuntu であればapt-get のみで環境が整ってしまうお手軽さが魅力です。

67
55
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
67
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?