もみあげあしめ

組み込みとかIoTとか、いろいろ

WindowsでRaspberry Piのクロスコンパイル環境を作る

プログラムの動作検証環境が欲しくて購入したRaspberry Piですが、
無線LANドングル経由でコードの編集・コンパイルをしていると、
(私の環境では)なぜか急にネットワークに繋がらなくなることがあります。

f:id:shima_nigoro:20160503141126p:plain:w300
こうなると、作業中のコードが消えてしまい、精神衛生上よろしくないので
今回はWindows上でVirtual Machine(VM)を動かし、そのVM上でクロスコンパイルする方法
についてまとめていきます。


1.Virtual Boxのインストール
Virtual Boxのインストーラは下記にて配布されています。
Downloads – Oracle VM VirtualBox
16/4/30時点では下記バージョンが最新であったのでそのままインストール。

VirtualBox 5.0.18 for Windows hosts x86/amd64

2.OSのダウンロード
OSはDebian32bit版(i386)を使います。
下記ページからネットインストール用のISOがダウンロードできます。
Installing Debian via the Internet

debian-8.4.0-i386-netinst

3.VMの作成とOSのインストール
仮想のマシンを作ってそのマシンにOSをインストールします。
手順については下記ページが参考になるかと、設定内容は適宜読み替えてください。
Debian (squeeze) 64bit をVirtualBoxにインストール - 飲んだり寝たり
※ISOファイルは手順2でダウンロードした32bit版(i386)を使います。

4.クロスコンパイラのダウンロードとPATHの設定

以下断りがない限り、この枠内の操作はVM上のDebianCUI操作とします。

Gitがインストールされているならば、下記コマンドでクロスコンパイラをダウンロードします。
※コマンドを実行したディレクトリ以下にファイルがコピーされることに注意。

git clone https://github.com/raspberrypi/tools

#諸々のコンパイラが入っているので結構ファイルサイズが大きいです。(600MBくらい?)
ダウンロード完了したあとはパスを通しておきます。(~/.bashrcに下記を追加)
下記の[git実行パス]は適宜読み替え。

PATH=$PATH:[git実行パス]/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian
PATH=$PATH:[git実行パス]/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
export PATH

パスの設定を反映するためには再起動もしくは、下記コマンドを実行します。

source ~/.bashrc

参考ページ:Kernel Building - Raspberry Pi Documentation

5.クロスコンパイルの実行
gccと同じようにコンパイルできます。例えば、下記のコードを“test.c”として保存して

#include <stdio.h>
int main(void)
{
  printf("Hello world!\n");
  return 0;
}

下記コマンドでコンパイルすると、実行ディレクトリにa.outが生成されます。

arm-linux-gnueabihf-gcc test.c

6.生成ファイルの実行

コンパイル環境(VM上のDebian)では下記エラーが出ますが

 -bash: ./a.out: cannot execute binary file: 実行形式エラー

Raspberry Pi上にコピーして実行すると下記の出力が得られます。

Hello world!

これで、Windows10でRaspberry Piのクロスコンパイル環境作成は完了です。
お疲れ様でした。

(補足)動作確認バージョン
「lsb_release -a」で確認したraspbianのバージョンは下記とおりです。

No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 7.10 (wheezy)
Release:        7.10
Codename:       wheezy

uname -a」で確認したkernelの情報は下記とおり

Linux version 4.1.13-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #826 SMP PREEMPT Fri Nov 13 20:19:03 GMT 2015


(補足2)VMを動かすマシンパワーがない場合
どうしてもWindows上だけで完結させたい!という方は下記ページ等が参考になるかと思います。

Windows用ツールチェインを使ってデバッグ環境を作る方法について書かれています。
WindowsのEclipseでraspberry pi用のクロス開発環境を作成 - のねのBlog
ちなみにWindows用のクロスコンパイラ等が入ったツールチェインは下記にて配布されています。
Windows toolchain for Raspberry/PI

Raspberry Pi 3 Model B (Element14)

Raspberry Pi 3 Model B (Element14)