wiki:ssp_aarch64

ARM AArch64 プロセッサ向け TOPPERS/SSP カーネル

これは何か

ARM AArch64 向けの TOPPERS/SSPカーネル実装です.QEMU の Virt仮想ボードでの動作を確認しています.
利用方法については Docker を用いた動作確認手順を示しますので,参考にしてください.

動作確認に必要なもの

  • Docker : Docker上のコンテナ(仮想環境)を動かすために使います.Ubuntu xenialベースのLinuxシステムをお使いの場合は手順2.のスクリプトだけを実行することもできます.
  • Git : Dockerのスクリプトを取得するのに使います.
  • コマンドライン環境:コマンドの実行にbashシェルを使います.Mac ならターミナルアプリ,Windowsなら MinGW など.

Dockerを用いた動作確認手順

以下ではMacOSのターミナルアプリで作業する際の様子を示します.他のホストOSで使用する場合もほぼ同様と思います.

1. Dockerコンテナの構築およびシェルの起動

# Dockerスクリプトの取得(カレントディレクトリに docker-toppers というディレクトリが作成されます)
$ git clone https://github.com/nmiri-nagoya-nsaito/docker-toppers.git
Cloning into 'docker-toppers'...
remote: Counting objects: 85, done.
remote: Compressing objects: 100% (55/55), done.
remote: Total 85 (delta 36), reused 70 (delta 27), pack-reused 0
Unpacking objects: 100% (85/85), done.

# スクリプトのディレクトリへ移動し,コンテナのシェルを起動する(詳細はスクリプト参照)
$ cd docker-toppers
$ ./start_shell.sh 
Building cli
Step 1/16 : FROM ubuntu:xenial
 ---> 0ef2e08ed3fa
Step 2/16 : MAINTAINER Naoki Saito <saito.naoki@nmiri.city.nagoya.jp>
 ---> Using cache
 ---> 1bec673845d0
Step 3/16 : RUN apt-get update
 ---> Using cache
 ---> 2dd9e0f61959
(中略)
Step 16/16 : RUN chmod -R +x ./scripts     && sync     && ./scripts/setup_user.sh
 ---> Running in d9b928e37d60
Removing intermediate container d9b928e37d60
 ---> f77b5e071680
Successfully built f77b5e071680
Successfully tagged docker-toppers_cli:latest
Creating docker-toppers_cli_1 ... done
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

saito@fbd67644c60e:~$ 

この時点で Linux コンテナ内のシェルが起動していますので,次はSSPカーネルのソースコードをセットアップしてビルドします.

2. ソースコードのセットアップおよびビルド

# 作業ディレクトリへ移動(dockerの設定により ~/workdir ディレクトリをホストと共有可能)
saito@fbd67644c60e:~/workdir$ cd workdir

# 本パッケージをダウンロード
saito@fbd67644c60e:~/workdir$ svn co http://dev.toppers.jp/svn_user/contrib/ssp_aarch64/trunk ssp_aarch64

# SSPカーネルコードのセットアップ及びビルド
# このスクリプトは$HOME/workdirが存在することを仮定している.
# dockerを使わずにスクリプトを実行する場合は,カレントディレクトリに
# toppers_workdirというディレクトリが作成され,作業が継続される.
saito@fbd67644c60e:~/workdir$ ssp_aarch64/build_ssp.sh 
--2018-06-08 10:04:07--  https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/aarch64-elf/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-elf.tar.xz
releases.linaro.org (releases.linaro.org) をDNSに問いあわせています... 13.228.101.204
releases.linaro.org (releases.linaro.org)|13.228.101.204|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
(略)
gcc-linaro-7.2.1-2017.11-x86_64_aarch64-elf/lib/gcc/aarch64-elf/7.2.1/plugin/include/tree-iterator.h
gcc-linaro-7.2.1-2017.11-x86_64_aarch64-elf/lib/gcc/aarch64-elf/7.2.1/plugin/libcp1plugin.so.0.0.0
gcc-linaro-7.2.1-2017.11-x86_64_aarch64-elf/lib/libmpfr.a
ヒット:1 http://archive.ubuntu.com/ubuntu xenial InRelease
取得:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
取得:3 http://archive.ubuntu.com/ubuntu xenial-security InRelease [107 kB]
(略)
patching file sample/Makefile
Generating Makefile from ../sample/Makefile.
ruby ../cfg/cfg.rb --pass 1 --kernel ssp -I. -I../include -I../arch  -I../target/qemu_virt_gcc -I../arch -I.. -I../sample -I./gen -I../tecs_kernel --api-table ../kernel/kernel_api.def --symval-table ../kernel/kernel_sym.def --symval-table ../syssvc/syssvc_sym.def  --symval-table ../target/qemu_virt_gcc/target_sym.def --symval-table ../arch/arm64_gcc/prc_sym.def \
					-M deps/cfg1_out_c.d ../target/qemu_virt_gcc/target_kernel.cfg ../sample/sample1.cfg
[cfg.rb] Generated cfg1_out.c
aarch64-elf-gcc -c -O2 -Wall -g   -Werror -mgeneral-regs-only -ggdb3 -fno-pic -fno-builtin -mstrict-align -mtune=cortex-a53 -mcpu=cortex-a53+nofp  -DTOPPERS_OMIT_TECS    -I. -I../include -I../arch  -I../target/qemu_virt_gcc -I../arch -I.. -I../sample -I./gen -I../tecs_kernel -DALLFUNC   -I../kernel -I ../extension ../target/qemu_virt_gcc/start.S
aarch64-elf-gcc -c -MD -MP -MF deps/cfg1_out.d -O2 -Wall -g   -Werror -mgeneral-regs-only -ggdb3 -fno-pic -fno-builtin -mstrict-align -mtune=cortex-a53 -mcpu=cortex-a53+nofp  -DTOPPERS_OMIT_TECS    -I. -I../include -I../arch  -I../target/qemu_virt_gcc -I../arch -I.. -I../sample -I./gen -I../tecs_kernel -DTOPPERS_CB_TYPE_ONLY  -DALLFUNC   -I../kernel -I ../extension  cfg1_out.c
aarch64-elf-gcc -O2 -Wall -g   -Werror -mgeneral-regs-only -ggdb3 -fno-pic -fno-builtin -mstrict-align -mtune=cortex-a53 -mcpu=cortex-a53+nofp  -DTOPPERS_OMIT_TECS    -I. -I../include -I../arch  -I../target/qemu_virt_gcc -I../arch -I.. -I../sample -I./gen -I../tecs_kernel -nostdlib   -T ../target/qemu_virt_gcc/qemu_virt.ld  -o cfg1_out \
					start.o cfg1_out.o 
(略)
aarch64-elf-ranlib libkernel.a
aarch64-elf-gcc -O2 -Wall -g   -Werror -mgeneral-regs-only -ggdb3 -fno-pic -fno-builtin -mstrict-align -mtune=cortex-a53 -mcpu=cortex-a53+nofp  -DTOPPERS_OMIT_TECS    -I. -I../include -I../arch  -I../target/qemu_virt_gcc -I../arch -I.. -I../sample -I./gen -I../tecs_kernel -nostdlib   -T ../target/qemu_virt_gcc/qemu_virt.ld  -L. -o ssp \
		start.o  sample1.o log_output.o vasyslog.o       target_serial.o  banner.o serial.o syslog.o logtask.o  kernel_cfg.o  \
		-lkernel -lc -lgcc  
aarch64-elf-nm -n ssp > ssp.syms
aarch64-elf-objcopy -O srec -S ssp ssp.srec
ruby ../cfg/cfg.rb --pass 3 --kernel ssp -O -I. -I../include -I../arch  -I../target/qemu_virt_gcc -I../arch -I.. -I../sample -I./gen -I../tecs_kernel -T ../target/qemu_virt_gcc/target_check.trb \
			--rom-symbol ssp.syms --rom-image ssp.srec
configuration check passed

以上が成功すると <カレントディレクトリ>/ssp/build/ に実行プログラムファイル(ssp)が生成されます.

3. 実行確認

# QEMU で実行開始
saito@fbd67644c60e:~/workdir$ cd ssp/build
saito@fbd67644c60e:~/workdir/ssp/build$ qemu-system-aarch64 -M virt -cpu cortex-a53 -nographic -kernel ssp

TOPPERS/SSP Kernel 1.3.0  for QEMU Virt(Cortex-A53) (Jun  8 2018 , 10:05:15)
Copyright (C) 2010 by Meika Sugimoto
Copyright (C) 2010 by Naoki Saito
            Nagoya Municipal Industrial Research Institute, JAPAN

System logging task is started on port 1.
Sample program starts.
#act_tsk(1)
task1 is running (001).   |
task1 is running (002).   |
task1 is running (003).   |

QEMUを終了するには,Ctrl-a を押してから x を押します. また,コンテナのシェルを抜ける場合は exit を実行します. 再度シェルを起動する場合は ./start_sherll.sh を実行します.

QEMU: Terminated
saito@fbd67644c60e:~/workdir/ssp/build$ exit
ログアウト
$ 

注意事項

  • SSP-1.3.0 のパッケージに含まれるファイルの文字コードは EUC-JP でしたが,Ruby版コンフィギュレータを使用するために UTF-8 に変換しています.したがってファイルを追加,編集する場合は UTF-8 を使用してください.
  • Windows版のgitで core.autocrlf が true に設定されている場合,シェルスクリプトの実行に失敗することがあるようです.その場合は git config コマンドで core.autocrlffalse に設定してみてください.

謝辞

本実装に関しては AArch64対応 TOPPERS/ASP3 カーネルおよびARMプロセッサ向けTOPPERS/ASPおよびASP3カーネルの実装を参考にさせていただきました.
カーネルコードを提供してくださっているTOPPERSプロジェクトおよびその関係者に感謝します。

Last modified 4 months ago Last modified on 12/06/18 09:34:03