Linux(Ubuntu) Eclipse STM32 開発環境

Linux(Ubuntu) Eclipse STM32 開発環境

久しぶりに、STM32の開発環境について書きます。

開発環境は、おなじみの?
Eclipse + SW4STM32 ですが、
開発プラットフォームは、Ubuntu 18.0.4 LTS 64bit です。



前回記事「EclipseによるSTM32統合開発環境構築」で紹介した、WindowsのEclipse+SW4STM32と(ほぼ)同様の環境をLinux(Ubuntu 18.0.4 LTS)上に構築する方法について解説します。

ほぼ、と書いたのは後ほど。。。

基本的なソフトウェア構成についてもWindowsとほぼ同じですが、Windowsでは使用するEclipseとしてPleiadesを使っているところをUbuntuでは snap で Eclipseパッケージを直接インストールしたり、ST-LinkがWindowsでは本家STMicroのモノであるのに対してオープンソースを使ったりと、いくつか異なるソフトウェアもあります。

その関係で?
Eclipseは英語のままで日本語化していません。
ソース上のコメント表記とかは日本語入力できるし、特に日本語にするメリットも感じられないのでこの記事では英語のママです。
ご容赦を。

また、Windows上での操作と同様の箇所についての詳細は、Windowsでの解説を確認ください。(手抜き!)




使ったOS:
 Ubuntu18.0.4 LTS 64bit


インストールするソフトウェアの一覧:
 STM32 CubeMX
 Eclipse
 STM32 CubeMX Eclipseプラグイン
 SW4STM32 Eclipseプラグイン
 CDT Eclipseプラグイン
 stlink-tools
 その他、説明文中で apt install
  (すでにapt install場合は不要)


まずは、念の為
$ sudo apt update
とかやっておいいてください。

CubeMXもEclipseもJavaで動作するので、まずはJavaの実行環境をインストールします。
$ sudo apt install default-jre


STM32 CubeMXのインストール


基本的に、Windows上で行うのと同じ手順で進めます。

STM32 CubeMX をSTMicroからダウンロードしてください。
 → STM32 CubeMXダウンロード

最新(2020/04/29時点)は、5.6.1のようです。
ダウンロードした en.stm32cubemx_v5-6-1.zip を展開します。

$ unzip Downloads/en.stm32cubemx_v5-6-1.zip

展開したファイルの中にあるインストーラーを起動します。
※インストールを実行したディレクトリに存在します。

$ java -jar SetupSTM32CubeMX-5.6.1.exe

インストール画面が表示されます。


インストールはWindowsと同様です。
 → 過去記事「EclipseによるSTM32統合開発環境構築~その2

CubeMX は単体でも使えるます。起動方法は下記の通り。

$ cd STM32CubeMX
$ ./STM32CubeMX




これから先で必要となるモノ達をインストールしておきましょう。
もし、すでにインストールされているなら必要ありません。

$ sudo apt install make
$ sudo apt install cmake
$ sudo apt install git
$ sudo apt install libusb-1.0.0-dev



Eclipseのインストール


snapコマンドでEclipseをパッケージでインストールします。

$ sudo snap install --classic eclipse

インストールが終わったら、アクティビティから"eclipse"で検索、起動することができます。
(スミマセン、18.0.4以外は試していないので。。。)



現時点(2020/04/29)では2019-12が最新のようです。


EclipseのセットアップはWindowsと同様です。


STM32CubeMXのプラグインをダウンロードしてインストール。
インストール方法もWindowsと同様です。
メニューの「Help」→「Install New Software」でダイアログを開きます。

 → 過去記事「EclipseによるSTM32統合開発環境構築~その4


ツールチェーンのインストール
やはりメニューの「Help」→「Install New Software」でダイアログを開きます。
これもWindowsと同様です。
コチラは、オンラインで取得しますがサイトURLもWindowsのときと同じです。

http://ac6-tools.com/Eclipse-updates/org.openstm32.system-workbench.update-site-v2

 → 過去記事「EclipseによるSTM32統合開発環境構築~その5

最近のツールチェーンではSTM32-Copro-MPUが増えています。


 → STM32-Copro-MPUリリースノート


Ubuntuでのインストール先
ホームディレクトリの下に.eclipse/が作成され、この中にダウンロードしたプラグイン達が入っています。

/home/USER/.eclipse/360744286_linux_gtk_x86_64/plugins/

その下に下記のようなディレクトリで格納されています。(2020/04/29現在)

OpenOCD関連
fr.ac6.mcu.externaltools.openocd.linux64_1.23.0.201904120827/tools/openocd/bin

ツールチェーン
fr.ac6.mcu.externaltools.arm-none.linux64_1.17.0.201812190825/tools/compiler/bin

ボード設定など
fr.ac6.mcu.debug_2.5.0.201904120827/resources/openocd


CDTインストール(必要ならば)
Help の Install New Softwareを選択。
Work with:のプルダウンで「2019-12 - http://download.eclipse.org/releases/2019-12」を選択する。
Programming Languages を展開して「C/C++ Development Tools」にチェックを入れてNextでインストールする。

コレでコンパイル~ビルドまでの環境は整った、
ハズ。。。

だが、EclipseからSTM32CubeMXをパースペクティブで使うとよく落ちるのでオススメしない。

なんだかよく落ちる

単独でSTM32CubeMXを動作させてEclipseにエクスポートの方が精神的によい。

この場合、Eclipseを起動しておいてからSTM32CubeMXを起動してやるとプロジェクトの引き渡しが行えるようだ。

まずは、Lチカとか CubeMX でテキトーなプロジェクトを作って、Eclpseでソースを展開できることを確認する。

CubeMXでのプロジェクトの設定など、Windowsと同様なのでソチラを確認くださいませ。
 → 過去記事「EclipseによるSTM32統合開発環境構築~その7

「Build Project」でビルドが通ればOKだ。


ST-Linkとデバッグ設定


ビルドが通ったので、ボードへの書き込みやデバッグを行う環境について整備する。

フラッシュへの書き込みやデバッグはUSBを経由したST-Linkを使って行います。
Linuxの場合、オープンソースのstlink-toolsを使います。

まずは、stlinkをダウンロード、それからビルド~インストールというLinuxらしい環境設定になります。

ダウンロード
gitを使ってgithubからソースをダウンロードします。

$ git clone https://github.com/stlink-org/stlink

ビルド
stlinkというディレクトリができるので、その中でmakeします。

$ cd stlink/
$ make

インストール
makeしたディレクトリからリリースディレクトリに入ってインストールを実行します。

$ cd build/Release/
$ sudo make install

udev設定
USBにSTM32基板が接続されたとき、ST-Linkデバイスを作成するためのルールをudevに設定します。
ルールは~/stlink/etc/udev/rules.d/以下に存在するのでそのファイルをコピーしてudevのリロードを行います。

$ cd etc/udev/rules.d/
$ sudo cp 49-stlink* /etc/udev/rules.d/
$ sudo udevadm control --reload-rules

ココでSTM32の基板をUSBにつないでみて。。。

$ ls /dev/stlinkv*
 で、stlink2_1とか見えればOK


Eclipse側設定の解決
下層レイヤでの設定が完了したので、EclipseのOpenOCDやデバッガ環境を設定します。

ちなみに外部設定やデバッグ構成は、Windowsと同様なのでソチラを確認くださいませ。
 → 過去記事「EclipseによるSTM32統合開発環境構築~その7

ところで、WindowsとLinuxで「\」と「/」でハマる方がたま~におられるのですが、
ご注意ください。


ストリング置き換え
設定はWindowsのときと同様にパス変数を設定します。
メニューの「Window」→「Preferences」→「Run/Debug」→「String Substitution」で設定します。



プラグイン達がインストールされている所を確認して下記のように設定します。

openstm32_openocd_path
/home/USER/.eclipse/360744286_linux_gtk_x86_64/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.23.0.201904120827/tools/openocd/bin

openstm32_compiler_path
/home/USER/.eclipse/360744286_linux_gtk_x86_64/plugins/fr.ac6.mcu.externaltools.arm-none.linux64_1.17.0.201812190825/tools/compiler/bin

openstm32_resources_path
/home/USER/.eclipse/360744286_linux_gtk_x86_64/plugins/fr.ac6.mcu.debug_2.5.0.201904120827/resources/openocd

※パス設定はフルパス推奨


OpenOCDライブラリのリンクを作る
プラグインとしてインストールされた中にライブラリがあり、当然ソコにパスは通っていないのでブツにアクセスできるようにしてやる必要があります。
必要なのはlibhidapi-hidraw.so.0だけなのでシンボリックリンクを1個作ってやればなんとかなる。
(だんだん力技になってきた?)

$ sudo ln -s /home/USER/.eclipse/360744286_linux_gtk_x86_64/plugins/fr.ac6.mcu.externaltools.openocd.linux64_1.23.0.201904120827/tools/openocd/lib/libhidapi-hidraw.so.0 /usr/lib


ココまでで、OpenOCDでの接続ができるようになったので接続確認をしてみましょう。

外部ツールに設定した"OpenOCD"を実行して接続できることを確認してください。

 ST-Link LEDが緑←→赤点滅となれば、OK!


しかし、この状態でデバッガを起動すると。。。
起動に失敗します。
(もし、この時点で起動に問題ない場合は、以下は飛ばしてください。)


また、端末から直接デバッガを起動しても。。。

$ ./arm-none-eabi-gdb --version
bash: ./arm-none-eabi-gdb: そのようなファイルやディレクトリはありません

と、なります

原因は、arm-none-eabi-gdbとarm-none-eabi-gdb-pyが32ビットアプリケーションであるためです!!
(なんでコイツラ32ビットなんだー!)

なので、32ビットアプリが動作可能な環境をインストールする必要があります

$ sudo apt-get install lib32z1

またncursesを必要とするので32ビットのncursesをインストールしてください

$ sudo apt-get install libncurses5:i386


これで、ようやくデバッガも使えるようになりました。
デバッグのボタンを押すとデバッグのパースペクティブに切り替わり、main()で実行が停止します。


デバッグ動作の様子

ステップ実行やブレークポイントの設定など、
使い勝手的には、Windows版と変わりありません。

STM32 CubeMX と Eclipse 間のやり取りがイマイチなところもありますが、CubeMXはプロジェクト設定だけで頻繁に使うものではないと思われるので、Linux(Ubuntu)上でもSTM32マイコンの開発ができるようになります。

ちなみに、私はWindows上のVM上にインストールした Ubuntu 18.0.4 LTS で動作を確認しています。
VMなので、VM上に構築した開発環境ごとメディアにコピーして移動することも出来ます。
やはり、Linux上に開発環境を構築できると開発環境そのもののフットワークがよくなります。
動作自体もWindowsより軽く感じられますし。

これで、Windowsの様に高価?で数年しか使えないOSを開発環境にすることもなくなりますネ。





Have a Happy Hucking!!

Lightning Brains

コメント

このブログの人気の投稿

Linuxシステムコール、共有メモリの使い方

Linuxシステムコール、メッセージキューの使い方

Linuxシステムコール、セマフォの使い方