Changes between Initial Version and Version 1 of ssp_rpi3


Ignore:
Timestamp:
Apr 17, 2019, 8:58:56 AM (5 years ago)
Author:
nmir-saito
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ssp_rpi3

    v1 v1  
     1= Raspberry Pi 3B 向け TOPPERS/SSP カーネル =
     2
     3== これは何か
     4Raspberry 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
     21Cloning into 'docker-toppers'...
     22remote: Enumerating objects: 85, done.
     23remote: Total 85 (delta 0), reused 0 (delta 0), pack-reused 85
     24Unpacking objects: 100% (85/85), done.
     25
     26# (1-2) スクリプトのディレクトリへ移動し,コンテナのシェルを起動する(詳細はスクリプト参照)
     27
     28$ cd docker-toppers
     29$ ./start_shell.sh ubuntu-cosmic
     30specified service: ubuntu-cosmic
     31Building ubuntu-cosmic
     32Step 1/16 : FROM ubuntu:cosmic
     33 ---> b977ae81df17
     34Step 2/16 : MAINTAINER Naoki Saito <saito.naoki@nmiri.city.nagoya.jp>
     35 ---> Using cache
     36 ---> 4d27716048ed
     37Step 3/16 : RUN apt-get update
     38 ---> Using cache
     39 ---> 9373f2e420a1
     40Step 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(中略)
     44Step 16/16 : RUN chmod -R +x ./scripts     && sync     && ./scripts/setup_user.sh
     45 ---> Using cache
     46 ---> 73eb8df2cb24
     47Successfully built 73eb8df2cb24
     48Successfully tagged test-docker-toppers_ubuntu-cosmic:latest
     49Creating network "test-docker-toppers_default" with the default driver
     50Creating test-docker-toppers_ubuntu-cosmic_1 ... done
     51To run a command as administrator (user "root"), use "sudo <command>".
     52See "man sudo_root" for details.
     53
     54saito@20a9a0a8857c:~$
     55}}}
     56
     57この時点で Linux コンテナ内のシェルが起動していますので,次はこの環境の中でSSPカーネルのソースコードをセットアップし,ビルドします.
     58
     59=== 2. ソースコードのセットアップおよびビルド
     60
     61{{{
     62# (2-1) 作業ディレクトリへ移動 (dockerの設定にて ~/workdir ディレクトリをホストと共有している)
     63saito@20a9a0a8857c:~/workdir$ cd workdir
     64
     65# (2-2) 本パッケージをダウンロード
     66saito@20a9a0a8857c:~/workdir$ svn co http://dev.toppers.jp/svn_user/contrib/ssp_rpi3/trunk ssp_rpi3
     67
     68A    ssp_rpi3/install.sh
     69A    ssp_rpi3/target
     70A    ssp_rpi3/target/rpi_arm64_gcc
     71A    ssp_rpi3/target/rpi_arm64_gcc/target_sil.h
     72A    ssp_rpi3/target/rpi_arm64_gcc/target_serial.cfg
     73A    ssp_rpi3/target/rpi_arm64_gcc/target_timer.cfg
     74(中略)
     75A    ssp_rpi3/arch/arm64_gcc/common/core_kernel.h
     76A    ssp_rpi3/arch/arm64_gcc/common/core_timer.h
     77A    ssp_rpi3/build_ssp.sh
     78リビジョン 384 をチェックアウトしました。
     79
     80# (2-3) SSPカーネルコードのセットアップ及びビルド
     81# このスクリプトは$HOME/workdirが存在することを仮定.
     82# dockerを使わずにスクリプトを実行する場合は,カレントディレクトリに
     83# toppers_workdirというディレクトリが作成され,作業が継続される.
     84
     85saito@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
     87releases.linaro.org (releases.linaro.org) をDNSに問いあわせています... 13.228.101.204
     88releases.linaro.org (releases.linaro.org)|13.228.101.204|:443 に接続しています... 接続しました。
     89HTTP による接続要求を送信しました、応答を待っています... 302 Found
     90(中略)
     91aarch64-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 
     94aarch64-elf-nm -n ssp > ssp.syms
     95aarch64-elf-objcopy -O srec -S ssp ssp.srec
     96ruby ../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
     98configuration check passed
     99saito@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 で実行開始
     112saito@4e396ad0381d:~/workdir$ cd ssp/build/
     113saito@4e396ad0381d:~/workdir/ssp/build$ qemu-system-aarch64 -M raspi3 -display none -serial stdio -kernel ssp
     114
     115TOPPERS/SSP Kernel 1.3.0  for RPI_ARM64 (Apr 16 2019 , 20:05:38)
     116Copyright (C) 2010 by Meika Sugimoto
     117Copyright (C) 2010 by Naoki Saito
     118            Nagoya Municipal Industrial Research Institute, JAPAN
     119
     120System logging task is started on port 1.
     121Sample program starts.
     122#act_tsk(1)
     123task1 is running (001).   |
     124task1 is running (002).   |
     125task1 is running (003).   |
     126task1 is running (004).   |
     127}}}
     128
     129QEMUを終了するには,Ctrl-c を押します.
     130
     131{{{
     132# (Ctrl-c を押す)
     133QEMU: Terminated
     134}}}
     135
     136コンテナのシェルを抜ける場合は exit を実行します.
     137
     138{{{
     139# シェルを終了する
     140saito@4e396ad0381d:~/workdir/ssp/build$ exit
     141ログアウト
     142$
     143}}}
     144
     145再度シェルを起動する場合は ./start_shell.sh を実行します.
     146
     147{{{
     148# 再度シェルを立ち上げる(引数を忘れない)
     149$ ./start_shell.sh ubuntu-cosmic
     150specified service: ubuntu-cosmic
     151test-docker-toppers_ubuntu-cosmic_1 is up-to-date
     152saito@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プロジェクトおよびその関係者に感謝します。