= TOPPERS/SSP3カーネル(Release 3.A.0)のビルドスクリプト = == これは何か 早期リリースとして会員向けに公開されているTOPPERS/SSP3カーネル(Release 3.A.0)をビルドするためのシェルスクリプトです.[[BR]] 利用方法については [https://www.docker.com/ Docker] を用いた動作確認手順を示しますので,参考にしてください.[[BR]] == 動作確認に必要なもの * Docker : ホストOS上で Ubuntu のコンテナ(仮想環境)を動かすために使います.Ubuntu系のLinuxシステムをお使いの場合は手順2.のスクリプトだけを実行することもできます. * Git : Dockerのスクリプトを取得するのに使います. * コマンドライン環境:コマンドの実行にbashシェルを使います.Mac ならターミナルアプリ,Windowsなら MinGW など. == Dockerを用いた動作確認手順 以下ではMacOSのターミナルアプリで作業する際の様子を示します.他のホストOSで使用する場合もほぼ同様と思います. === 1. Dockerコンテナの構築およびシェルの起動 {{{ # (1-1) Dockerスクリプトの取得(カレントディレクトリに docker-toppers というディレクトリが作成される) $ git clone https://github.com/nmiri-nagoya-nsaito/docker-toppers.git Cloning into 'docker-toppers'... remote: Enumerating objects: 21, done. remote: Counting objects: 100% (21/21), done. remote: Compressing objects: 100% (18/18), done. remote: Total 113 (delta 4), reused 17 (delta 2), pack-reused 92 Receiving objects: 100% (113/113), 16.05 KiB | 2.29 MiB/s, done. Resolving deltas: 100% (43/43), done. # (1-2) スクリプトのディレクトリへ移動し,コンテナのシェルを起動する(詳細はスクリプト参照) $ cd docker-toppers $ ./start_shell.sh specified service: cli Building cli Step 1/16 : FROM ubuntu:xenial ---> 0ef2e08ed3fa Step 2/16 : MAINTAINER Naoki Saito ---> Using cache ---> ca33bf786219 Step 3/16 : RUN apt-get update ---> Using cache ---> 10c03c54ce2f (中略) Step 15/16 : USER $user ---> Using cache ---> 824d71ab265f Step 16/16 : RUN chmod -R +x ./scripts && sync && ./scripts/setup_user.sh ---> Using cache ---> b15825714462 Successfully built b15825714462 Successfully tagged docker-toppers_cli:latest Creating network "docker-toppers_default" with the default driver Creating docker-toppers_cli_1 ... done To run a command as administrator (user "root"), use "sudo ". See "man sudo_root" for details. saito@a584f9ade435:~$ }}} この時点で Linux コンテナのシェルが起動していますので,次はこの環境の中でSSP3カーネルのソースコードをセットアップし,ビルドします. === 2. ソースコードのセットアップおよびビルド {{{ # (2-0) workdir の owner とグループを確認し,rootの場合は作業ユーザに変更する # (<ユーザ名>と<グループ名>の部分は適宜置き換えてください) $ sudo chown <ユーザ名>:<グループ名> workdir # (2-1) 作業ディレクトリへ移動 (dockerの設定にて ~/workdir ディレクトリをホストと共有している) saito@a584f9ade435:~$ cd workdir/ # (2-2) 本パッケージをダウンロード(<ユーザ名>の部分は適宜置き換えてください) saito@a584f9ade435:~/workdir$ svn co http://dev.toppers.jp/svn/contrib/build_ssp3a --username <ユーザ名> 認証領域: Subversion Repository '<ユーザ名>' のパスワード: <パスワードを入力> A build_ssp3a/build_ssp3a.sh A build_ssp3a/setup_tools.sh リビジョン 403 をチェックアウトしました。 # (2-3) ツールのインストール saito@a584f9ade435:~/workdir$ cd build_ssp3a/ saito@a584f9ade435:~/workdir/build_ssp3a$ sudo ./setup_tools.sh ヒット:1 http://archive.ubuntu.com/ubuntu xenial InRelease ヒット:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease ヒット:3 http://archive.ubuntu.com/ubuntu xenial-security InRelease パッケージリストを読み込んでいます... 完了 (中略) libc-bin (2.23-0ubuntu11) のトリガを処理しています ... systemd (229-4ubuntu21.22) のトリガを処理しています ... sgml-base (1.26+nmu4ubuntu1) のトリガを処理しています ... # (2-4) SSPカーネルコードのセットアップ及びビルド saito@a584f9ade435:~/workdir/build_ssp3a$ ./build_ssp3a.sh username for http://www.toppers.jp/MEMBERS): <ユーザ名> password: <パスワード(非表示)> --2019-09-11 22:16:53-- https://www.toppers.jp/MEMBERS/early/third/ssp3_arm_gcc-20190902.tar.gz www.toppers.jp (www.toppers.jp) をDNSに問いあわせています... 52.194.18.5 www.toppers.jp (www.toppers.jp)|52.194.18.5|:443 に接続しています... 接続しました。 (中略) arm-none-eabi-nm -n ssp > ssp.syms arm-none-eabi-objcopy -O srec -S ssp ssp.srec ruby /home/saito/workdir/build_ssp3a/workdir/ssp3/cfg/cfg.rb --pass 3 --kernel ssp -O -I. -I/home/saito/workdir/build_ssp3a/workdir/ssp3/include -I/home/saito/workdir/build_ssp3a/workdir/ssp3/target/ct11mpcore_gcc -I/home/saito/workdir/build_ssp3a/workdir/ssp3/arch/arm_gcc/common -I/home/saito/workdir/build_ssp3a/workdir/ssp3/arch/gcc -I/home/saito/workdir/build_ssp3a/workdir/ssp3 -I/home/saito/workdir/build_ssp3a/workdir/ssp3/sample -I./gen -I/home/saito/workdir/build_ssp3a/workdir/ssp3/tecs_kernel -T /home/saito/workdir/build_ssp3a/workdir/ssp3/target/ct11mpcore_gcc/target_check.trb \ --rom-symbol ssp.syms --rom-image ssp.srec configuration check passed make[1]: ディレクトリ '/home/saito/workdir/build_ssp3a/workdir/ssp3/build' から出ます saito@a584f9ade435:~/workdir/build_ssp3a$ }}} 以上が成功すると <カレントディレクトリ>/workdir/ssp3/build/ に実行プログラムファイル(ssp)が生成されます. === 3. 実行確認(QEMUでの実行確認) {{{ # QEMU で実行ファイルを起動 saito@a584f9ade435:~/workdir/build_ssp3a$ cd workdir/ssp3/build/ saito@a584f9ade435:~/workdir/build_ssp3a/workdir/ssp3/build$ qemu-system-arm -M realview-eb-mpcore -semihosting -m 128M -nographic -kernel ssp pulseaudio: pa_context_connect() failed (省略.オーディオデバイス関連のエラーメッセージが出るがここでは気にしなくて良い) audio: Failed to create voice `lm4549.out' TOPPERS/SSP3 Kernel Release 3.A.0 for ARM CT11MPCore (Sep 11 2019, 22:17:12) Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory Toyohashi Univ. of Technology, JAPAN Copyright (C) 2004-2019 by Embedded and Real-Time Systems Laboratory Graduate School of Information Science, Nagoya Univ., JAPAN System logging task is started. Sample program starts (exinf = 0). task1 is running (001). | task1 is running (002). | task1 is running (003). | task1 is running (004). | }}} QEMUを終了するには,Ctrl-a を押してから x を入力します. {{{ # (Ctrl-a x を押す) QEMU: Terminated }}} コンテナのシェルを抜けてホストOSに戻る場合は exit を実行します. {{{ # シェルを終了する saito@a584f9ade435:~/workdir/build_ssp3a$ exit ログアウト $ }}} 再度シェルを起動する場合は ./start_shell.sh を実行します. {{{ # 再度シェルを立ち上げる $ ./start_shell.sh specified service: cli docker-toppers_cli_1 is up-to-date saito@a584f9ade435:~$ }}} == 注意事項 * Windows版のgitで core.autocrlf が true に設定されている場合,シェルスクリプトの実行に失敗することがあるようです.その場合は `git config` コマンドで `core.autocrlf` を `false` に設定してみてください.