= ARM AArch64 プロセッサ向け TOPPERS/SSP カーネル = == これは何か ARM AArch64 向けの TOPPERS/SSPカーネル実装です.QEMU の Virt仮想ボードでの動作を確認しています.[[BR]] 利用方法については [https://www.docker.com/ Docker] を用いた動作確認手順を示しますので,参考にしてください.[[BR]] == 動作確認に必要なもの * 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 ---> 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 ". 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.autocrlf` を `false` に設定してみてください. == 謝辞 本実装に関しては [https://github.com/takeharukato/asp3-aarch64 AArch64対応 TOPPERS/ASP3 カーネル]およびARMプロセッサ向けTOPPERS/ASPおよびASP3カーネルの実装を参考にさせていただきました.[[BR]] カーネルコードを提供してくださっているTOPPERSプロジェクトおよびその関係者に感謝します。