source: ssp_rpi3/trunk/target/rpi_arm64_gcc/target_user.txt@ 385

Last change on this file since 385 was 385, checked in by nmir-saito, 5 years ago

fix typo and installation script

  • Property svn:keywords set to Id
File size: 7.7 KB
Line 
1=====================================================================
2 RPI-ARM64ターゲット依存部 (ssp-1.3.0対応)
3 Last Modified: '19/04/16
4=====================================================================
5
6(1) 概要
7
8RPI-ARM64ターゲット依存部は,プロセッサにBCM2837(Cortex-A53コア)を搭載した
9Raspberry 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)
28GCC は以下のサイトからバイナリパッケージをダウンロードすることができる.
29 https://releases.linaro.org/components/toolchain/binaries/
30
31
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 で起動する.
44
45(5-1) bootcode.bin, start.elf
46 以下ページから bootcode.binとstart.elfをダウンロードする.
47 https://github.com/raspberrypi/firmware/tree/master/boot
48 (上記はmasterブランチ付属のファイルであるが,別ブランチの同名ファイルを選択してもよい)
49
50(5-2) 実行ファイル
51 実行ファイルのバイナリイメージを使用する.
52 バイナリイメージは「make ssp.bin」を実行すると生成される.
53 ファイル名を kernel.img または kernel8.img にしておくと自動的に読み込まれる.
54
55(5-3) config.txt
56 起動設定を指定するためのテキストファイル.
57 さしあたり,以下の3行を含むテキストファイルを作成すれば良い
58 arm_control=0x200
59 kernel_old=1
60 disable_commandline_tags=1
61 これに加え,実行ファイル名を kernel.img, kernel8.img 以外でコピーした場合は
62 ファイルを指定するための行を追加しておく.
63 kernel=ssp.bin
64
65 この他,config.txt の内
66容について詳しくは以下を参ç…
67§ã®ã“と.
68 https://www.raspberrypi.org/documentation/configuration/config-txt/
69
70(6) QEMUを用いた動作確認
71
72(6-1) QEMUを用いた実行確認
73
74QEMUを用いて実行ファイルを動かす場合,以下のようにコマンドを実行する.
75ここで実行ファイル名を ssp とする
76
77(実行例)
78$ qemu-system-aarch64 -M raspi3 -display none -serial stdio -kernel ssp
79
80TOPPERS/SSP Kernel 1.3.0 for RPi ARM64 (May 29 2018 , 15:51:44)
81Copyright (C) 2010 by Meika Sugimoto
82Copyright (C) 2010 by Naoki Saito
83 Nagoya Municipal Industrial Research Institute, JAPAN
84
85System logging task is started on port 1.
86Sample program starts.
87
88(ここで,「1」「a」とタイプする)
89
90#act_tsk(1)
91task1 is running (001). |
92task1 is running (002). |
93(以下略)
94
95
96(6-2) GDBによるデバッグ手順
97
98GDBを用いたデバッグを行う場合,シェルを2つ用意する.
99一つはqemuを起動しGDBサーバとして起動する.
100
101(1つ目のシェル)
102$ qemu-system-aarch64 -M raspi3 -display none -serial stdio -s -S
103
104これで localhost:1234 でGDBサーバが接続を待
105ち受ける状æ…
106‹ã«ãªã‚‹ï¼Ž
107
108もう一つのシェルでGDBを起動し,GDBサーバに接続する.
109
110(2つ目のシェル)
111$ aarch-elf-gdb ssp
112(gdb)
113
114ここで各種の設定,サーバへの接続,ロードを行うとステップや実行等の
115デバッグ動作を行うことができる.
116
117(gdb) set architecture aarch64
118The target architecture is assumed to be aarch64
119(gdb) set debug aarch64
120(gdb) target extended-remote localhost:1234
121Remote debugging using localhost:1234
1220x0000000000000000 in ?? ()
123(gdb) load
124Loading section .note.gnu.build-id, size 0x24 lma 0x0
125Loading section .text, size 0x5040 lma 0x40000000
126Loading section .rodata, size 0x650 lma 0x40005040
127Loading section .rodata.str1.8, size 0x5b8 lma 0x40005690
128Loading section .data, size 0x8 lma 0x40005c48
129Start address 0x40000000, load size 23668
130Transfer rate: 11556 KB/sec, 1577 bytes/write.
131(gdb) s
132aarch64: prologue analysis gave up addr=0x0x40000000 opcode=0xd50343df
13358 ldr x0, =vectors
134(gdb) c
135Continuing.
136
137'c' コマンドで実行を継続すると,GDBサーバ側の画面にシリアルメッセージが表示される.
138キーå…
139¥åŠ›ã‚‚サーバ側のシェル画面で行う.
140
141'c' コマンドによる継続中の実行を停止する場合はCtrl-Cで終了する.
142gdb を終了する場合はプロンプトで'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
159BCM2837の割込みコントローラは優å…
160ˆåº¦åˆ¶å¾¡ã®æ©Ÿèƒ½ã‚’持たないため
161ソフトウェアで擬似的に実装
162している.そのため
163割込み優å…
164ˆåº¦ã¯ç‹¬è‡ªã«æŒ‡å®šå¯èƒ½ã§ã‚る.チップ依存部では既定値として -15 〜 -1 に定義している.
165
166割込み優å…
167ˆåº¦ã®æœ€é«˜å€¤(値としては最小値)をターゲット依存部で独自に定義する場合,
168target_kernel.h に TMIN_INTPRI をマクロ定義する.
169
170
171(7-3) タイムティックの定義
172
173TIC_NUMEおよびTIC_DENOの値は既定値としてコア依存部でå…
174±ã«1に定義している.
175ターゲット依存部で独自に定義する場合は target_kernel.h にマクロ定義する.
176
177(7-4) スタートアップルーチンでの初期化内
178容
179
180Raspberry 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要に応じて,定義を編集する)
203
204(8-1) Makefile.target
205
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 テキストセクションの開始アドレス
221
222(8-2) target_config.h
223
224・DEFAULT_ISTKSZ
225 デフォルトの非タスクコンテキスト用のスタックサイズ
226
227(8-4) target_kernel.h
228
229・TMIN_INTPRI
230 割込み優å…
231ˆåº¦ã®æœ€é«˜å€¤(最小値)
232・TIC_NUME, TIC_DENO
233 タイムティックの周期の分子,分母
234
235(8-3) target_test.h
236
237・STACK_SIZE
238 サンプルプログラムのタスクのスタックサイズ
239・ALL_STACKSIZE
240 å…
241±æœ‰ã‚¹ã‚¿ãƒƒã‚¯é ˜åŸŸã®ã‚µã‚¤ã‚º
242
243(8-4) target_timer.h
244・INTPRI_TIMER
245 タイマーの割込み優å…
246ˆåº¦
247・INTATR_TIMER
248 タイマーの割込み属性
249
250○変更履歴
251 ・2019/04/16
252  新規作成
Note: See TracBrowser for help on using the repository browser.