2012年08月10日

STM32F4-discoveryデバッグ環境にOpenOCDをセットアップ

前回の記事(STM32F4 DiscoveryをUbuntuから試食してみました)で、書き換え&デバッグ用にstlinkというOSS(Open Source Software)のモジュールを使用していました。

確かに、LEDチカチカとかprintfでわーいとか、そんな程度のテスト時のバイナリ(数十キロバイト)はうまーく書き換えも、gdbでのデバッグも問題なさそうだったのですが、ではーと準備した400キロバイトのバイナリファイルをgdbから読み込ませようとしたら、大量のlibusbのエラーが発生・・・

stlinkはOSSですからソース見たら対応出来るのかもしれません、が、やはりOpenOCD試したほうが良いかなと思い返し、OpenOCDをセットアップしました。結果的には、420kバイト程度のROM書き換えが発生するデータでデバッグ含めてうまく動いています。なのでOpenOCDに乗り換えます。

実は、ちょっとOpenOCDに乗り換えて時間が立ってしまいましたので、本記事に詳細な記述ができてませんが、以下の手順に沿って実施いただければセットアップ可能のはずです。

なお、今回も、環境はUbuntu 10.04LTS(64bit)です。私は、MacOSXのVMware Fusionで動かしています。

●準備物
・OpenOCD 0.6.0のソース一式(http://www.freddiechopin.info/en/download/category/10-openocd-dev)(注:20121031リンク間違ってました)
こちらからダウンロードしました。
http://sourceforge.net/projects/openocd/files/openocd/

・ねむい様公開のWindows用OpenOCD一式
http://nemuisan.blog.bai.ne.jp/?cid=7947
のOpenOCDのところで公開されてるファイル(ocd.tar.gz)

1. OpenOCDを展開・コンパイル
展開した直下にあるINSTALLに従い、configure&make&make installしましょう。
私は/usr/local/bin/以下に配置しました。パス通しました。

2. ねむい様のocd.tar.gzを展開
Windows用のバイナリ一式部分はUbuntuでは使用しません。使用させていただくのは、スクリプト一式になります。
私は~/ocd以下に展開しました。

では、gccが吐いたelfをターゲットに書いてみましょう。STM32F4-Discoveryを接続し、以下のコマンドを実行します。
$ openocd -s (2.で展開したディレクトリ/tclへのパス) -f target/stm32f4x_stlink_flash.cfg -c "mt_flash 書き換えるバイナリ.elf"


私個人の環境の場合ですと、例えばこんな感じで。
$ openocd -s /home/yishii/ocd/tcl -f target/stm32f4x_stlink_flash.cfg -c "mt_flash /home/yishii/STM32F4/main.elf"


デバッグしたいなら、
$ openocd -s (2.で展開したディレクトリ/tclへのパス) -f target/stm32f4x_stlink_flash.cfg

ポート番号はデフォルトは3333です。

あとは普通にarm-none-eabi-gdbから接続して下さい。これは
http://projectc3.seesaa.net/article/283806921.html
に記載したst-linkでのデバッグ時のgdbの操作と変化なしでーす。

STM32マイコン徹底入門 (TECH I Processor)
川内 康雄
CQ出版
売り上げランキング: 86815




Netduino(Arduinoピンコンパチ.NETマイコンボード)
Secret Labs LLC
売り上げランキング: 47073

ラベル:STM32F4 OpenOCD GDB
posted by いしいっち at 12:11| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

STM32F4-discoveryデバッグ環境にOpenOCDをセットアップ

記事URL移動いたしました。こちらご参照下さい。

http://projectc3.seesaa.net/article/285823341.html
ラベル:STM32F4 OpenOCD GDB
posted by いしいっち at 12:08| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2012年07月29日

STM32F4 DiscoveryをUbuntuから試食してみました

本記事のst-linkインストール部分はOpenOCDに変更したほうがよいかもしれないです。OpenOCDの記事はここにまとめましたー。

秋月で販売しているSTマイクロのSTM32F4 Discoveryというマイコンボード、非常に人気で一時期買うことすらままならなかったのですが、現在は買うことが出来ています。僕も欲しいなと思っていた一人ですが、買えなくて諦めていて、買えるようになったけど放っていて、しかしたまたまちょっとこのボードでやってみたいなーとかってことを妄想しだしたので、買うことにしました。

STM32F4Discovery.jpg

まず、このボードのスペックですが、メインプロセッサはARM Cortex-M4Fコア(最高168MHz)、内蔵Flash 1MB、内蔵RAM 192KB、周辺回路もいろいろ入っています。FPU(FPv4-SP)も搭載しています。コンパイラのオプションさえ整えれば使用できるでしょう。
また、ボード上に、ST-LINK/V2に対応したデバッガ、MEMS3軸加速度センサ、MEMSデジタルマイク、DACとDクラスアンプなどを搭載しています。
メインプロセッサはUSB On-the-goに対応してまして、既に東京のADK勉強会グループの赤川氏により、ADKのスタックも本ボード向けに公開されています。
こんな豪華なボードが、なんと1650円(秋月電子)なんです。なにこれ、やっす〜!普通考えられません。

開発環境ですが、どうやら当初はAtollic TrueSTUDIO for STM32F4という環境が無償提供されていたらしいです。しかしこれがなくなり、無料で使用出来るAtollic TrueSTUDIO Lite版はバイナリ出力サイズ制限32キロバイトというわけで、1メガバイトのフラッシュマイコンを使うには適さないので。いろいろググってゆくと、開発環境+デバッグ環境の構築に関して「ねむいさんのぶろぐ」にたどり着きました。

ねむいさんのぶろぐ : http://nemuisan.blog.bai.ne.jp/
こちらでは、Windows環境下で開発環境を構築され、OpenOCDというオープンソースのデバッガを接続して開発をされています。この記事を参考にしました。

ただ、僕の開発環境はMacBook Airです。VMwareにはWindows7もインストールされてはいますがCygwinなどは入れていないのでmakeはありません。VMware上にUbuntu 10.04LTS(x64)をインストールしていたので、せっかくですからこちらを利用したいと思っています。

というわけで、
・Ubuntu 10.04LTS(x64)でビルドして、書き換え、デバッグできる環境を作る(IDEは特に用意しない)
が目標です。
★この記事の目的は「備忘録」です。ひとまずLEDチカチカしたので、やったことをまとめました。もしかすると、いろいろ使い込むと、これから「あれ?」ということがあるかもしれません。そんなことがあれば、適宜解決して記事に書いていきたいと思います。

1. ツールチェインのインストール
ツールチェインは、Sourcery CodeBench Lite Editionを使用します。というわけで、以下にアクセスします。

http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

「ARM Processors」の「Download the EABI Release」をクリック、メールを介して「Sourcery CodeBench Lite 2012.03-56」の「IA32 GNU/Linux TAR」(バイナリリリース版)をダウンロード、Ubuntuのどこかのフォルダに展開してください。ここから以降、展開したパスのbin以下にパスが通っているものとして説明します。(というわけで、パスを通しておいて下さい)

2. ツリーのダウンロードと展開
ねむいさんのぶろぐ(http://nemuisan.blog.bai.ne.jp/?cid=7947)にて、サンプルコードツリーをダウンロードできるようにされています。
「TFT/OLED Control Sample with ChaN's FatFs(SDIO&MMC Driver)」というコードをダウンロードさせていただき、このねむいさまのツリーをベースに以下のような改変をさせていただくことにしました。

このツリーは、Windowsのmake環境でしたが、それをLinuxからビルドできるように改変し、サンプルコードの豊富な機能を実現する各種モジュールのAPI結合を切断してLチカ(LEDチカチカ)を実装^^;するといった各種改変をごちゃごちゃっと入れました。ひとまず、汚い改変になっていますがすみません。結合を外しても元のソースコードは一切消してないので繋げればまた動作するかと。

Ubuntu x64でひとまずビルドできてなんか動いたツリーを固めたもの STM32F4_Sample_forLinuxBuildEnv.tgz

コンパイル方法は、

$ tar xvzf STM32F4_Sample_forLinuxBuildEnv.tgz
$ cd 展開したディレクトリの直下
$ make

こんだけです。1のツールチェインにパスが通っているようにしておいてください。
main.elfなどいろいろ生成されるでしょう。

3. stlinkのダウンロードとビルド
当初はST-LINK/V2に対応したOpenOCDを、、と思っていましたが、texane氏のstlinkをお試しさせていただいたらうまく動作したのでこれを使用させていただこうかと思っています。
(OpenOCDもその内立ちあげたいと思っていますが、これでうまくいっているので後回しに・・・)

stlinkはソースなのでビルドします。
以下のgithubからモジュールをダウンロード
https://github.com/texane/stlink


$ ./autogen.sh
$ ./configure
$ make

あとstlinkのドキュメントに従い、マスストレージ認識しないようにREADMEに従い、
$ cp stlink_v1.modprobe.conf /etc/modprobe.d
$ modprobe -r usb-storage && modprobe usb-storage
もやっておきました。

こんだけです。
ひとまず、STM32F4-Discoveryを接続し、初期状態のROMが動作している時に、ビルドで生成されるst-utilを実行すると、強制ブレーク状態になるかと思います。

4. gdbから2で生成したバイナリを焼きこむ
既に2のツリーはコンパイル済みでmain.elfができているものとします。
まず、3で生成されたst-utilを起動します。

$ st-link &

んで以下のようにします。

$ arm-none-eabi-gdb
(略)
gdb> tar remote :4242
(略)
gdb> load (path-to-main.elf)/main.elf
(略)

これでOKです。ボード電源を入れなおすとLチカしてましたらうまくいっているかと思います。

5. ソースコードデバッグする
ひとまずフロントエンドとしてemacsがあると素のgdbより全然使いやすいので(普段emacs使ってないと面倒なこともあるかも、しれないですけど…)それを使うことにします。
入ってなければ、「$ sudo apt-get install emacs」で入ります。
emacsを起動して、

M-x gdb

とし、

Run gdb (like this): arm-none-eabi-gdb --annotate=3 (path-to-main.elf)/main.elf

とします。
で、

gdb> tar remote :4242
(略)
とし、ひとまずmain関数にブレークを貼ってみます。
gdb> break main (main関数のあたまにブレーク)
gdb> c (コンテニュー実行)


これでmain関数の頭まで実行してブレークがかかります。
ソースコードも出ていますので、ステップすると、Lチカもステップで変化してました。
emacs-gdb-debugging.png


あと、標準入出力はUSART2と接続されてますので、ポートのPA2がTxD、PA3がRxDです。


STM32マイコン徹底入門 (TECH I Processor)
川内 康雄
CQ出版
売り上げランキング: 81809




最新ARM/Cortexマイコン徹底研究 (ARMマイコン No. 1)
トランジスタ技術編集部
CQ出版
売り上げランキング: 105220






実践 デバッグ技法 ―GDB、DDD、Eclipseによるデバッギング
Norman Matloff Peter Salzman
オライリージャパン
売り上げランキング: 148083
ラベル:STM32F4
posted by いしいっち at 22:36| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする