本稿では Linux 上での TOPPERS/ASP3 カーネルのビルド方法について述べ、ビルドしたカーネルをqemuで動作させるまでの概要を説明します。
検証環境は Debian buster (4.19.0-6-amd64, ruby 2.5.5p157) および Gentoo (amd64, linux-4.19, ruby 2.4.6) です。
Debian Stretch / Ubuntu xenial であれば本稿を再現できると思いますが、検証していません。
Debian stretch/buster ではARM用GCCの起動ができないエラーが発生し、動作確認ができていません。Ubuntu についても同様にgccが起動できないため、解決方法を探しています。exec が ENOENT を返しているように見えます。
amd64環境でARM用GCCを起動するためには、クロスビルド環境向けのライブラリをインストールする必要があります。
apt-get install libc6-dev-i386
Debian もしくは Ubuntu 、Gentoo の nomultilib 環境では以下のようなエラーが出てコンパイラが起動できない場合があります。
上記ライブラリがインストールされていない可能性がありますので、ご注意ください。
cibuild@c47d0951d9f9:~$ which arm-none-eabi-gcc
/home/cibuild/gcc-arm-none-eabi-4_8-2014q3/bin/arm-none-eabi-gcc
cibuild@c47d0951d9f9:~$ arm-none-eabi-gcc --version
bash: /home/cibuild/gcc-arm-none-eabi-4_8-2014q3/bin/arm-none-eabi-gcc: No such file or directory
1. RTOSの特徴とTOPPERSの長所
豊富な先行文献があります。(以下略)
2. 環境構築
2016年のこちらの記事1が参考になります。
このブログの解説ではASP3カーネルのビルドにWindowsを用いることになっていますが、Linuxでも開発できます。今回ビルドする構成の概要に付いてはこちら2やこちら3を参考にしています。
TOPPERS/ASP3のビルドツールチェーンでは、rubyを用いてMakefileを生成するので、rubyやqemuをインストールしておきます。portageからQEMUをビルドする場合には QEMU_SOFTMMU_TARGETS の指定が必要です。debianの場合も qemu-system-arm を導入しておく必要があります。ARM環境をエミュレーションする場合、必須です。
QEMU_SOFTMMU_TARGETS="x86_64 arm i386"
emerge --quiet --jobs 2 --ask dev-lang/ruby
emerge --quiet --jobs 2 --ask app-emulation/qemu
先のブログにしたがって、lanchpad.netからARM用GCCコンパイラを導入します。
mkdir -p ~/Dev/Toppers && cd ~/Dev/Toppers
target=gcc-arm-none-eabi-4_8-2014q3-20140805-linux.tar.bz2
dst="https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q3-update/+download/gcc-arm-none-eabi-4_8-2014q3-20140805-linux.tar.bz2 "
md5dst="https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q3-update/+download/gcc-arm-none-eabi-4_8-2014q3-20140805-linux.tar.bz2/+md5"
curl -sL $dst > $target
curl $md5dst | grep "`md5sum $target | cut -d \ -f 1`" && echo ok || { echo error!; exit 1;}
tar xvjf $target
echo export PATH=$PWD/gcc-arm-none-eabi-4_8-2014q3/bin:\$PATH >> ~/.bashrc
. ~/.bashrc
arm-none-eabi-gcc --version
3. ソースコードのダウンロード・展開
本家4から最新の簡易版ソースコードをダウンロードしておきます。
wget https://www.toppers.jp/download.cgi/asp3_arm_gcc-20190320.tar.gz
md5sum asp3_arm_gcc-20190320.tar.gz | grep 8d2d1d5a10c39c93e8972789f2bc7202
tar xvzf asp3_arm_gcc-20190320.tar.gz
4. TOPPERS/ASP3をビルドする
doc/user.txt のビルド方法にしたがって、次の通りビルドを実施します。
(ビルドオプションについては 同ドキュメント に詳しい解説が載っています。目を通しておきましょう。)
cd asp3
mkdir OBJ && cd OBJ
ruby ../configure.rb -T ct11mpcore_gcc -O -DTOPPERS_USE_QEMU
make
問題なくビルドが完了します。エラーで停止した場合はPATHを確認しておきましょう。
5. QEMUで起動してみる
オブジェクトディレクトリの直下に asp という名前でカーネルが生成されています。
これをqemuで実行してみましょう。
$ ls -l asp
-rwxr-xr-x 1 ymash ymash 364227 9月 11 02:26 asp
$ qemu-system-arm -M realview-eb-mpcore -semihosting -m 128M -smp 1 -serial vc -kernel asp
View -> serial を選択すると、シリアルコンソールのログを読むことができます。
6. 遊ぶ
シリアルコンソールを表示しておき r を押下すると、タスクが切り替わります。
何度も押下すると、3つのタスクが繰り返し切り替わることに気づきます。
このビルドではTECSプラットフォーム5のサンプルアプリが起動しており、初期状態で3つのタスクが起動する構成になっているようです。
7. 終わりに
本稿はCC-BY-4.0に基づいて自由に利用頂けます。
-
TECSジェネレータ開発ブログ http://tecs22022.blog85.fc2.com/ ↩
-
サンプルアプリ構成 http://blog-imgs-91.fc2.com/t/e/c/tecs22022/asp3-tecs-sample.png ↩
-
TECSとTOPPERSについて https://codezine.jp/article/detail/380 ↩