目次: OpenOCD
以前(2023年6月28日の日記参照)紹介したときからビルド方法が変わったかも?と思ったらそんなことはなく同じでした。コードはSourceForgeのGitリポジトリが本家ですが、GitHubにも公式ミラー(OpenOCD GitHub公式ミラー)があります。気のせいかもしれませんが、GitHubの方が速い気がします。
今回はUbuntu 24.04のDockerイメージからビルドしてみます。
$ docker run -it ubuntu:24.04 /bin/bash
# apt-get update
# apt-get install -y git gcc g++ autoconf automake libtool pkg-config make \
libusb-1.0-0-dev libhidapi-dev libgpiod-dev libftdi1-dev
以下、Docker内で実行する場合はrootユーザーなのでプロンプトの先頭は#ですが、一般ユーザーで実行しても一緒なのでプロンプトの先頭は$で表記します。
$ git clone https://git.code.sf.net/p/openocd/code openocd-code $ cd openocd-code $ git submodule init Submodule 'jimtcl' (https://github.com/msteveb/jimtcl.git) registered for path 'jimtcl' Submodule 'src/jtag/drivers/libjaylink' (https://gitlab.zapb.de/libjaylink/libjaylink.git) registered for path 'src/jtag/drivers/libjaylink' $ git submodule update --recursive $ bootstrap $ ./configure --enable-internal-jimtcl --enable-internal-libjaylink OpenOCD configuration summary --------------------------------------------------- ... CoreSight Direct Memory yes (auto) Linux GPIO bitbang through sysfs yes (auto) Remote Bitbang driver yes (auto) SEGGER J-Link Programmer yes (auto) Xilinx XVC PCIe and AXI drives yes (auto) Bus Pirate yes (auto) ...
基本的にOpenOCDのconfigureは依存ライブラリを発見すると関連機能を自動的に有効にしますから、特に何も指定する必要がありません。が、今回は下記を指定します。
ディストリビューション提供のlibjaylinkやjimtclを使っても構わないですが、Ubuntu 20.04のような古めのディストリビューションを使っている場合はバージョンが合わないので内蔵のライブラリを使うと良いです。
OpenOCDはconfigureのオプションを打ち間違っても怒らずにそのまま進んでしまうので、configureの最後に表示されるconfiguration summaryのSEGGER J-Link Programmerがyesになっているか確認しましょう。
$ make -j8
$ ./src/openocd --version
Open On-Chip Debugger 0.12.0+dev-01537-ge6752ecbc (2026-06-02-00:00)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
うまくいったようです。良かった良かった。
この記事にコメントする
目次: Zephyr
前回はPythonとwestの準備をしました。今回はZephyrをビルドするツールzephyr-sdkをインストールします。基本的にはZephyr SDKにあるとおりです。westを使える方はwestで良いですが詰みやすい(※)ので、インストーラを使う方法も知っておいて損はないでしょう。
SDKのバージョンは何でも良い訳ではなくZephyr Version Compatibilityにある通り、SDKのバージョンによってサポートしているZephyrのバージョンが違うのでご注意ください。
今回はSDK 1.0系とZephyr 4.4.0を使いましたが、特に理由はないので必要に応じて適切なバージョンを選んでください。
$ mkdir work_dir $ cd work_dir $ tar xf zephyr-sdk-1.0.1_linux-x86_64_minimal.tar.xz $ cd zephyr-sdk-1.0.1 Install GNU toolchain [y/n]? y Install GNU toolchains for all targets [y/n]? y → この問いにnと答えると、アーキテクチャごとに要るか/要らないかを聞かれるので、 要るものだけにyと答えると時間節約になります。 Install LLVM toolchain [y/n]? y Install host tools [y/n]? y Register Zephyr SDK CMake package [y/n]? y Create symbolic links for old Zephyr bisectability [y/n]? y → 以前はSDK直下にアーキテクチャのディレクトリ(例: x86_64-zephyr-elf)がありましたが、 llvmが導入されてgnu/以下に移動しました。 昔のディレクトリ構造を期待する古いZephyrを使うなら、yと答えてシンボリックリンクを作っておいたほうが良いです。
基本は全部yと答えれば良いはずです。インストール時間を短くしたい人は"Install GNU toolchains for all targets"にnと答えて要るものだけに絞りましょう。
(※)west sdk installでもインストールできますが、westだと何が起きたのか全くわかりません。成功するうちは良いものの、いざ失敗するとどうしようもなくなります。
Zephyr SDKを/optや/usr/localなどに置く場合はZephyrのビルドシステムが勝手にSDKを探してくれます。もし別の場所に置きたい場合はもうひと手間必要です。ホームディレクトリに下記の.zephyrrc設定ファイルを作ります。
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=/home/ubuntu/work_dir/zephyr-sdk-1.0.1
設定を反映させるため、zephyrのディレクトリにあるzephyr-env.shをsourceで取り込みます。
$ cd work_dir/zephyr $ source zephyr-env.sh
先ほど作った設定ファイルの内容が環境変数に反映されていれば成功です。
$ env | grep -i zephyr ZEPHYR_BASE=/home/ubuntu/work_dir/zephyr PWD=/home/ubuntu/work_dir/zephyr ZEPHYR_TOOLCHAIN_VARIANT=zephyr ZEPHYR_SDK_INSTALL_DIR=/home/ubuntu/work_dir/zephyr-sdk-1.0.1 PATH=/home/ubuntu/work_dir/zephyr/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
注意点は、シェルを終了させると環境変数が消えてしまうことです。したがってシェルを立ち上げる度に、
$ cd work_dir $ source .venv/bin/activate $ cd zephyr $ source zephyr-env.sh
を実行する必要がありまして面倒です……。手間なく設定する方法がありそうなので、ご存じの方は教えてくださいませ。以上がうまくいっていたら、ディレクトリはこうなっているはずです。
work_dir |-- .venv `-- zephyr-sdk-1.0.1
またセットアップだけで話が終わってしまいました。Zephyrは本題に至るまでが遠いです。次こそアプリを作ります。
この記事にコメントする
目次: Zephyr
Zephyrのアプリケーションをビルドするには、Zephyrをビルドできる環境が必要です。最初はPython環境のセットアップを行います。
なんで初手がPythonかというと、ZephyrのツリーをダウンロードしたりビルドするときにwestというPython製のツールを実行するためです。基本的にはGetting Started Guideにあるとおりです。
私の環境はDebian Testingなのでcmake(> 3.20.5), Python(> 3.12), Devicetree compiler(> 1.4.6)のバージョンを満たしています。
$ cmake --version cmake version 3.28.3 $ python3 --version Python 3.12.3 $ dtc --version Version: DTC 1.7.0
Ubuntu 24.04 LTSも問題ありません。もし古めのディストリビューションを使っている場合は上記の3ツールの最小バージョンを満たしているかチェックしてください。
$ sudo apt install --no-install-recommends git cmake ninja-build gperf \ ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \ xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 $ mkdir work_dir $ cd work_dir $ python3 -m venv .venv $ source .venv/bin/activate $ pip install west
Getting Started Guideには続きがありますが、In-treeアプリケーションをビルドするわけではないので今は実行しなくて良いです。以上がうまくいっていたら、ディレクトリはこうなっているはずです。
work_dir `-- .venv
続きはまた今度。
この記事にコメントする
目次: 射的
JTSA Unlimitedの大会に参加しました。
「水」ステージが大失敗、「木」もダメダメでした。他は結構良かったです。結果は72.1秒(前回は75.69秒)でした(総合78位/111人、LM 10位/17人)。60秒台はなかなか遠いです。
練習会の記録を見ても60秒台がほぼ出ないので75〜70秒くらいが実力ですが、去年よりは70秒台前半が出る回数が多いかなあ……?最近はあまり上達している感がありませんが、今後もゆるゆると続けていきます。
この記事にコメントする
目次: Zephyr
Zephyr RTOSはツリー内にアプリケーションを持ちます(以降、In-treeアプリケーションと呼びます)。zephyr/sample以下にサンプルアプリがあります。別の場所に自分のアプリケーションを足すこともできます。FreeRTOSもアプリケーションの横にカーネルのソースコードを置く形でした。RTOSだと普通なんでしょうね。
zephyr |-- LICENSES |-- arch |-- boards |-- build |-- cmake |-- doc |-- drivers |-- dts |-- include |-- kernel |-- lib |-- misc |-- modules |-- samples ★アプリケーションのサンプルはここにある★ |-- scripts |-- share |-- snippets |-- soc |-- submanifests |-- subsys `-- tests
In-treeアプリケーションは簡単に追加できて便利ですが、LinuxやUnixに慣れた人はアプリケーションとカーネルコードが混ざることに違和感を感じるでしょう。小さめなFreeRTOSならまだしも、でかいZephyrを常にアプリの横に置かれるのは邪魔です。
ご安心ください、Zephyrはアプリとカーネルを別のディレクトリに置くことができます(以降、Out-of-treeアプリケーションと呼びます)。便利ですね。
続きはまた今度。
この記事にコメントする
| < | 2026 | > | ||||
| << | < | 06 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| - | 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 | - | - | - | - |
23年5月15日
26年7月22日
26年7月14日
26年7月19日
21年12月28日
26年7月13日
23年6月1日
23年9月11日
25年1月31日
26年7月11日
24年2月7日
26年6月27日
26年7月3日
26年7月1日
26年6月26日
20年2月22日
26年6月18日
26年6月23日
26年6月11日
26年4月29日
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
2026年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: