| 1 | = Raspberry Pi 3B 向け TOPPERS/SSP カーネル = |
| 2 | |
| 3 | == これは何か |
| 4 | Raspberry Pi 3B を対象にした TOPPERS/SSPカーネル実装です.実機および QEMU での動作を確認しています.[[BR]] |
| 5 | 利用方法については [https://www.docker.com/ Docker] を用いた動作確認手順を示しますので,参考にしてください.[[BR]] |
| 6 | |
| 7 | == 動作確認に必要なもの |
| 8 | |
| 9 | * Docker : Docker上のコンテナ(仮想環境)を動かすために使います.Ubuntu cosmic(18.10) ベースのLinuxシステムをお使いの場合は手順2.のスクリプトだけを実行することもできます. |
| 10 | * Git : Dockerのスクリプトを取得するのに使います. |
| 11 | * コマンドライン環境:コマンドの実行にbashシェルを使います.Mac ならターミナルアプリ,Windowsなら MinGW など. |
| 12 | |
| 13 | == Dockerを用いた動作確認手順 |
| 14 | 以下ではMacOSのターミナルアプリで作業する際の様子を示します.他のホストOSで使用する場合もほぼ同様と思います. |
| 15 | |
| 16 | === 1. Dockerコンテナの構築およびシェルの起動 |
| 17 | {{{ |
| 18 | # (1-1) Dockerスクリプトの取得(カレントディレクトリに docker-toppers というディレクトリが作成される) |
| 19 | |
| 20 | $ git clone https://github.com/nmiri-nagoya-nsaito/docker-toppers.git |
| 21 | Cloning into 'docker-toppers'... |
| 22 | remote: Enumerating objects: 85, done. |
| 23 | remote: Total 85 (delta 0), reused 0 (delta 0), pack-reused 85 |
| 24 | Unpacking objects: 100% (85/85), done. |
| 25 | |
| 26 | # (1-2) スクリプトのディレクトリへ移動し,コンテナのシェルを起動する(詳細はスクリプト参照) |
| 27 | |
| 28 | $ cd docker-toppers |
| 29 | $ ./start_shell.sh ubuntu-cosmic |
| 30 | specified service: ubuntu-cosmic |
| 31 | Building ubuntu-cosmic |
| 32 | Step 1/16 : FROM ubuntu:cosmic |
| 33 | ---> b977ae81df17 |
| 34 | Step 2/16 : MAINTAINER Naoki Saito <saito.naoki@nmiri.city.nagoya.jp> |
| 35 | ---> Using cache |
| 36 | ---> 4d27716048ed |
| 37 | Step 3/16 : RUN apt-get update |
| 38 | ---> Using cache |
| 39 | ---> 9373f2e420a1 |
| 40 | Step 4/16 : RUN DEBIAN_FRONTEND=noninteractive apt-get upgrade -y && DEBIAN_FRONTEND=noninteractive apt-get install -y subversion git curl wget netcat && DEBIAN_FRONTEND=noninteractive apt-get install -y g++ make perl ruby python && DEBUAN_FRONTEND=noninteractive apt-get install -y sudo vim nano man |
| 41 | ---> Using cache |
| 42 | ---> 1bcd20d5e748 |
| 43 | (中略) |
| 44 | Step 16/16 : RUN chmod -R +x ./scripts && sync && ./scripts/setup_user.sh |
| 45 | ---> Using cache |
| 46 | ---> 73eb8df2cb24 |
| 47 | Successfully built 73eb8df2cb24 |
| 48 | Successfully tagged test-docker-toppers_ubuntu-cosmic:latest |
| 49 | Creating network "test-docker-toppers_default" with the default driver |
| 50 | Creating test-docker-toppers_ubuntu-cosmic_1 ... done |
| 51 | To run a command as administrator (user "root"), use "sudo <command>". |
| 52 | See "man sudo_root" for details. |
| 53 | |
| 54 | saito@20a9a0a8857c:~$ |
| 55 | }}} |
| 56 | |
| 57 | この時点で Linux コンテナ内のシェルが起動していますので,次はこの環境の中でSSPカーネルのソースコードをセットアップし,ビルドします. |
| 58 | |
| 59 | === 2. ソースコードのセットアップおよびビルド |
| 60 | |
| 61 | {{{ |
| 62 | # (2-1) 作業ディレクトリへ移動 (dockerの設定にて ~/workdir ディレクトリをホストと共有している) |
| 63 | saito@20a9a0a8857c:~/workdir$ cd workdir |
| 64 | |
| 65 | # (2-2) 本パッケージをダウンロード |
| 66 | saito@20a9a0a8857c:~/workdir$ svn co http://dev.toppers.jp/svn_user/contrib/ssp_rpi3/trunk ssp_rpi3 |
| 67 | |
| 68 | A ssp_rpi3/install.sh |
| 69 | A ssp_rpi3/target |
| 70 | A ssp_rpi3/target/rpi_arm64_gcc |
| 71 | A ssp_rpi3/target/rpi_arm64_gcc/target_sil.h |
| 72 | A ssp_rpi3/target/rpi_arm64_gcc/target_serial.cfg |
| 73 | A ssp_rpi3/target/rpi_arm64_gcc/target_timer.cfg |
| 74 | (中略) |
| 75 | A ssp_rpi3/arch/arm64_gcc/common/core_kernel.h |
| 76 | A ssp_rpi3/arch/arm64_gcc/common/core_timer.h |
| 77 | A ssp_rpi3/build_ssp.sh |
| 78 | リビジョン 384 をチェックアウトしました。 |
| 79 | |
| 80 | # (2-3) SSPカーネルコードのセットアップ及びビルド |
| 81 | # このスクリプトは$HOME/workdirが存在することを仮定. |
| 82 | # dockerを使わずにスクリプトを実行する場合は,カレントディレクトリに |
| 83 | # toppers_workdirというディレクトリが作成され,作業が継続される. |
| 84 | |
| 85 | saito@20a9a0a8857c:~/workdir$ ssp_rpi3/build_ssp.sh |
| 86 | --2019-04-16 20:03:25-- 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 |
| 87 | releases.linaro.org (releases.linaro.org) をDNSに問いあわせています... 13.228.101.204 |
| 88 | releases.linaro.org (releases.linaro.org)|13.228.101.204|:443 に接続しています... 接続しました。 |
| 89 | HTTP による接続要求を送信しました、応答を待っています... 302 Found |
| 90 | (中略) |
| 91 | aarch64-elf-gcc -O2 -Wall -g -Werror -ggdb3 -mgeneral-regs-only -fno-pic -fno-builtin -fno-omit-frame-pointer -mtune=cortex-a53 -mcpu=cortex-a53 -march=armv8-a -mlittle-endian -mstrict-align -DTOPPERS_OMIT_TECS -I. -I../include -I../arch -I../target/rpi_arm64_gcc -I../arch/arm64_gcc/bcm283x -I../arch/arm64_gcc/common -I.. -I../sample -I./gen -I../tecs_kernel -nostdlib -mcpu=cortex-a53 -Wl,-Ttext,0x00000000 -T ../target/rpi_arm64_gcc/rpi_arm64.ld -L. -o ssp \ |
| 92 | start.o sample1.o log_output.o vasyslog.o chip_serial.o banner.o serial.o syslog.o logtask.o kernel_cfg.o \ |
| 93 | -lkernel -lc -lgcc |
| 94 | aarch64-elf-nm -n ssp > ssp.syms |
| 95 | aarch64-elf-objcopy -O srec -S ssp ssp.srec |
| 96 | ruby ../cfg/cfg.rb --pass 3 --kernel ssp -O -I. -I../include -I../arch -I../target/rpi_arm64_gcc -I../arch/arm64_gcc/bcm283x -I../arch/arm64_gcc/common -I.. -I../sample -I./gen -I../tecs_kernel -T ../target/rpi_arm64_gcc/target_check.trb \ |
| 97 | --rom-symbol ssp.syms --rom-image ssp.srec |
| 98 | configuration check passed |
| 99 | saito@20a9a0a8857c:~/workdir$ |
| 100 | }}} |
| 101 | |
| 102 | 以上が成功すると <カレントディレクトリ>/ssp/build/ に実行プログラムファイル(ssp)が生成されます. |
| 103 | |
| 104 | === 3. 実行確認 |
| 105 | |
| 106 | ==== 3.1 実機での実行確認 |
| 107 | |
| 108 | |
| 109 | ==== 3.2 QEMUでの実行確認 |
| 110 | {{{ |
| 111 | # (3-1) QEMU で実行開始 |
| 112 | saito@4e396ad0381d:~/workdir$ cd ssp/build/ |
| 113 | saito@4e396ad0381d:~/workdir/ssp/build$ qemu-system-aarch64 -M raspi3 -display none -serial stdio -kernel ssp |
| 114 | |
| 115 | TOPPERS/SSP Kernel 1.3.0 for RPI_ARM64 (Apr 16 2019 , 20:05:38) |
| 116 | Copyright (C) 2010 by Meika Sugimoto |
| 117 | Copyright (C) 2010 by Naoki Saito |
| 118 | Nagoya Municipal Industrial Research Institute, JAPAN |
| 119 | |
| 120 | System logging task is started on port 1. |
| 121 | Sample program starts. |
| 122 | #act_tsk(1) |
| 123 | task1 is running (001). | |
| 124 | task1 is running (002). | |
| 125 | task1 is running (003). | |
| 126 | task1 is running (004). | |
| 127 | }}} |
| 128 | |
| 129 | QEMUを終了するには,Ctrl-c を押します. |
| 130 | |
| 131 | {{{ |
| 132 | # (Ctrl-c を押す) |
| 133 | QEMU: Terminated |
| 134 | }}} |
| 135 | |
| 136 | コンテナのシェルを抜ける場合は exit を実行します. |
| 137 | |
| 138 | {{{ |
| 139 | # シェルを終了する |
| 140 | saito@4e396ad0381d:~/workdir/ssp/build$ exit |
| 141 | ログアウト |
| 142 | $ |
| 143 | }}} |
| 144 | |
| 145 | 再度シェルを起動する場合は ./start_shell.sh を実行します. |
| 146 | |
| 147 | {{{ |
| 148 | # 再度シェルを立ち上げる(引数を忘れない) |
| 149 | $ ./start_shell.sh ubuntu-cosmic |
| 150 | specified service: ubuntu-cosmic |
| 151 | test-docker-toppers_ubuntu-cosmic_1 is up-to-date |
| 152 | saito@4e396ad0381d:~$ |
| 153 | }}} |
| 154 | |
| 155 | |
| 156 | == 注意事項 |
| 157 | * SSP-1.3.0 のパッケージに含まれるファイルの文字コードは EUC-JP でしたが,Ruby版コンフィギュレータを使用するために UTF-8 に変換しています.したがってファイルを追加,編集する場合は UTF-8 を使用してください. |
| 158 | * Windows版のgitで core.autocrlf が true に設定されている場合,シェルスクリプトの実行に失敗することがあるようです.その場合は `git config` コマンドで `core.autocrlf` を `false` に設定してみてください. |
| 159 | |
| 160 | == 謝辞 |
| 161 | 本実装に関しては以下の実装を参考にさせていただきました.[[BR]] |
| 162 | * [https://github.com/YujiToshinaga/RPi64Toppers Raspberry Pi 3の64bitモード向けFMPカーネル] |
| 163 | * [https://github.com/takeharukato/asp3-aarch64 AArch64対応 TOPPERS/ASP3 カーネル] |
| 164 | * ARMプロセッサ向けTOPPERS/ASPおよびASP3カーネル |
| 165 | カーネルコードを提供してくださっているTOPPERSプロジェクトおよびその関係者に感謝します。 |