##補足
2021/02/16
・Ruby 2.7.2のインストール失敗は libssl-devパッケージ不足のためで、環境構築を含めて修正しました。
・Ruby 2.7系でTOPPERS/ASP3のコンフィギュレーションの失敗は Rubyのshellライブラリ不足のためで、ライブラリのインストールを追記し、結果も修正しました。
##はじめに
以前に「TOPPERS/ASP3をビルドして動かしてみる」と題して PC上の Linuxで
TOPPERS/ASP3をビルドしてSTM32F401-Nucleoで動作させるまでの手順の記事を記しました。
【Qiita】TOPPERS/ASP3をビルドして動かしてみる
https://qiita.com/Yukiya_Ishioka/items/63618319d47ac743a631
その後、TOPPERS/ASP3の新しい版のソースが公開されされていること、
TOPPERS/ASPをラズパイ上でビルドする手順の記事も記したことから
TOPPERS/ASP3のSTM32F401-Nucleo用のソースコードをラズパイ上でビルドしようと考えました。
【Qiita】ラズパイを使ったTOPPERS用Cortex-M開発環境の構築
https://qiita.com/Yukiya_Ishioka/items/e68a6aabf72f0721948d
その過程で開発環境側のパッケージにより TOPPERS/ASP3のビルドに失敗することが分かり、
ビルド環境の説明も兼ねて検証結果を記事にしてみました。
なお、TOPPERSやTOPPERSプロジェクト、TOPPERS/ASP3の詳細は以下のページを参照してください。
・TOPPERSのページ
https://www.toppers.jp/
・TOPPERSプロジェクトのページ
https://www.toppers.jp/project.html
・TOPPERS/ASP3カーネルのページ
https://www.toppers.jp/asp3-kernel.html
##環境構築
ラズパイの基本的な環境構築は「ラズパイを使ったTOPPERS用Cortex-M開発環境の構築/A>」も
参考にしてください。
###Linuxのインストール
以下のダウンロードページの「Ubuntu 20.04.1 LTS」「Download 64-bit」を選択してダウンロードします。
Raspberry Pi 用 64bit Ubuntu 20.04.1 LTS
https://ubuntu.com/download/raspberry-pi
xz形式のファイルがダウンロードでできるはずなので、それをimgファイル(ubuntu-20.04.1-preinstalled-server-arm64+raspi.img)へ展開します。
展開したファイルをイメージ書き込みツールなどを使い SDカードへ書き込みます。
書き込みが終わったら SDカードをラズパイへ差し込み、ラズパイを起動すれば ubuntuが起動します。
###パッケージのインストール
ビルド環境に必要だったり、あると便利そうな以下のパッケージをインストールします。
パッケージ名 |
---|
g++ |
libboost-all-dev |
libxerces-c-dev |
libncurses5 |
cmake |
libusb-1.0 |
libssl-dev |
net-tools |
openssh-server |
samba |
インターネットへのアクセスが可能な状態であれば、以下のコマンドで依存するパッケージを含めてインストールできます。
sudo apt-get update
sudo apt-get -y install g++ libboost-all-dev libxerces-c-dev libncurses5 cmake libusb-1.0 libssl-dev
sudo apt-get -y install net-tools openssh-server samba
これらのパッケージのほかにクロス開発用のコンパイラなどのツールチェーンが必要となります。
LinuxのARM用ツールチェーンは「The GNU Embedded Toolchain for Arm」にバイナリが既に用意されていて以下のページからダウンロードすることが可能です。
・GNU Arm Embedded Toolchain: 10-2020-q4-major December 11, 2020
gcc-arm-none-eabi-10-2020-q4-major-aarch64-linux.tar.bz2
ダウンロード後、任意のディレクトリへ展開して配下の「gcc-arm-none-eabi-10-2020-q4-major/bin/」をPATHへ設定してください。
PATHの設定は以下のコマンドを実行してクロスコンパイラの版数情報などが出力されれば成功です。
arm-none-eabi-gcc -v
TOPPERS/ASP3はコンフィギュレーションに Rubyというツールが必要になりますが、この Rubyの版数によりコンフィギュレーションに失敗することが分かったので、検証を行う際にダウンロードやビルドなどの手順を記します。
##TOPPERS/ASP3のビルド構成の準備
###TOPPERS/ASP3のソースをゲット
ビルド対象となる TOPPERS/ASP3のソースファイルをゲットします。
TOPPERSの以下のダウンロードページから必要なファイルをゲットすることができます。
今回は 2020年 05月 01日にリリースされた「Nucleo F401RE簡易パッケージ」を使ってビルドします。
TOPPERS/ASP3カーネル簡易パッケージのダウンロード
https://www.toppers.jp/asp3-e-download.html
Nucleo F401RE簡易パッケージ
https://www.toppers.jp/download.cgi/asp3_nucleo_f401re_gcc-20200414.zip
任意のディレクトリで以下のコマンドを実行することで zipファイルをダウンロードできます。
wget https://www.toppers.jp/download.cgi/asp3_nucleo_f401re_gcc-20200414.zip
###TOPPERS/ASP3のソース構成の作成
前の操作で得られた「asp3_nucleo_f401re_gcc-20200414.zip」をTOPPERS/ASP3用の開発ディレクトリへコピーし、展開します。
展開後、以下の操作でasp3ディレクトリのとなりに作業用のディレクトリを作成します。
mkdir build
drwxr-xr-x 16 ubuntu ubuntu 4096 Apr 14 2020 asp3/
drwxrwxr-x 2 ubuntu ubuntu 4096 Dec 17 09:40 build/
##検証
Rubyの版数の違いによるTOPPERS/ASP3のビルドの成否を検証します。
###Ruby 2.7.0
ラズパイのubuntu20.04で apt-getでインストールできる版数で、以下の手順でインストールします。
この記事を書いている時点では「Ruby 2.7.0」がインストールされました。
sudo apt-get -y install ruby
ubuntu@ubuntu:~/dev1$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [aarch64-linux-gnu]
Ruyb 2.7系では shellライブラリが標準では組み込まれていないため、以下のコマンドで shellライブラリをインストールします。
sudo gem install shell
TOPPERS/ASP3のソースを展開したディレクトリのとなりの buildディレクトリへ移動し、新たなディレクトリ「ruby2700」を作成し、移動します。
mkdir ruby2700
cd ruby2700
このような構成になると思います。
|--asp3
|--build
| |--ruby2700
以下のコマンドで TOPPERS/ASP3のコンフィギュレーションを行います。
「Generating Makefile・・・」と表示されたのでコンフィギュレーションが成功しています。
ubuntu@ubuntu:~/dev1/build/ruby2700$ ../../asp3/configure.rb -T nucleo_f401re_gcc
Generating Makefile from ../../asp3/sample/Makefile.
ファイルを確認すると Makefileと objsが生成されています。
ubuntu@ubuntu:~/dev1/build/ruby2700$ ll
total 32
drwxrwxr-x 3 ubuntu ubuntu 4096 Feb 16 04:26 ./
drwxrwxr-x 5 ubuntu ubuntu 4096 Dec 18 13:50 ../
-rw-rw-r-- 1 ubuntu ubuntu 17428 Feb 16 04:26 Makefile
drwxrwxr-x 2 ubuntu ubuntu 4096 Feb 16 04:26 objs/
この状態でmakeを実行すると TOPPERS/ASP3のビルドを行うことができます。
ビルドは進みますが、最後に以下のメッセージが表示されます。
実行コードの aspファイルが生成されているのでビルドそのものは成功しているようです。
TOPPERS/ASP3内の「_kernel_mpfinib_table」がないというエラーですが、コンフィギュレーションで生成されるソースに使用されない定義が含まれているのかもしれません。
--rom-symbol asp.syms --rom-image asp.srec
error: E_SYS: symbol `_kernel_mpfinib_table' not found
make[1]: *** [Makefile:436: check.timestamp] Error 1
make[1]: Leaving directory '/home/ubuntu/dev1/build/ruby2700'
make: *** [Makefile:224: all] Error 2
ubuntu@ubuntu:~/dev1/build/ruby2700$
ubuntu@ubuntu:~/dev1/build/ruby2700$ ll
total 1576
drwxrwxr-x 4 ubuntu ubuntu 4096 Feb 16 04:28 ./
drwxrwxr-x 5 ubuntu ubuntu 4096 Dec 18 13:50 ../
-rw-rw-r-- 1 ubuntu ubuntu 17428 Feb 16 04:26 Makefile
-rwxrwxr-x 1 ubuntu ubuntu 559068 Feb 16 04:28 asp*
-rwxrwxr-x 1 ubuntu ubuntu 80254 Feb 16 04:28 asp.srec*
-rw-rw-r-- 1 ubuntu ubuntu 9662 Feb 16 04:28 asp.syms
###Ruby 2.7.2
次は現時点で最新の Ruby 2.7.2 を試します。
ここからの Rubyは、ネットからソースをダウンロード、ビルド、インストールしての実行になります。
buildディレクトリ配下に新たなディレクトリを作成し、移動します。
mkdir ruby2702
cd ruby2702
今回はRubyのソースファイルをネットからダウンロード、ビルドして利用します。
以下のコマンドでソースファイルをダウンロード、展開、ビルドします。
wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.2.tar.bz2
tar xjf ruby-2.7.2.tar.bz2
cd ruby-2.7.2/
./configure
make
ビルドが終わったら Rubyをシステムへインストールします。
sudo make install
インストールが終わったらディレクトリを一つ上へ移動して、以下のコマンドでインストールされていることを確認します。
ubuntu@ubuntu:~/dev1/build/ruby2702/ruby-2.7.2$ ruby -v
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [aarch64-linux]
以下のコマンドで TOPPERS/ASP3のコンフィギュレーションを行います。
「Generating Makefile・・・」と表示されたのでコンフィギュレーションが成功しています。
ubuntu@ubuntu:~/dev1/build/ruby2702$ ../../asp3/configure.rb -T nucleo_f401re_gcc
Generating Makefile from ../../asp3/sample/Makefile.
ファイルを確認すると Makefileと objsが生成されています。
ubuntu@ubuntu:~/dev1/build/ruby2702$ ll
total 44
drwxrwxr-x 4 ubuntu ubuntu 4096 Feb 16 04:44 ./
drwxrwxr-x 5 ubuntu ubuntu 4096 Dec 18 13:50 ../
-rw-rw-r-- 1 ubuntu ubuntu 17428 Feb 16 04:44 Makefile
drwxrwxr-x 2 ubuntu ubuntu 4096 Feb 16 04:44 objs/
drwxrwxr-x 28 ubuntu ubuntu 12288 Feb 16 04:32 ruby-2.7.2/
この状態でmakeを実行すると TOPPERS/ASP3のビルドを行うことができます。
ビルドは進みますが、最後に以下のメッセージが表示されます。
実行コードの aspファイルが生成されているのでビルドそのものは成功しているようです。
TOPPERS/ASP3内の「_kernel_mpfinib_table」がないというエラーですが、コンフィギュレーションで生成されるソースに使用されない定義が含まれているのかもしれません。
--rom-symbol asp.syms --rom-image asp.srec
error: E_SYS: symbol `_kernel_mpfinib_table' not found
make[1]: *** [Makefile:436: check.timestamp] Error 1
make[1]: Leaving directory '/home/ubuntu/dev1/build/ruby2702'
make: *** [Makefile:224: all] Error 2
ubuntu@ubuntu:~/dev1/build/ruby2702$
ubuntu@ubuntu:~/dev1/build/ruby2702$ ll
total 1588
drwxrwxr-x 5 ubuntu ubuntu 4096 Feb 16 04:46 ./
drwxrwxr-x 5 ubuntu ubuntu 4096 Dec 18 13:50 ../
-rw-rw-r-- 1 ubuntu ubuntu 17428 Feb 16 04:44 Makefile
-rwxrwxr-x 1 ubuntu ubuntu 559068 Feb 16 04:46 asp*
-rwxrwxr-x 1 ubuntu ubuntu 80254 Feb 16 04:46 asp.srec*
-rw-rw-r-- 1 ubuntu ubuntu 9662 Feb 16 04:46 asp.syms
###Ruby 2.6.6
次は Ruby 2.6系最新の 2.6.6で試します
ソースは以下からダウンロードします。
ビルドが終わったら Rubyをシステムへインストールします。
sudo make install
インストールが終わったらディレクトリを一つ上へ移動して、以下のコマンドでインストールされていることを確認します。
ubuntu@ubuntu:~/dev1/build/ruby2606$ ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [aarch64-linux]
以下のコマンドで TOPPERS/ASP3のコンフィギュレーションを行います。
「Generating Makefile・・・」と表示されたのでコンフィギュレーションが成功しています。
ubuntu@ubuntu:~/dev1/build/ruby2606$ ../../asp3/configure.rb -T nucleo_f401re_gcc
Generating Makefile from ../../asp3/sample/Makefile.
ファイルを確認すると Makefileと objsが生成されています。
ubuntu@ubuntu:~/dev1/build/ruby2606$ ll
total 44
drwxrwxr-x 4 ubuntu ubuntu 4096 Dec 17 12:08 ./
drwxrwxr-x 5 ubuntu ubuntu 4096 Dec 17 09:52 ../
-rw-rw-r-- 1 ubuntu ubuntu 17428 Dec 17 12:08 Makefile
drwxrwxr-x 2 ubuntu ubuntu 4096 Dec 17 12:08 objs/
drwxrwxr-x 28 ubuntu ubuntu 12288 Dec 17 12:05 ruby-2.6.6/
この状態でmakeを実行すると TOPPERS/ASP3のビルドを行うことができます。
ビルドは進みますが、最後に以下のメッセージが表示されます。
実行コードの aspファイルが生成されているのでビルドそのものは成功しているようです。
TOPPERS/ASP3内の「_kernel_mpfinib_table」がないというエラーですが、コンフィギュレーションで生成されるソースに使用されない定義が含まれているのかもしれません。
--rom-symbol asp.syms --rom-image asp.srec
error: E_SYS: symbol `_kernel_mpfinib_table' not found
make[1]: *** [Makefile:436: check.timestamp] Error 1
make[1]: Leaving directory '/home/ubuntu/dev1/build/ruby2606'
make: *** [Makefile:224: all] Error 2
ubuntu@ubuntu:~/dev1/build/ruby2606$ ll objs/asp*
ls: cannot access 'objs/asp*': No such file or directory
ubuntu@ubuntu:~/dev1/build/ruby2606$
ubuntu@ubuntu:~/dev1/build/ruby2606$ ll
total 1588
drwxrwxr-x 5 ubuntu ubuntu 4096 Dec 17 12:11 ./
drwxrwxr-x 5 ubuntu ubuntu 4096 Dec 17 09:52 ../
-rw-rw-r-- 1 ubuntu ubuntu 17428 Dec 17 12:08 Makefile
-rwxrwxr-x 1 ubuntu ubuntu 558888 Dec 17 12:11 asp*
-rwxrwxr-x 1 ubuntu ubuntu 80254 Dec 17 12:11 asp.srec*
-rw-rw-r-- 1 ubuntu ubuntu 9662 Dec 17 12:11 asp.syms
###Ruby 2.5.8
次は Ruby 2.5系最新の 2.5.8で試します
ソースは以下からダウンロードします。
ubuntu@ubuntu:~/dev1/build/ruby2508$ ruby -v
ruby 2.5.8p224 (2020-03-31 revision 67882) [aarch64-linux]
TOPPERS/ASP3のコンフィギュレーションは成功しました。
ubuntu@ubuntu:~/dev1/build/ruby2508$ ../../asp3/configure.rb -T nucleo_f401re_gcc
Generating Makefile from ../../asp3/sample/Makefile.
Ruby 2.5.8もTOPPERS/ASP3のビルドは成功しますが、やはりエラーが発生します。
--rom-symbol asp.syms --rom-image asp.srec
error: E_SYS: symbol `_kernel_mpfinib_table' not found
make[1]: *** [Makefile:436: check.timestamp] Error 1
make[1]: Leaving directory '/home/ubuntu/dev1/build/ruby2508'
make: *** [Makefile:224: all] Error 2
ubuntu@ubuntu:~/dev1/build/ruby2508$ ll asp*
-rwxrwxr-x 1 ubuntu ubuntu 558888 Dec 17 13:10 asp*
-rwxrwxr-x 1 ubuntu ubuntu 80254 Dec 17 13:10 asp.srec*
-rw-rw-r-- 1 ubuntu ubuntu 9662 Dec 17 13:10 asp.syms
ubuntu@ubuntu:~/dev1/build/ruby2508$
###Ruby 2.4.10
次は Ruby 2.4系最新の 2.4.10で試します。
ソースは以下からダウンロードします。
ubuntu@ubuntu:~/dev1/build/ruby2410$ ruby -v
ruby 2.4.10p364 (2020-03-31 revision 67879) [aarch64-linux]
TOPPERS/ASP3のコンフィギュレーションは成功しました。
ubuntu@ubuntu:~/dev1/build/ruby2410$ ../../asp3/configure.rb -T nucleo_f401re_gcc
Generating Makefile from ../../asp3/sample/Makefile.
Ruby 2.4.10もTOPPERS/ASP3のビルドは成功しますが、やはりエラーが発生します。
--rom-symbol asp.syms --rom-image asp.srec
error: E_SYS: symbol `_kernel_mpfinib_table' not found
make[1]: *** [Makefile:436: check.timestamp] Error 1
make[1]: Leaving directory '/home/ubuntu/dev1/build/ruby2410'
make: *** [Makefile:224: all] Error 2
ubuntu@ubuntu:~/dev1/build/ruby2410$ ll asp*
-rwxrwxr-x 1 ubuntu ubuntu 559068 Dec 17 21:47 asp*
-rwxrwxr-x 1 ubuntu ubuntu 80254 Dec 17 21:47 asp.srec*
-rw-rw-r-- 1 ubuntu ubuntu 9662 Dec 17 21:47 asp.syms
###Ruby 2.3.1
以前に記した「TOPPERS/ASP3をビルドして動かしてみる」で使用した 2.3.1で試します。
ソースは以下からダウンロードします。
コンフィギュレーションは成功します。
ubuntu@ubuntu:~/dev1/build/ruby2301$ ../../asp3/configure.rb -T nucleo_f401re_gcc
Generating Makefile from ../../asp3/sample/Makefile.
ubuntu@ubuntu:~/dev1/build/ruby2301$ ls -aFl
total 32
drwxrwxr-x 3 ubuntu ubuntu 4096 Dec 17 09:43 ./
drwxrwxr-x 3 ubuntu ubuntu 4096 Dec 17 09:31 ../
-rw-rw-r-- 1 ubuntu ubuntu 17428 Dec 17 09:43 Makefile
drwxrwxr-x 2 ubuntu ubuntu 4096 Dec 17 09:43 objs/
Ruby 2.3.1もTOPPERS/ASP3のビルドは成功しますが、やはりエラーが発生します。
--rom-symbol asp.syms --rom-image asp.srec
error: E_SYS: symbol `_kernel_mpfinib_table' not found
make[1]: *** [Makefile:436: check.timestamp] Error 1
make[1]: Leaving directory '/home/ubuntu/dev1/build/ruby2301'
make: *** [Makefile:224: all] Error 2
ubuntu@ubuntu:~/dev1/build/ruby2301$
###Ruby 2.1.0
以前に記した「TOPPERS/ASP3をビルドして動かしてみる」でインストールしようとして失敗していた 2.1.0で試します。
ソースは以下からダウンロードします。
コンフィギュレーションは成功します。
ubuntu@ubuntu:~/dev1/build/ruby2100$ ../../asp3/configure.rb -T nucleo_f401re_gcc
Generating Makefile from ../../asp3/sample/Makefile.
Ruby 2.1.0では makeコマンドでTOPPERS/ASP3のビルドを開始すると以下の個所でビルドに失敗します。
cfg1_out.cの生成に問題があるようでシンボルの生成に失敗していそうな感じです。
arm-none-eabi-nm -n cfg1_out > cfg1_out.syms
arm-none-eabi-objcopy -O srec -S cfg1_out cfg1_out.srec
ruby ../../asp3/cfg/cfg.rb --pass 2 --kernel asp -I. -I../../asp3/include -I../../asp3/target/nucleo_f401re_gcc -I../../asp3/target/nucleo_f401re_gcc/stm32fcube -I../../asp3/arch/arm_m_gcc/stm32f4xx_stm32cube -I../../asp3/arch/arm_m_gcc/stm32f4xx_stm32cube/STM32F4xx_HAL_Driver/Inc -I../../asp3/arch/arm_m_gcc/stm32f4xx_stm32cube/CMSIS/Device/ST/STM32F4xx/Include -I../../asp3/arch/arm_m_gcc/stm32f4xx_stm32cube/CMSIS/Include -I../../asp3/arch/arm_m_gcc/common -I../../asp3/arch/gcc -I../../asp3 -I../../asp3/sample -I./gen -I../../asp3/tecs_kernel -T ../../asp3/target/nucleo_f401re_gcc/target_kernel.trb
./gen/tecsgen.cfg:7: error: E_OBJ: intno `USART_INTNO' in CRE_ISR is not configured with CFG_INT
make[1]: *** [Makefile:373: kernel_cfg.timestamp] Error 1
make[1]: Leaving directory '/home/ubuntu/dev1/build/ruby2100'
make: *** [Makefile:224: all] Error 2
ubuntu@ubuntu:~/dev1/build/ruby2100$
###Ruby 2.0.0
TOPPERS/ASP3の asp3/doc/user.txt に動作確認した版数として記されている 2.0.0で試します。2.0系の最新である2.0.0-p648を使いました。
ソースは以下からダウンロードします。
ubuntu@ubuntu:~/dev1/build/ruby2000$ ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [aarch64-linux]
コンフィギュレーションは成功します。
ubuntu@ubuntu:~/dev1/build/ruby2000$ ../../asp3/configure.rb -T nucleo_f401re_gcc
Generating Makefile from ../../asp3/sample/Makefile.
Ruby 2.0.0はTOPPERS/ASP3のビルドは成功しますが、やはりエラーが発生します。
--rom-symbol asp.syms --rom-image asp.srec
error: E_SYS: symbol `_kernel_mpfinib_table' not found
make[1]: *** [Makefile:436: check.timestamp] Error 1
make[1]: Leaving directory '/home/ubuntu/dev1/build/ruby2000'
make: *** [Makefile:224: all] Error 2
ubuntu@ubuntu:~/dev1/build/ruby2000$ ll asp*
-rwxrwxr-x 1 ubuntu ubuntu 559068 Dec 17 20:09 asp*
-rwxrwxr-x 1 ubuntu ubuntu 80254 Dec 17 20:09 asp.srec*
-rw-rw-r-- 1 ubuntu ubuntu 9662 Dec 17 20:09 asp.syms
##まとめ
Ruby版数 | 結果 |
---|---|
2.0.0 | コンフィグ成功、ビルド成功 |
2.1.0 | コンフィグ成功、ビルド失敗※ |
2.3.1 | コンフィグ成功、ビルド成功 |
2.4.10 | コンフィグ成功、ビルド成功 |
2.5.8 | コンフィグ成功、ビルド成功 |
2.6.6 | コンフィグ成功、ビルド成功 |
2.7.0 | コンフィグ成功、ビルド成功(要shellライブラリ) |
2.7.2 | コンフィグ成功、ビルド成功(要shellライブラリ) |
※コンフィグ成功としてますが、コンフィギュレーション時のソース生成に失敗している可能性が高いです。
##最後に
以前に「TOPPERS/ASP3をビルドして動かしてみる」でコンフィギュレーションやビルドがすんなりと成功していたため、ラズパイ環境への移行も容易と思っていましたが、インストールされていたのが Ruby 2.7.0であったため、TOPPERS/ASP3のソース変更に問題があるのかもしれないと不要なソース修正を行いながらビルドができない状態が続いていました。
ただ、ソース内のドキュメントに動作確認版数が記されていて、その版数や以前に使用した版数で動作確認ができました。やはりドキュメントはそれなりに目を通してそれに従った設定や環境構築をしなければということを思い知らされました。
Rubyの版数の違いが TOPPERS/ASP3のビルドに影響することが分かったので、この記事が今後 TOPPERS/ASP3を使う人の参考になればと思います。
- 以上 -