Ignore:
Timestamp:
Apr 17, 2019, 12:13:00 PM (5 years ago)
Author:
nmir-saito
Message:

modify svn:mimetype of files

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ssp_rpi3/trunk/target/rpi_arm64_gcc/target_user.txt

    • Property svn:mime-type set to text/plain; charset=utf-8
    r385 r386  
    11=====================================================================
    2                  RPI-ARM64ターゲット依存部 (ssp-1.3.0対応)
     2                 RPI-ARM64ターゲット依存部 (ssp-1.3.0対応)
    33                               Last Modified: '19/04/16
    44=====================================================================
    55
    6 (1) 概要
    7 
    8 RPI-ARM64ターゲット依存部は,プロセッサにBCM2837(Cortex-A53コア)を搭載した
    9 Raspberry Pi3B ボードをサポートしている.
    10 
    11 
    12 (2) カーネルの使用リソース
    13 
    14   ・RAM
    15      ã‚³ãƒ¼ãƒ‰ãŠã‚ˆã³ãƒ‡ãƒ¼ã‚¿ã‚’é
    16 ç½®ã™ã‚‹ï¼Ž
    17      ä½¿ç”¨é‡ã¯ã‚ªãƒ–ジェクト数に依存する.
    18   ・Generic Timer
    19      ã‚«ãƒ¼ãƒãƒ«å†
    20 éƒ¨ã®ãƒ†ã‚£ãƒƒã‚¯ã®ç”Ÿæˆã«ç”¨ã„る.
    21   ・UART0 (PL011)
    22      ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®å‡ºåŠ›ã«ä½¿ç”¨
    23 
    24 
    25 (3) 開発環境
    26 
    27 å®Ÿè¡Œãƒ•ã‚¡ã‚¤ãƒ«ã®æ§‹ç¯‰ã«ã¯GCC開発環境を用いた(動作確認バージョン: 7.2.1)
    28 GCC は以下のサイトからバイナリパッケージをダウンロードすることができる.
     6(1) 概要
     7
     8RPI-ARM64ターゲット依存部は,プロセッサにBCM2837(Cortex-A53コア)を搭載した
     9Raspberry Pi3B ボードをサポートしている.
     10
     11
     12(2) カーネルの使用リソース
     13
     14  ・RAM
     15     コードおよびデータを配置する.
     16     使用量はオブジェクト数に依存する.
     17  ・Generic Timer
     18     カーネル内部のティックの生成に用いる.
     19  ・UART0 (PL011)
     20     コンソールの出力に使用
     21
     22
     23(3) 開発環境
     24
     25実行ファイルの構築にはGCC開発環境を用いた(動作確認バージョン: 7.2.1)
     26GCC は以下のサイトからバイナリパッケージをダウンロードすることができる.
    2927  https://releases.linaro.org/components/toolchain/binaries/
    3028
    3129
    32 (4) デバッグ環境
    33 
    34 ãƒ‡ãƒãƒƒã‚°ç’°å¢ƒã¨ã—て,QEMUのGDBサーバ機能を利用して,GDBによるデバッグが可能.
    35 ãŸã ã—Raspberry Pi3 のエミュレーションをサポートするqemuは2.12以降を使用するå¿
    36 è¦ãŒã‚る.
    37 
    38 
    39 (5) 実行環境
    40 
    41 å®Ÿè¡Œãƒ•ã‚¡ã‚¤ãƒ«ã‚’含む,起動にå¿
    42 è¦ãªä»¥ä¸‹ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’FAT32フォーマットされた
    43 ãƒžã‚¤ã‚¯ãƒ­SDカードのルート直下にコピーし,Raspberry Pi で起動する.
     30(4) デバッグ環境
     31
     32デバッグ環境として,QEMUのGDBサーバ機能を利用して,GDBによるデバッグが可能.
     33ただしRaspberry Pi3 のエミュレーションをサポートするqemuは2.12以降を使用する必要がある.
     34
     35
     36(5) 実行環境
     37
     38実行ファイルを含む,起動に必要な以下のファイルをFAT32フォーマットされた
     39マイクロSDカードのルート直下にコピーし,Raspberry Pi で起動する.
    4440
    4541(5-1) bootcode.bin, start.elf
    46    ä»¥ä¸‹ãƒšãƒ¼ã‚¸ã‹ã‚‰ bootcode.binとstart.elfをダウンロードする.
     42   以下ページから bootcode.binとstart.elfをダウンロードする.
    4743   https://github.com/raspberrypi/firmware/tree/master/boot
    48   (上記はmasterブランチ付属のファイルであるが,別ブランチの同名ファイルを選択してもよい)
    49 
    50 (5-2) 実行ファイル
    51    å®Ÿè¡Œãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒã‚¤ãƒŠãƒªã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’使用する.
    52    ãƒã‚¤ãƒŠãƒªã‚¤ãƒ¡ãƒ¼ã‚¸ã¯ã€Œmake ssp.bin」を実行すると生成される.
    53    ãƒ•ã‚¡ã‚¤ãƒ«åã‚’ kernel.img または kernel8.img にしておくと自動的に読み込まれる.
     44  (上記はmasterブランチ付属のファイルであるが,別ブランチの同名ファイルを選択してもよい)
     45
     46(5-2) 実行ファイル
     47   実行ファイルのバイナリイメージを使用する.
     48   バイナリイメージは「make ssp.bin」を実行すると生成される.
     49   ファイル名を kernel.img または kernel8.img にしておくと自動的に読み込まれる.
    5450
    5551(5-3) config.txt
    56    èµ·å‹•è¨­å®šã‚’指定するためのテキストファイル.
    57    ã•ã—あたり,以下の3行を含むテキストファイルを作成すれば良い
     52   起動設定を指定するためのテキストファイル.
     53   さしあたり,以下の3行を含むテキストファイルを作成すれば良い
    5854      arm_control=0x200
    5955      kernel_old=1
    6056      disable_commandline_tags=1
    61    ã“れに加え,実行ファイル名を kernel.img, kernel8.img 以外でコピーした場合は
    62    ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定するための行を追加しておく.
     57   これに加え,実行ファイル名を kernel.img, kernel8.img 以外でコピーした場合は
     58   ファイルを指定するための行を追加しておく.
    6359      kernel=ssp.bin
    6460
    65   この他,config.txt のå†
    66 å®¹ã«ã¤ã„て詳しくは以下を参ç
    67 §ã®ã“と.
     61  この他,config.txt の内容について詳しくは以下を参照のこと.
    6862  https://www.raspberrypi.org/documentation/configuration/config-txt/
    6963
    70 (6) QEMUを用いた動作確認
    71 
    72 (6-1) QEMUを用いた実行確認
    73 
    74 QEMUを用いて実行ファイルを動かす場合,以下のようにコマンドを実行する.
    75 ã“こで実行ファイル名を ssp とする
    76 
    77 (実行例)
     64(6) QEMUを用いた動作確認
     65
     66(6-1) QEMUを用いた実行確認
     67
     68QEMUを用いて実行ファイルを動かす場合,以下のようにコマンドを実行する.
     69ここで実行ファイル名を ssp とする
     70
     71(実行例)
    7872$ qemu-system-aarch64 -M raspi3 -display none -serial stdio -kernel ssp
    7973
     
    8680Sample program starts.
    8781
    88 (ここで,「1」「a」とタイプする)
     82(ここで,「1」「a」とタイプする)
    8983
    9084#act_tsk(1)
    9185task1 is running (001).   |
    9286task1 is running (002).   |
    93 (以下略)
    94 
    95 
    96 (6-2) GDBによるデバッグ手順
    97 
    98 GDBを用いたデバッグを行う場合,シェルを2つ用意する.
    99 ä¸€ã¤ã¯qemuを起動しGDBサーバとして起動する.
    100 
    101 (1つ目のシェル)
     87(以下略)
     88
     89
     90(6-2) GDBによるデバッグ手順
     91
     92GDBを用いたデバッグを行う場合,シェルを2つ用意する.
     93一つはqemuを起動しGDBサーバとして起動する.
     94
     95(1つ目のシェル)
    10296$ qemu-system-aarch64 -M raspi3 -display none -serial stdio -s -S
    10397
    104 ã“れで localhost:1234 でGDBサーバが接続をå¾
    105 ã¡å—ける状æ
    106 ‹ã«ãªã‚‹ï¼Ž
    107 
    108 ã‚‚う一つのシェルでGDBを起動し,GDBサーバに接続する.
    109 
    110 (2つ目のシェル)
     98これで localhost:1234 でGDBサーバが接続を待ち受ける状態になる.
     99
     100もう一つのシェルでGDBを起動し,GDBサーバに接続する.
     101
     102(2つ目のシェル)
    111103$ aarch-elf-gdb ssp
    112104(gdb)
    113105
    114 ã“こで各種の設定,サーバへの接続,ロードを行うとステップや実行等の
    115 ãƒ‡ãƒãƒƒã‚°å‹•ä½œã‚’行うことができる.
     106ここで各種の設定,サーバへの接続,ロードを行うとステップや実行等の
     107デバッグ動作を行うことができる.
    116108
    117109(gdb) set architecture aarch64
     
    135127Continuing.
    136128
    137 'c' コマンドで実行を継続すると,GDBサーバ側の画面にシリアルメッセージが表示される.
    138 ã‚­ãƒ¼å
    139 ¥åŠ›ã‚‚サーバ側のシェル画面で行う.
    140 
    141 'c' コマンドによる継続中の実行を停止する場合はCtrl-Cで終了する.
    142 gdb を終了する場合はプロンプトで'q'コマンドを実行して終了する.
    143 
    144 
    145 (7) ターゲット依存部の実è£
    146 
    147 
    148 (7-1) ターゲット略称
    149 
    150 ã‚·ã‚¹ãƒ†ãƒ ç•¥ç§°åŠã³ã‚¿ãƒ¼ã‚²ãƒƒãƒˆç•¥ç§°ã¯ä»¥ä¸‹ã®é€šã‚Šï¼Ž
    151 
    152 ã‚·ã‚¹ãƒ†ãƒ ç•¥ç§°: rpi_arm64
    153 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆç•¥ç§°: rpi_arm64_gcc である
    154 
    155 
    156 (7-2) 割込み優å
    157 ˆåº¦ã®ç¯„囲
    158 
    159 BCM2837の割込みコントローラは優å
    160 ˆåº¦åˆ¶å¾¡ã®æ©Ÿèƒ½ã‚’持たないため
    161 ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã§æ“¬ä¼¼çš„に実è£
    162 ã—ている.そのため
    163 å‰²è¾¼ã¿å„ªå
    164 ˆåº¦ã¯ç‹¬è‡ªã«æŒ‡å®šå¯èƒ½ã§ã‚る.チップ依存部では既定値として -15 〜 -1 に定義している.
    165 
    166 å‰²è¾¼ã¿å„ªå
    167 ˆåº¦ã®æœ€é«˜å€¤(値としては最小値)をターゲット依存部で独自に定義する場合,
    168 target_kernel.h に TMIN_INTPRI をマクロ定義する.
    169 
    170 
    171 (7-3) タイムティックの定義
    172 
    173 TIC_NUMEおよびTIC_DENOの値は既定値としてコア依存部でå
    174 ±ã«1に定義している.
    175 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã§ç‹¬è‡ªã«å®šç¾©ã™ã‚‹å ´åˆã¯ target_kernel.h にマクロ定義する.
    176 
    177 (7-4) スタートアップルーチンでの初期化å†
    178 å®¹
    179 
    180 Raspberry Pi の場合,以下の状æ
    181 ‹ã§ã‚·ã‚¹ãƒ†ãƒ ãŒé–‹å§‹ã™ã‚‹ï¼Ž
    182 ãƒ»ä¾‹å¤–レベル:EL3
    183 ãƒ»ä½¿ç”¨ã‚¹ã‚¿ãƒƒã‚¯: SP_EL3 (EL3h)
    184 ãƒ»ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒ¬ã‚¸ã‚¹ã‚¿ã®Fビット及びIビットは1(IRQ,FIQ禁止)
    185 
    186 ãã®ãŸã‚ã‚¹ã‚¿ãƒ¼ãƒˆã‚¢ãƒƒãƒ—ルーチンでは,以下の処理を行なった後,sta_ker を呼び出す.
    187 ãƒ»EL3h(AArch64)からEL1h(AArch64)への移行
    188 ãƒ»ã‚¹ã‚¿ãƒƒã‚¯ãƒã‚¤ãƒ³ã‚¿åŠã³ãƒ•ãƒ¬ãƒ¼ãƒ ãƒã‚¤ãƒ³ã‚¿ã®åˆæœŸåŒ–
    189 ãƒ»ãƒ™ã‚¯ã‚¿ãƒ†ãƒ¼ãƒ–ルアドレスの設定
    190 ãƒ»bssセクションのクリア
    191 
    192 
    193 (7-5) コンソール出力
    194 
    195 ã‚³ãƒ³ã‚½ãƒ¼ãƒ«å‡ºåŠ›ã«ã¯ PrimeCell UART (PL011)を使用する.
    196 ä»¥ä¸‹ã®é€šä¿¡ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚’使用する.
    197   ・115200bps, Data 8bit, Parity none, Stop 1bit, Flow制御なし
    198 
    199 
    200 (8) 各ファイルでの設定é 
    201 ç›®(å¿
    202 è¦ã«å¿œã˜ã¦ï¼Œå®šç¾©ã‚’編集する)
     129'c' コマンドで実行を継続すると,GDBサーバ側の画面にシリアルメッセージが表示される.
     130キー入力もサーバ側のシェル画面で行う.
     131
     132'c' コマンドによる継続中の実行を停止する場合はCtrl-Cで終了する.
     133gdb を終了する場合はプロンプトで'q'コマンドを実行して終了する.
     134
     135
     136(7) ターゲット依存部の実装
     137
     138(7-1) ターゲット略称
     139
     140システム略称及びターゲット略称は以下の通り.
     141
     142システム略称: rpi_arm64
     143ターゲット略称: rpi_arm64_gcc である
     144
     145
     146(7-2) 割込み優先度の範囲
     147
     148BCM2837の割込みコントローラは優先度制御の機能を持たないため
     149ソフトウェアで擬似的に実装している.そのため
     150割込み優先度は独自に指定可能である.チップ依存部では既定値として -15 〜 -1 に定義している.
     151
     152割込み優先度の最高値(値としては最小値)をターゲット依存部で独自に定義する場合,
     153target_kernel.h に TMIN_INTPRI をマクロ定義する.
     154
     155
     156(7-3) タイムティックの定義
     157
     158TIC_NUMEおよびTIC_DENOの値は既定値としてコア依存部で共に1に定義している.
     159ターゲット依存部で独自に定義する場合は target_kernel.h にマクロ定義する.
     160
     161(7-4) スタートアップルーチンでの初期化内容
     162
     163Raspberry Pi の場合,以下の状態でシステムが開始する.
     164・例外レベル:EL3
     165・使用スタック: SP_EL3 (EL3h)
     166・ステータスレジスタのFビット及びIビットは1(IRQ,FIQ禁止)
     167
     168そのためスタートアップルーチンでは,以下の処理を行なった後,sta_ker を呼び出す.
     169・EL3h(AArch64)からEL1h(AArch64)への移行
     170・スタックポインタ及びフレームポインタの初期化
     171・ベクタテーブルアドレスの設定
     172・bssセクションのクリア
     173
     174
     175(7-5) コンソール出力
     176
     177コンソール出力には PrimeCell UART (PL011)を使用する.
     178以下の通信フォーマットを使用する.
     179  ・115200bps, Data 8bit, Parity none, Stop 1bit, Flow制御なし
     180
     181
     182(8) 各ファイルでの設定項目(必要に応じて,定義を編集する)
    203183
    204184(8-1) Makefile.target
    205185
    206 ãƒ»GCC_TARGET
    207     GCCの target triplet を定義
    208 ãƒ»COPTS
    209     Cコンパイラへのオプション
    210 ãƒ»CDEFS
    211     追加のマクロ定義
    212 ãƒ»INCLUDES
    213     インクルード指定
    214 ãƒ»LDFLAGS
    215     リンカへのオプション
    216 ãƒ»LIBS
    217     リンクするライブラリ
    218 
    219 ãƒ»TEXT_START_ADDRESS
    220     テキストセクションの開始アドレス
     186GCC_TARGET
     187    GCCの target triplet を定義
     188COPTS
     189    Cコンパイラへのオプション
     190CDEFS
     191    追加のマクロ定義
     192INCLUDES
     193    インクルード指定
     194LDFLAGS
     195    リンカへのオプション
     196LIBS
     197    リンクするライブラリ
     198
     199TEXT_START_ADDRESS
     200    テキストセクションの開始アドレス
    221201
    222202(8-2) target_config.h
    223203
    224 ãƒ»DEFAULT_ISTKSZ
    225     デフォルトの非タスクコンテキスト用のスタックサイズ
     204DEFAULT_ISTKSZ
     205    デフォルトの非タスクコンテキスト用のスタックサイズ
    226206
    227207(8-4) target_kernel.h
    228208
    229 ãƒ»TMIN_INTPRI
    230     割込み優å
    231 ˆåº¦ã®æœ€é«˜å€¤(最小値)
    232 ãƒ»TIC_NUME, TIC_DENO
    233     タイムティックの周期の分子,分母
     209・TMIN_INTPRI
     210    割込み優先度の最高値(最小値)
     211・TIC_NUME, TIC_DENO
     212    タイムティックの周期の分子,分母
    234213
    235214(8-3) target_test.h
    236215
    237 ãƒ»STACK_SIZE
    238     サンプルプログラムのタスクのスタックサイズ
    239 ãƒ»ALL_STACKSIZE
    240     å
    241 ±æœ‰ã‚¹ã‚¿ãƒƒã‚¯é ˜åŸŸã®ã‚µã‚¤ã‚º
     216・STACK_SIZE
     217    サンプルプログラムのタスクのスタックサイズ
     218・ALL_STACKSIZE
     219    共有スタック領域のサイズ
    242220
    243221(8-4) target_timer.h
    244 ãƒ»INTPRI_TIMER
    245     タイマーの割込み優å
    246 ˆåº¦
    247 ãƒ»INTATR_TIMER
    248     タイマーの割込み属性
    249 
    250 â—‹å¤‰æ›´å±¥æ­´
    251  ãƒ»2019/04/16
    252 ã€€ã€€æ–°è¦ä½œæˆ
     222・INTPRI_TIMER
     223    タイマーの割込み優先度
     224・INTATR_TIMER
     225    タイマーの割込み属性
     226
     227○変更履歴
     228 ・2019/04/16
     229  新規作成
Note: See TracChangeset for help on using the changeset viewer.