wiki:build_ssp3a

Version 2 (modified by nmir-saito, 4 years ago) ( diff )

--

TOPPERS/SSP3カーネル(Release 3.A.0)のビルドスクリプト

これは何か

早期リリースとして会員向けに公開されているTOPPERS/SSP3カーネル(Release 3.A.0)をビルドするためのシェルスクリプトです.
利用方法については Docker を用いた動作確認手順を示しますので,参考にしてください.

動作確認に必要なもの

  • 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 <saito.naoki@nmiri.city.nagoya.jp>
 ---> 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 <command>".
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 <ユーザ名>
認証領域: <http://dev.toppers.jp:80> 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.autocrlffalse に設定してみてください.
Note: See TracWiki for help on using the wiki.