QLOOKアクセス解析

STM32をはじめとしたARMマイコンをGCCでビルドする環境を整える(2015年度後期版)

当記事はWindows環境下におけるARMマイコンの開発環境構築”入門”ではなく、
私が公開しているプロジェクトをビルド/デバッグするために必要な最小限の手順の
指南という位置づけです。

はっきり言いますが初学者向きの解説ではありません。専門的な語句の意味や
GNUMAKEを駆使したコマンドラインビルドの方法を熟知している前提で話を進めます。
初めてSTM32等のARMマイコンやXMEGA等の大規模AVRマイコンに触れ、情報を
求めて迷い込んできたという方は私のぶろぐの事は忘れて回れです。

2015年現在は無料のEclipseベースの開発環境CoIDEGNUARMECLIPSEEm::Blocks
STM32F0シリーズ限定ですがAc6 System Workbench for STM32MDK-ARM
2品種、そしてオンラインコンパイラ+ライブラリ等の強力なサポートがあるmbedなどが充実して
おり、一般的な事柄を学びたい初学者の方にはそちらを強くお勧めいたします。


ちなみにねむいさんはメーカサポートが無い素のEclipseを使うと「ちにゃ!」と
叫びながら全身からを吹き出して死ぬ奇病に罹っていて、且つCygwinを使うと
バストサイズが強制的に20cm減のマイナス補正を喰らい(=フラットなbreasts特性
を持ついないさん
と同レベルに堕ちてしまい)虹裏メイドねむいさんとしての
あいでんてぃてぃを完全に失ってしまうため、当ぶろぐでは絶対に扱いません。


 ※要注意※
   ツール群の盛衰や時勢により時々刻々と本記事の内容は変化していきます!



●必要なもの
 1.ARM用GCCコンパイラ
  とにもかくにもまずはこれです。
  現在はLaunchpad提供の
  GNU Tools for ARM Embedded Processors

  を強くお勧めします。主にCortex-Mx向けとなっておりますがLPC2388等のARM7TDMIも
  隠れてサポートしており古い品種でも問題なくビルドが可能です。

  今回の手順ではダウンロードした上記コンパイラをC:/Devz/ARM/launchpad直下に
  解凍するものとします。解凍後launchpadフォルダにはarm-none-eabi,bin.share,libの
  4つのフォルダがあるのが正解です。

  ほかにWindows環境下で動くARM用GCCコンパイラとして、Bleeding Edge Toolchain
  やdevkitARMなんかもあります。いずれもABIEABIで2015年現在流通している
  最新のコンパイラはすべてEABIとなっています。
  Mentor提供のSourcery CodeBenchはいちいち登録させられるようになりやがりましたのでもはや全く
  お勧めしません。LaunchpadのGCCの方が使い勝手/性能ともに上なのでLaunchpadの物を使用しましょう。
  あと、yagartoはLaunchpadに役目を委ね開発を停止しました。合掌。


 2.サポートツール群
  ねむいさんが公開しているプログラムはコマンドラインビルドを想定しています。
  IDE全盛の昨今は古臭いものとなってしまいましたがmakeコマンドでビルドするという
  ベタベタなクラシックな手法を敢えてとっています。makeの他にunixコマンドのechoや
  rmなどを用いているので、これらのunixライクなコマンドをネイティブなWindows環境下
  で動かすことができるCoreutilsを使用します。

  a.Coreutils本体
   有志の方々が作成されたCoreutilsの"Binaries"のリンク先をダウンロードし、
   2バイト文字やスペースを含まない任意のフォルダに解凍してください。
  b.GNUMake3.81
   次にGNUMakeを同様にダウンロードしたあと解凍しCoreutilsを解凍した
   場所と同じフォルダに置いてください。
  c.サポートDLL群
   最後にmakeをダウンロードしたページの下にある"dependencies zip file
   (中身はlibintl3libiconv2)"をダウンロードしGNUMakeと同様の処置をしてください。

  今回の手順では上記3点がすべてC:/Devz/Coreutils/bin内にあるものとします。
  このbinフォルダ内にmake,echo,rm等のunixライクコマンドとdepedenciesの
  libintl3.dll,libiconv2.dllが存在していることを必ず確認して進めてください。
  ここで間違ってるとpn2からmakeを呼び出す段階でコケて失敗します。
  
  よくやる間違いが、最初のCoreutilsを解凍して出てくるbinフォルダの中に
  さらにmakeやdepedenciesの入ったbinフォルダを置いてしまうことです。

 

C:/Devz
   ├ARM
   |└launchpad
   | └bin (←GCCコンパイラのバイナリがある場所)
   ├Coreutils
   |└bin (←make他unixライクコマンド群のある場所)
   └ocd(←openocd.exeのある場所)
↑ねむいさんは上記のディレクトリ構造にしています。
  以下この構成で話を進めます。


  ※以前はWinAVRのutils配下にあった同様のファイル群の使用を推奨していましたが、
   WinAVRは開発が停止し数年経ち、フリーで利用できるAVRToolchainに主流が移行
   したのでもう一切使用しません。


 2.5.sh.exeが見つかりません対策(必ずしも必要ではない)
  ネット上で手に入るARMマイコンのGCCプロジェクトの中ではWinAVRのmakefileを
  ベースにしたものがいくつか存在し、そこにはshell関数などのbashに依存した記述が
  数か所あります。この記述が含まれているとまともにビルドができません

  当ぶろぐで公開してるプロジェクトはmakefileからbash(/bin/sh)に依存して
  いる記述はすべて排しておりますが、他の方のプロジェクトをビルドする際の
  回避措置として紹介します。
  こちらからwin-bash.zipをダウンロードし、解凍して出てきたwin-bash.exeを
  Coreutilsのbinフォルダに突っ込んでください。次にmakefile ファイル中に
  記載されているはずのSHELLの設定を以下のように書き換えてください。
  SHELL = sh
  ↓
  SHELL = win-bash.exe
  bash.exeは自身のファイル名によって特殊な動きをするので横着してwin-bash.exeの
  方をsh.exeとリネームしてしまうと逆にビルドが通らなくなります。ご注意ください。



 3.エディタ
  メモ帳でせこせこ編集してコマンドプロンプトからmake実行してもいいですけど
  makeを引数つきで呼び出すことが出来るエディタを使えば幸せになれます!
  ねむいさんのお勧めはProgrammers Notepad2(PN2)です。素のEclipseは(ry
  ビルド時の解説はこのPN2を使用して解説します。

  注:必ずStable2.3以降を使用してください。
    また、日本語入力に対応するために下記の要領で多バイト文字の設定を
    ”Shift-JIS”に変更しておいてください。
   

  

 4.デバッガソフトウエア&ハードウエア
  ARM用のデバッガはホビーユーザーご用達のGDBサーバであるOpenOCDを使用します。
  また、MCUとJTAGで通信するハードウエアはFTDIのFT2232系JTAG-I/Fを使用するのが
  スタンダードになっています。これらに関しては次回詳しく紹介します


●下準備とビルド
 ※以後はエディタとしてPN2をインストールして使うことを想定して解説します。

 1.ソースコードの展開
  今回の凡例として、STM32F4向けの液晶表示プログラムをダウンロードしてローカルに
  落としたzipファイルをローカルフォルダに展開します。
  このときディレクトリパス(アドレス)にスペースや2バイト文字が絶対に入らないよ
  うにしてください。
  

 2.makeファイルの編集
  PN2がインストールされている場合、拡張子pnprojのアイコンをダブルクリックす
  ると下のような画面になると思います。"makefile"をクリックして編集画面を
  出しましょう。
  

  下画像の要領でそれぞれの環境に合わせてARM用GCCコンパイラ、サポートツール群、
  デバッガのディレクトリパスを設定していきます。パスの区切りは"¥"ではなく"/"を
  使用してください。
  ディレクトリパスはスペースや2バイト文字が絶対に入らないようにしてください。
  大事なことなので二度言います!!

  
  

  ぇ?makefileの読み方書き方が分からないから教えろですって!?
  出直してきなさい!


 3.PN2の設定
  PN2をインストールしたての人は、makeコマンドをPN2の"TOOL"から呼び出すことが
  出来るように以下の要領でmakeコマンドを引数"all"つきで登録してください。
  その後、"build","clean"の引数についても同様に登録してください。
  
  
  

  重要:Windows環境変数のPATHはもはや設定する必要はありません!
     逆に下手に設定しているとビルドが通らなくなるので注意してください。
     特にWinAVRを併用してる場合でWinAVRのインストール時に環境変数
     「PATH」を変更する設定にするとビルドが高確率で失敗します!
     もうWinAVRはやめてAVRToolchainにしなさい!!!


 4.ビルド開始
  
  ビルドの前に…デフォルトでは評価ボードの設定はSTM32F4Discovery向け
  になっています。これをSTM32F4系に汎用な形でビルド/デバッグしたい場合は
  上記画像のようにEVAL_BOARD = REDBULLにしてください。
  また、各評価ボード設定時の各ピン配置を知りたい場合は同梱のdoc/Boards.txtを
  参照してください。

  設定が終わったら"Tool"から"make all"を呼び出しビルド開始です。
  

  上記の液晶表示プログラムはデフォで下記のライブラリ/ドライバを有効にしてます。
    -libjpeg
    -libpng
    -giflib
    -FONTX2ドライバ
    -抵抗膜式タッチパネルドライバ(特定のボード限定)
    -HelixMP3デコーダ(特定のボード限定)
    -HelixHE-AACデコーダ(特定のボード限定)
  数分ほど時間がかかります。エラーが出てビルドが止まった場合は各種設定を
  見直しましょう。大抵パスの設定を誤っています。

  ちなみに"make all"はコンパイルしたオブジェクトを全部消してまっさらにしてから
  ビルド、"make build"はすでにオブジェクト吐かれたソースはスルーしてビルド(ソー
  スコードを一部書き換えてカット&トライしたいときに最適)です。
  "make clean"はその名のとおり生成されたelfやhexファイル含めてアセンブラリスト
  ファイルやオブジェクトをまるっと消去してしまいます。


お次はターゲットCPUへの書き込み&デバッグですが…長いので次回に続きます。

Comments

いつもこちらを参考に勉強させていただいております。

ねむいさんお薦めのPN2ですが、Stable 2.2 だと Add Tool で追加したものがメニューに現れないバグがあるようです。
キーボードショートカットを登録するとそれで起動はできました。
2.3RC では問題なくメニューに追加されます。

masato様、ねむいです。こんばんは。

ご連絡いただいた件、WindowsXP上で現象確認しました(64bit版Windows7では
不具合出ず)。記事に注意事項として加えておきますね。

いつもブログを拝見させて頂いています。
ねむいさんの記事に触発されて、MacOSXでOpenOCDを動作するようにできました。

感謝申し上げます。

竹本様

ねむいです。はじめまして。
うまく行かれたようでなによりです。

私がVersaloonを扱い始めた当初は、改造の母体となる
STM8S-Discoveryが安価で入手できてFT2232系のモジュ
ールを使った場合と比べて安くデバッグ環境が構
築できるとにらみ、ある程度の知識をつけた学生さん
向けに記事を書いたつもりだったのですが・・・

逆に東海自然歩道関連の記事並みに不評を買ってしまい
ました・・・理由は言わずもがな(泣)

ねむいさま、コメントを頂きましてありがとうございます。
OpenOCDに続き、STM8SのVersaloon化もうまく行きました。

ねむいさんの様なハンダ技術がないので、ST32L-DiscoveryのST-LINKとST-Link UtilityでSTM8SのRead DisabledのFlushに書き込みVersaloon化に成功しました。
ねむいさんのコンフィグファイルを使ってOpenOCDのmt_flushでLPC1343への書き込みも上手くいきました。

以上、ご報告まで

ねむいです。こんばんは。

STM32F4シリーズもF2扱いでVersaloonのvsprog6OpenOCD
から書き込めることを確認しました。

またこの記事を書いてからOpenOCD用のcfgファイルの
指定方法を若干変更しましたので近いうちに修正する
つもりです。

どうもはじまして
STM32F4 Discoveryボードを最近触り始めました。
コンパイラも、GCC,Arm純正など複数あるのですね。
詳しい解説でとても参考になりました。
ちょくちょく見に来るかもしれませんが、よろしくお願いします。

あるHPを参考にして、CoIDEとSourceryのGCCを導入してます。同じGCCでもLaunchpadとは別物なのか気になって調べておりました。
ttp://www.coocox.org/CoIDE/Compiler_Settings.html

  • newbee
  • 2014/04/10 1:21 PM

newbee様はじめまして、ねむいです。


2014年現在ではほぼすべての面でLaunchpadが性能的に勝り、
SourceryCodebenchのフリー版をわざわざ導入する理由がありません。
詳細は私のエントリをご参照ください。
nemuisan.blog.bai.ne.jp/?eid=207616

一昔前はMentorに買収される前のCodeSourcery以外に選択肢は
なかったのですが時代は変わるものですね〜

newbeeです。
コメント有難うございます。
また、ブログを参考にさせていただきます。
どちらもGCCなので、ほぼ同じものかと思ったのですが、かなり違いがありますね。
GCCならLanchpadで間違いないですか。

MDK,DS5についてる純正っぽいのも気になります。
高くて縁がなさそうですが。



  • newbee
  • 2014/04/15 12:19 AM

Post a Comment








Go to top of page