Windows10対応軽量シンプルなARMマイコンのGCCビルド環境を構築する(2020年度版)

OpenOCD for Windows is HERE!
↑ねむいさんは自前ビルドのOpenOCDバイナリ公開してます。
 解説はこのバイナリを基にすすめますので4649!


当記事はWindows環境下におけるARMマイコンの開発環境構築を目指してはおりますが
私が公開しているプロジェクトをビルド/デバッグするために必要な最小限の手順の
指南という位置づけです。
はっきり言いますが初学者向きの解説ではありません。専門的な語句の意味や
GNUMakeを駆使したコマンドラインビルドの方法を熟知している前提で話を進めます。


2019年現在は無料のEclipseベースの開発環境GNUARMECLIPSE
STM32限定でフル機能が使えるAtollic TrueStudioMDK-ARMの2品種、
そしてオンラインコンパイラ+ライブラリ等の強力なサポートがあるmbedとかが
充実しており、一般的な事柄を学びたい初学者の方にはそちらを強くお勧めいたします。


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


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



●必要なもの
 1.ARM用GCCコンパイラ
  とにもかくにもまずはこれです。
  現在はLaunchpad.netが提供し、ARM本家から配布されている
  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
  なんかもあります。いずれもABIEABIで2015年以降流通している
  最新のGCCコンパイラはもはやすべてEABIとなっています。


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


  ちなみにAVRToolChainでもARMと同じような感じのディレクトリ構成にすると、
  同じ感じでコマンドラインビルドが出来ますのでおすすめです。

  ※以前は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を引数つきで呼び出せられるエディタを使えばIDEのように使えます!
  ねむいさんのお勧めはProgrammers Notepad2(PN2)です。素のEclipseは(ry
  ビルド時の解説はこのPN2を使用して解説します。

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

  それとPN2のインストール先は無用なトラブルを避けるためスペースや2バイト
  文字が混ざるディレクトリは避けてください。


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


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

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

 2.makeファイルの編集
  PN2がインストールされている場合、拡張子pnprojのアイコンをダブルクリック
  すると下のような画面になると思います。"makefile"をクリックしてmakefileの
  編集画面を出しましょう。
  
  OpenOCDとarm-none-eabiのファイル名は特殊なことをやらない限りは
  もう変えないようにしてください。
  

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

  
  

  makefileの書き方の作法は此処では解説しないので
  各自詳細は調べて下さい。


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

  重要:Windows環境変数のPATHは設定する必要はありません!
     下手に設定しているとビルドが通らなくなることがあるのでご注意ください。


 4.ビルド開始
  
  デフォルトでは評価ボードの設定はSTM32F4Discovery向けになっています。
  また、各評価ボード設定時の各ピン配置を知りたい場合は同梱のdoc/Boards.txtを
  参照してください。

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

  ビルドが完了したらメモリ使用量などの情報がコンソール上に現れます。
  もしコンパイルエラーなどが発生しビルドが止まったら赤色で強調表示されるので
  エラー箇所の特定も簡単です。
  


  上記の液晶表示プログラムはデフォで下記のライブラリ/ドライバを
  有効にしてます。
    -libjpeg
    -libpng
    -giflib
    -FONTX2ドライバ
    -抵抗膜式/容量性タッチパネルドライバ(特定のボード限定)
    -HelixMP3デコーダ(特定のボード限定)
    -HelixHE-AACデコーダ(特定のボード限定)
  数分ほど時間がかかります。Warningが出ますがビルド時の設定喚起の
  ためにソースコード中に"#warning"プリプロセッサを敢えて入れてる箇所が
  いくつかありますので気にしないでください。
  エラーが出てビルドが止まった場合は各種設定を見直しましょう。殆どの場合、
  makefile中でPATHの設定を誤っています。

  ちなみに"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