Changeset 386 for ssp_rpi3/trunk/target/rpi_arm64_gcc/target_user.txt
- Timestamp:
- Apr 17, 2019, 12:13:00 PM (5 years ago)
- 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 1 1 ===================================================================== 2 RPI-ARM64 ã¿ã¼ã²ããä¾åé¨ (ssp-1.3.0対å¿ï¼2 RPI-ARM64ターゲット依存部 (ssp-1.3.0対応) 3 3 Last Modified: '19/04/16 4 4 ===================================================================== 5 5 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 8 RPI-ARM64ターゲット依存部は,プロセッサにBCM2837(Cortex-A53コア)を搭載した 9 Raspberry 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) 26 GCC は以下のサイトからバイナリパッケージをダウンロードすることができる. 29 27 https://releases.linaro.org/components/toolchain/binaries/ 30 28 31 29 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 で起動する. 44 40 45 41 (5-1) bootcode.bin, start.elf 46 以ä¸ãã¼ã¸ãã bootcode.binã¨start.elfããã¦ã³ãã¼ãããï¼42 以下ページから bootcode.binとstart.elfをダウンロードする. 47 43 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 にしておくと自動的に読み込まれる. 54 50 55 51 (5-3) config.txt 56 èµ·åè¨å®ãæå®ããããã®ããã¹ããã¡ã¤ã«ï¼57 ãããããï¼ä»¥ä¸ã®3è¡ãå«ãããã¹ããã¡ã¤ã«ãä½æããã°è¯ã52 起動設定を指定するためのテキストファイル. 53 さしあたり,以下の3行を含むテキストファイルを作成すれば良い 58 54 arm_control=0x200 59 55 kernel_old=1 60 56 disable_commandline_tags=1 61 ããã«å ãï¼å®è¡ãã¡ã¤ã«åã kernel.img, kernel8.img 以å¤ã§ã³ãã¼ããå ´åã¯62 ãã¡ã¤ã«ãæå®ããããã®è¡ã追å ãã¦ããï¼57 これに加え,実行ファイル名を kernel.img, kernel8.img 以外でコピーした場合は 58 ファイルを指定するための行を追加しておく. 63 59 kernel=ssp.bin 64 60 65 ãã®ä»ï¼config.txt ã®å 66 容ã«ã¤ãã¦è©³ããã¯ä»¥ä¸ãåç 67 §ã®ãã¨ï¼ 61 この他,config.txt の内容について詳しくは以下を参照のこと. 68 62 https://www.raspberrypi.org/documentation/configuration/config-txt/ 69 63 70 (6) QEMU ãç¨ããåä½ç¢ºèª71 72 (6-1) QEMU ãç¨ããå®è¡ç¢ºèª73 74 QEMU ãç¨ãã¦å®è¡ãã¡ã¤ã«ãåããå ´åï¼ä»¥ä¸ã®ããã«ã³ãã³ããå®è¡ããï¼75 ããã§å®è¡ãã¡ã¤ã«åã ssp ã¨ãã 76 77 ( å®è¡ä¾)64 (6) QEMUを用いた動作確認 65 66 (6-1) QEMUを用いた実行確認 67 68 QEMUを用いて実行ファイルを動かす場合,以下のようにコマンドを実行する. 69 ここで実行ファイル名を ssp とする 70 71 (実行例) 78 72 $ qemu-system-aarch64 -M raspi3 -display none -serial stdio -kernel ssp 79 73 … … 86 80 Sample program starts. 87 81 88 ( ããã§ï¼ã1ããaãã¨ã¿ã¤ããã)82 (ここで,「1」「a」とタイプする) 89 83 90 84 #act_tsk(1) 91 85 task1 is running (001). | 92 86 task1 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 92 GDBを用いたデバッグを行う場合,シェルを2つ用意する. 93 一つはqemuを起動しGDBサーバとして起動する. 94 95 (1つ目のシェル) 102 96 $ qemu-system-aarch64 -M raspi3 -display none -serial stdio -s -S 103 97 104 ãã㧠localhost:1234 ã§GDBãµã¼ããæ¥ç¶ãå¾ 105 ã¡åããç¶æ 106 ã«ãªãï¼ 107 108 ããä¸ã¤ã®ã·ã§ã«ã§GDBãèµ·åãï¼GDBãµã¼ãã«æ¥ç¶ããï¼ 109 110 (2ã¤ç®ã®ã·ã§ã«) 98 これで localhost:1234 でGDBサーバが接続を待ち受ける状態になる. 99 100 もう一つのシェルでGDBを起動し,GDBサーバに接続する. 101 102 (2つ目のシェル) 111 103 $ aarch-elf-gdb ssp 112 104 (gdb) 113 105 114 ããã§å種ã®è¨å®ï¼ãµã¼ãã¸ã®æ¥ç¶ï¼ãã¼ããè¡ãã¨ã¹ããããå®è¡çã® 115 ãããã°åä½ãè¡ããã¨ãã§ããï¼ 106 ここで各種の設定,サーバへの接続,ロードを行うとステップや実行等の 107 デバッグ動作を行うことができる. 116 108 117 109 (gdb) set architecture aarch64 … … 135 127 Continuing. 136 128 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で終了する. 133 gdb を終了する場合はプロンプトで'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 148 BCM2837の割込みコントローラは優先度制御の機能を持たないため 149 ソフトウェアで擬似的に実装している.そのため 150 割込み優先度は独自に指定可能である.チップ依存部では既定値として -15 〜 -1 に定義している. 151 152 割込み優先度の最高値(値としては最小値)をターゲット依存部で独自に定義する場合, 153 target_kernel.h に TMIN_INTPRI をマクロ定義する. 154 155 156 (7-3) タイムティックの定義 157 158 TIC_NUMEおよびTIC_DENOの値は既定値としてコア依存部で共に1に定義している. 159 ターゲット依存部で独自に定義する場合は target_kernel.h にマクロ定義する. 160 161 (7-4) スタートアップルーチンでの初期化内容 162 163 Raspberry 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) 各ファイルでの設定項目(必要に応じて,定義を編集する) 203 183 204 184 (8-1) Makefile.target 205 185 206 ã»GCC_TARGET207 GCC ã® target triplet ãå®ç¾©208 ã»COPTS209 C ã³ã³ãã¤ã©ã¸ã®ãªãã·ã§ã³210 ã»CDEFS211 追å ã®ãã¯ãå®ç¾©212 ã»INCLUDES213 ã¤ã³ã¯ã«ã¼ãæå®214 ã»LDFLAGS215 ãªã³ã«ã¸ã®ãªãã·ã§ã³216 ã»LIBS217 ãªã³ã¯ããã©ã¤ãã©ãª218 219 ã»TEXT_START_ADDRESS220 ããã¹ãã»ã¯ã·ã§ã³ã®éå§ã¢ãã¬ã¹186 ・GCC_TARGET 187 GCCの target triplet を定義 188 ・COPTS 189 Cコンパイラへのオプション 190 ・CDEFS 191 追加のマクロ定義 192 ・INCLUDES 193 インクルード指定 194 ・LDFLAGS 195 リンカへのオプション 196 ・LIBS 197 リンクするライブラリ 198 199 ・TEXT_START_ADDRESS 200 テキストセクションの開始アドレス 221 201 222 202 (8-2) target_config.h 223 203 224 ã»DEFAULT_ISTKSZ225 ããã©ã«ãã®éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ãµã¤ãº204 ・DEFAULT_ISTKSZ 205 デフォルトの非タスクコンテキスト用のスタックサイズ 226 206 227 207 (8-4) target_kernel.h 228 208 229 ã»TMIN_INTPRI 230 å²è¾¼ã¿åªå 231 度ã®æé«å¤(æå°å¤) 232 ã»TIC_NUME, TIC_DENO 233 ã¿ã¤ã ãã£ãã¯ã®å¨æã®ååï¼åæ¯ 209 ・TMIN_INTPRI 210 割込み優先度の最高値(最小値) 211 ・TIC_NUME, TIC_DENO 212 タイムティックの周期の分子,分母 234 213 235 214 (8-3) target_test.h 236 215 237 ã»STACK_SIZE 238 ãµã³ãã«ããã°ã©ã ã®ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº 239 ã»ALL_STACKSIZE 240 å 241 ±æã¹ã¿ãã¯é åã®ãµã¤ãº 216 ・STACK_SIZE 217 サンプルプログラムのタスクのスタックサイズ 218 ・ALL_STACKSIZE 219 共有スタック領域のサイズ 242 220 243 221 (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 新規作成 -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.