Contents
1. 必要なツールチェーンを入手する
| ツール | 推奨バージョン(2026 年 4 月時点) | 入手方法 |
|---|---|---|
| arm‑none‑eabi‑gcc | 13.2 系(arm-none-eabi-gcc --version が 13.2.x を示す) |
OS 毎の公式パッケージマネージャ |
| LLVM/Clang | 17 系(clang --version が 17.x を示す) |
同上 |
| OpenOCD / pyOCD / J‑Link | 最新安定版 | 各公式サイト |
※バージョンは執筆時点の「最新」情報です。実際に取得したパッケージが異なる場合は、
--versionで確認し、ドキュメントやビルドスクリプトに合わせて適宜書き換えてください。
1‑1. Windows(MSYS2)
|
1 2 3 4 5 6 |
# MSYS2 のインストールは公式サイト https://www.msys2.org/ から実行してください。 pacman -Syuu # データベースとパッケージを最新化 pacman -S mingw-w64-ucrt-x86_64-arm-none-eabi-gcc \ mingw-w64-ucrt-x86_64-arm-none-eabi-binutils \ mingw-w64-ucrt-x86_64-clang |
インストール先は C:\msys64\ucrt64\bin です。
1‑2. Linux(ディストリビューション別)
| ディストロ | コマンド例 |
|---|---|
| Ubuntu / Debian | sudo apt update && sudo apt install gcc-arm-none-eabi clang |
| Fedora / CentOS | sudo dnf install arm-none-eabi-gcc clang |
| Arch Linux | sudo pacman -S arm-none-eabi-gcc clang |
外部リンクについて
従来は「app‑tatsujin.com」などサードパーティサイトへの参照を行っていましたが、ブランド方針に沿う形で公式ドキュメント(ARM 社、LLVM プロジェクト、各 OS のパッケージマネージャ)へリンク先を統一しました。
1‑3. macOS(Homebrew)
|
1 2 3 4 5 6 |
# Homebrew が未インストールの場合は以下を実行してください /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew update brew install arm-none-eabi-gcc clang |
- Intel (x86_64) macOS の場合、Homebrew はデフォルトで
/usr/local/optにインストールします。 - Apple Silicon (ARM) macOS では Homebrew が
/opt/homebrewを使用します。
インストール先の実際のバイナリパスは次のコマンドで取得できます。
|
1 2 |
brew --prefix arm-none-eabi-gcc # → /usr/local/opt/arm-none-eabi-gcc (Intel) あるいは /opt/homebrew/opt/arm-none-eabi-gcc (Apple Silicon) |
2. PATH 環境変数にツールチェーンを追加する
2‑1. Windows(システム環境変数)
- スタートメニュー → 「環境変数」検索 → 「環境変数の編集」を開く
- 「システム環境変数」欄の
Pathを選択し「編集」→「新規」で以下を追加
|
1 2 |
C:\msys64\ucrt64\bin |
- PowerShell で確認
|
1 2 3 4 |
$env:PATH -split ';' | Where-Object { $_ -match 'ucrt64\\bin' } arm-none-eabi-gcc --version clang --version |
2‑2. Linux / macOS(シェルプロファイル)
(a) インストール先が分からない場合の取得例
|
1 2 3 4 |
# Homebrew の場合(macOS) GCC_DIR=$(brew --prefix arm-none-eabi-gcc)/bin # MSYS2 以外で apt / dnf がインストールした場合は /usr/bin がデフォルトです |
(b) ~/.bashrc(Bash)または ~/.zshrc(Zsh)に追記
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# ------------------------------------------------- # ARM ツールチェーンの PATH 追加(2026 年版) # ------------------------------------------------- if [ -d "$HOME/.local/bin" ]; then export PATH="$HOME/.local/bin:$PATH" fi # Linux のパッケージマネージャでインストールした場合は /usr/bin が既に通っています # macOS Homebrew の実際のインストール先を自動取得 if command -v brew >/dev/null 2>&1; then export PATH="$(brew --prefix arm-none-eabi-gcc)/bin:$PATH" fi export PATH="/opt/homebrew/opt/arm-none-eabi-gcc/bin:$PATH" # Apple Silicon 用バックアップ |
設定を反映させるには端末を再起動するか、次のコマンドを実行します。
|
1 2 3 4 |
source ~/.bashrc # Bash の場合 # あるいは source ~/.zshrc # Zsh の場合 |
(c) 動作確認
|
1 2 3 4 |
which arm-none-eabi-gcc arm-none-eabi-gcc --version # → 13.2.x が表示されれば OK clang --version # → 17.x が表示されれば OK |
3. VS Code と拡張機能で統一開発環境を作る
| 拡張機能 | 主な役割 |
|---|---|
| C/C++ (ms-vscode.cpptools) | IntelliSense、コード補完、ビルド設定 |
| Cortex‑Debug (marus25.cortex-debug) | ARM デバッガ(OpenOCD・J‑Link・pyOCD)と統合 |
| Remote‑SSH (ms-vscode-remote.remote-ssh) | リモート Linux / Raspberry Pi へのシームレス接続 |
VS Code のバージョンは「1.90 以降」と表記していますが、実際には最新の安定版(2026 年 4 月現在は 1.91 系)をご使用ください。
3‑1. 基本設定例
c_cpp_properties.json
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "configurations": [ { "name": "ARM", "compilerPath": "/usr/bin/arm-none-eabi-gcc", // Linux の場合 // macOS の場合は $(brew --prefix arm-none-eabi-gcc)/bin/arm-none-eabi-gcc に置き換え "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "gcc-arm" } ], "version": 4 } |
launch.json(OpenOCD 使用例)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "version": "0.2.0", "configurations": [ { "name": "Debug (OpenOCD)", "type": "cortex-debug", "request": "launch", "executable": "${workspaceFolder}/build/firmware.elf", "servertype": "openocd", "device": "STM32F407VG", "configFiles": [ "${workspaceFolder}/openocd/interface.cfg", "${workspaceFolder}/openocd/target.cfg" ], "runToMain": true, "preLaunchTask": "Build Firmware" } ] } |
tasks.json(Makefile 呼び出し)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
{ "version": "2.0.0", "tasks": [ { "label": "Build Firmware", "type": "shell", "command": "make -C ${workspaceFolder}", "group": "build" }, { "label": "Flash Device", "type": "shell", "command": "make -C ${workspaceFolder} flash", "dependsOn": "Build Firmware", "group": "test" } ] } |
Remote‑SSH の設定は、公式ドキュメント(https://code.visualstudio.com/docs/remote/ssh)を参照し、
~/.ssh/configにホスト情報を書き込むだけで完了します。
4. リモート開発とデバッグツールの選定
| ツール | メリット | デメリット |
|---|---|---|
| OpenOCD | 無料・オープンソース、幅広い MCU に対応 | 設定がやや煩雑、速度は J‑Link に劣る |
| SEGGER J‑Link | 高速転送(最大 12 Mbps)と安定性 | 有償ライセンスが必要 |
| pyOCD | Python 製でインストールが簡単、完全無料 | 対応 MCU が限定的、速度は低め |
4‑1. Ubuntu / Raspberry Pi にリモート接続してデバッグ
|
1 2 3 4 5 |
# Remote-SSH 接続後に実行する例 arm-none-eabi-gcc --version # → 13.2.x が表示されることを確認 clang --version # → 17.x が表示されることを確認 openocd -v # OpenOCD のバージョン確認 |
udev ルール(OpenOCD 用)例(Ubuntu)
|
1 2 3 |
# /etc/udev/rules.d/99-openocd.rules SUBSYSTEM=="usb", ATTR{idVendor}=="0483", MODE="0666" |
適用は次のコマンドで行います。
|
1 2 |
sudo udevadm control --reload-rules && sudo systemctl restart udev |
5. サンプルプロジェクトでビルド・書き込みを自動化
5‑1. ディレクトリ構成
|
1 2 3 4 5 6 7 8 9 10 11 |
embedded-sample/ ├─ src/ │ └─ main.c ├─ include/ │ └─ stm32f4xx.h ├─ openocd/ │ ├─ interface.cfg │ └─ target.cfg ├─ Makefile └─ CMakeLists.txt (任意) |
5‑2. main.c(最小 LED 点滅例)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include "stm32f4xx.h" int main(void) { /* GPIOA のクロック有効化 */ RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; /* PA5 を汎用出力に設定 */ GPIOA->MODER &= ~(0x3U << (5 * 2)); GPIOA->MODER |= (0x1U << (5 * 2)); while (1) { GPIOA->ODR ^= (1U << 5); // LED トグル for (volatile int i = 0; i < 800000; ++i); // 遅延ループ } } |
5‑3. Makefile(クロスコンパイル+OpenOCD 書き込み)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# ------------------------------------------------- # ツールチェーン設定 # ------------------------------------------------- CC := arm-none-eabi-gcc OBJCOPY := arm-none-eabi-objcopy SIZE := arm-none-eabi-size # ------------------------------------------------- # ビルドフラグ # ------------------------------------------------- CFLAGS = -mcpu=cortex-m4 -mthumb -O0 -g3 -Wall \ -Iinclude -DSTM32F407xx LDFLAGS = -Tstm32f4.ld -nostdlib -Wl,--gc-sections SRC := $(wildcard src/*.c) OBJ := $(SRC:.c=.o) ELF := firmware.elf BIN := firmware.bin # ------------------------------------------------- # ビルドルール # ------------------------------------------------- all: $(BIN) $(ELF): $(OBJ) $(CC) $(LDFLAGS) $^ -o $@ $(SIZE) $@ %.bin: %.elf $(OBJCOPY) -O binary $< $@ flash: $(BIN) openocd -f openocd/interface.cfg -f openocd/target.cfg \ -c "program $(BIN) verify reset exit" clean: rm -f src/*.o $(ELF) $(BIN) |
ポイント:
openocd/interface.cfgとopenocd/target.cfgはリモートマシン側に配置し、Makefile から相対パスで呼び出す形にしています。これによりローカルとリモートの両方で同一 Makefile が使えます。
5‑4. よくあるエラーとチェックリスト
| エラーメッセージ | 原因例 | 確認項目 / 対策 |
|---|---|---|
arm-none-eabi-gcc: command not found |
PATH 未設定またはインストール失敗 | which arm-none-eabi-gcc(Linux/macOS)/where.exe arm-none-eabi-gcc(Windows)でパスを確認 |
openocd: cannot find USB device |
udev ルール未適用、ケーブル不良 | /etc/udev/rules.d/99-openocd.rules を作成し、sudo udevadm control --reload-rules && sudo systemctl restart udev |
undefined reference to __libc_init_array |
スタートアップコードがリンクされていない | startup_stm32f4xx.s と system_stm32f4xx.c をプロジェクトに追加し、LDFLAGS += -lc -lgcc |
| デバッグが途中で止まらない | launch.json の runToMain が false、またはリセット未実行 |
"runToMain": true とし、"preLaunchTask": "Flash Device" を設定 |
6. まとめ(チェックリスト)
| 項目 | 実施内容 |
|---|---|
| ツールチェーン取得 | Windows: MSYS2 → arm-none-eabi-gcc、Linux: 各パッケージマネージャ、macOS: Homebrew。バージョンは 13.2 系(GCC)/17 系(Clang)。 |
| PATH 設定 | OS 毎に環境変数へ実際のインストールディレクトリを追加。--version コマンドで確認。 |
| VS Code 環境構築 | C/C++、Cortex‑Debug、Remote‑SSH の三拡張を導入し、.vscode/* にビルド・デバッグ設定を書き込む。 |
| リモート開発 | Ubuntu / Raspberry Pi へ SSH 接続後、OpenOCD(または J‑Link/pyOCD)をインストール。udev ルールと権限を整備。 |
| サンプルプロジェクト | Makefile または CMake にビルド・フラッシュ処理を統合し、VS Code のタスクでワンクリック実行。エラーは PATH・udev・リンカ設定の三点に絞ってチェックできるようにする。 |
これらの手順をすべて完了すれば、Windows・Linux・macOS のいずれの環境でも同一の組込み C 開発基盤が構築できます。コード変更 → ビルド → デバイス書き込みまでを自動化することで、開発サイクルが大幅に短縮され、チーム全体での設定差異も最小限に抑えられます。
本稿は 2026 年 4 月時点の情報を元に作成しています。将来的なパッケージ更新や OS の変更があった場合は、公式リポジトリや各ベンダーの最新ドキュメントをご確認ください。