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

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

modify svn:mimetype of files

  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/plain; charset=utf-8
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 ・Generic Timer
18 カーネル内部のティックの生成に用いる.
19 ・UART0 (PL011)
20 コンソールの出力に使用
21
22
23(3) 開発環境
24
25実行ファイルの構築にはGCC開発環境を用いた(動作確認バージョン: 7.2.1)
26GCC は以下のサイトからバイナリパッケージをダウンロードすることができる.
27 https://releases.linaro.org/components/toolchain/binaries/
28
29
30(4) デバッグ環境
31
32デバッグ環境として,QEMUのGDBサーバ機能を利用して,GDBによるデバッグが可能.
33ただしRaspberry Pi3 のエミュレーションをサポートするqemuは2.12以降を使用する必要がある.
34
35
36(5) 実行環境
37
38実行ファイルを含む,起動に必要な以下のファイルをFAT32フォーマットされた
39マイクロSDカードのルート直下にコピーし,Raspberry Pi で起動する.
40
41(5-1) bootcode.bin, start.elf
42 以下ページから bootcode.binとstart.elfをダウンロードする.
43 https://github.com/raspberrypi/firmware/tree/master/boot
44 (上記はmasterブランチ付属のファイルであるが,別ブランチの同名ファイルを選択してもよい)
45
46(5-2) 実行ファイル
47 実行ファイルのバイナリイメージを使用する.
48 バイナリイメージは「make ssp.bin」を実行すると生成される.
49 ファイル名を kernel.img または kernel8.img にしておくと自動的に読み込まれる.
50
51(5-3) config.txt
52 起動設定を指定するためのテキストファイル.
53 さしあたり,以下の3行を含むテキストファイルを作成すれば良い
54 arm_control=0x200
55 kernel_old=1
56 disable_commandline_tags=1
57 これに加え,実行ファイル名を kernel.img, kernel8.img 以外でコピーした場合は
58 ファイルを指定するための行を追加しておく.
59 kernel=ssp.bin
60
61 この他,config.txt の内容について詳しくは以下を参照のこと.
62 https://www.raspberrypi.org/documentation/configuration/config-txt/
63
64(6) QEMUを用いた動作確認
65
66(6-1) QEMUを用いた実行確認
67
68QEMUを用いて実行ファイルを動かす場合,以下のようにコマンドを実行する.
69ここで実行ファイル名を ssp とする
70
71(実行例)
72$ qemu-system-aarch64 -M raspi3 -display none -serial stdio -kernel ssp
73
74TOPPERS/SSP Kernel 1.3.0 for RPi ARM64 (May 29 2018 , 15:51:44)
75Copyright (C) 2010 by Meika Sugimoto
76Copyright (C) 2010 by Naoki Saito
77 Nagoya Municipal Industrial Research Institute, JAPAN
78
79System logging task is started on port 1.
80Sample program starts.
81
82(ここで,「1」「a」とタイプする)
83
84#act_tsk(1)
85task1 is running (001). |
86task1 is running (002). |
87(以下略)
88
89
90(6-2) GDBによるデバッグ手順
91
92GDBを用いたデバッグを行う場合,シェルを2つ用意する.
93一つはqemuを起動しGDBサーバとして起動する.
94
95(1つ目のシェル)
96$ qemu-system-aarch64 -M raspi3 -display none -serial stdio -s -S
97
98これで localhost:1234 でGDBサーバが接続を待ち受ける状態になる.
99
100もう一つのシェルでGDBを起動し,GDBサーバに接続する.
101
102(2つ目のシェル)
103$ aarch-elf-gdb ssp
104(gdb)
105
106ここで各種の設定,サーバへの接続,ロードを行うとステップや実行等の
107デバッグ動作を行うことができる.
108
109(gdb) set architecture aarch64
110The target architecture is assumed to be aarch64
111(gdb) set debug aarch64
112(gdb) target extended-remote localhost:1234
113Remote debugging using localhost:1234
1140x0000000000000000 in ?? ()
115(gdb) load
116Loading section .note.gnu.build-id, size 0x24 lma 0x0
117Loading section .text, size 0x5040 lma 0x40000000
118Loading section .rodata, size 0x650 lma 0x40005040
119Loading section .rodata.str1.8, size 0x5b8 lma 0x40005690
120Loading section .data, size 0x8 lma 0x40005c48
121Start address 0x40000000, load size 23668
122Transfer rate: 11556 KB/sec, 1577 bytes/write.
123(gdb) s
124aarch64: prologue analysis gave up addr=0x0x40000000 opcode=0xd50343df
12558 ldr x0, =vectors
126(gdb) c
127Continuing.
128
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) 各ファイルでの設定項目(必要に応じて,定義を編集する)
183
184(8-1) Makefile.target
185
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 テキストセクションの開始アドレス
201
202(8-2) target_config.h
203
204・DEFAULT_ISTKSZ
205 デフォルトの非タスクコンテキスト用のスタックサイズ
206
207(8-4) target_kernel.h
208
209・TMIN_INTPRI
210 割込み優先度の最高値(最小値)
211・TIC_NUME, TIC_DENO
212 タイムティックの周期の分子,分母
213
214(8-3) target_test.h
215
216・STACK_SIZE
217 サンプルプログラムのタスクのスタックサイズ
218・ALL_STACKSIZE
219 共有スタック領域のサイズ
220
221(8-4) target_timer.h
222・INTPRI_TIMER
223 タイマーの割込み優先度
224・INTATR_TIMER
225 タイマーの割込み属性
226
227○変更履歴
228 ・2019/04/16
229  新規作成
Note: See TracBrowser for help on using the repository browser.