Windows10でRaspberryPi用のクロスコンパイル環境を構築

前回の投稿では、QEMUを使ってWin10にエミュレータ環境の構築を試みたが、ハイスペックPCですら動作が遅く、SSHログインで躓いてしまったので、クロスコンパイル環境の構築に切り替えてみる。

色々調査したところ、以下に便利なサイトがあった。クロスコンパイル用のコンパイラと、RaspberryPi上で実際に動作しているライブラリやヘッダ群がセットになったようなパッケージである。

Windows toolchain for Raspberry/PI

ここでインストールするパッケージと実際のRaspbianのOSは合わせておいたほうが良さそう。

インストールが済んだら、さっそくチュートリアルを一通りやると、ワークフローが理解できる。
Tutorial: building Raspberry PI apps from Windows

前半では、RaspbianのOSイメージの作成から始まっているが、すでにRaspberryPiがRaspbianで起動している環境があるならスキップしてもよい。

Updating Sysroot for Raspberry PI Cross-Toolchain

上記のページでは、パッケージに含まれているライブラリやヘッダファイルを付属のツールでRaspberryPiへ転送して、ビルド環境と実行環境のライブラリを一致させている。
合せておいたほうが良さそうなので、手順通り実施する。

転送にはSSHでログインしているようなので、あらかじめSSHサーバーが起動している必要がある。

ツールを実行すると、下図のようにファイルの転送が実施される。結構時間がかかる。

cross_pi01

つづいて、以下のページには、VisualStudioを使っているなら、専用のウィザードも用意しているようなので、確認しておいて損はないが、30日トライアルとあるので、有料?

Developing a Raspberry PI app with Visual Studio

早速サンプルプログラムを作成して、実行まで試してみる。

#include <stdio.h>

int main()
{
    printf("Hello, world\n");
    return 0;
}

bin配下にたくさんのコンパイラがある。とりあえずGCCでビルドしてみる。当たり前だが、Win10環境で実行してもモジュールは実行されない。

> arm-linux-gnueabihf-gcc test.cpp -o test
> ./test
bash: ./test: cannot execute binary file: Exec format error

SysGCC\raspberry\TOOLS\PortableSmartty配下にあるSmarTTY.exeを実行してホストを選択する。(登録してない場合、ラズパイのIPアドレスなどを指定して追加する)

cross_pi02

ログインできると、コンソールが表示される。

cross_pi03

コンソールに先ほどビルドしたモジュールをドロップすると、/tmpへファイルが転送される。便利である。

cross_pi04

実行権限を付与して、モジュールが実行できることが確認できた。

> cd /tmp
> ./test
./test
Hello, world