source: ssp_arm_gcc/trunk/target/at91skyeye_gcc/target_user.txt@ 92

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

add separate package of SSP kernel for ARM + SkyEye(experimental)

File size: 9.8 KB
Line 
1=====================================================================
2 AT91SKYEYEターゲット依存部
3 Last Modified: 2015 May 27
4=====================================================================
5
6○概要
7
8AT91SKYEYEターゲット依存部は,オープンソースのプロセッサシミュレータで
9ある,Skyeye上の ARM7TDMI をベースとした AT91 システムをサポートしてい
10る.
11
12○SkyEye
13
14本カーネルを動作させるためには,TOPPERSプロジェクトから公開されている,
15TOPPERSカーネル向けシミュレーション環境が必要となる.
16 http://www.toppers.jp/sim.html
17
18○カーネルの使用リソース
19
20カーネルは以下のリソースを使用する.
21
22 ・RAM
23 コードとデータを配置する.
24 使用量はオブジェクト数に依存する.
25
26 ・TC1
27 カーネル内部のティックの生成に用いる.
28
29 ・USART0
30 コンソールの出力に使用.
31
32
33○実行環境
34
35動作確認を行った実行環境は,Widnows 7(SP1) 上の Cygwin である.
36
37○デバッグ環境
38
39デバッグ環境としては,skyeyeのサポートする方法を用いることができる.
40arm-none-eabi-gdb (バージョン7.1) によるデバッグの動作確認を行った.
41
42「TOPPERSカーネル向けシミュレーション環境」の skyeye.exe を用いた
43GDBデバッグを行う場合,gdb-7.1 以前のバージョンを使用する必要がある.
44たとえば,GDBのソースコードを以下からダウンロードしてビルドする.
45 http://ftp.gnu.org/gnu/gdb/
46
47gdb-7.1a.tar.gz をダウンロードした場合の手順の概略を以下に示す.
48$ tar xvf gdb-7.1a.tar.gz
49$ cd gdb-7.1
50$ mkdir build
51$ cd build
52$ ../configure --target=arm-none-eabi --prefix=/home/saito/tool/gdb-7.1 --enable-interwork --enable-multilib
53$ make all
54$ make install
55
56○コンパイラ
57
58動作確認した GCC は,以下のサイトからWindows版のバイナリをダウンロードして使用し
59た以下のバージョンである.
60
61GNU Tools for ARM Embedded Processors
62 https://launchpad.net/gcc-arm-embedded
63 GCC ARM Embedded 4.9-2015-q1-update
64
65上記コンパイラをインストールする際には,空白が含まれるディレクトリにイ
66ンストールしないこと(インストーラが作成するインストールディレクトリ自
67体に空白が含まれるため注意すること).
68
69○カーネル終了時の処理
70
71ext_ker が呼び出されカーネル終了時には,at91skyeye.h にある
72at91skyeye_exit() が実行される.既定では,特に処理は記述されていない.
73独自の処理処理を追加したい場合は,at91skyeye_exit() の内容を書き換えること.
74
75○ gcovによるカバレッジ取得(未確認)
76
77gcovによるカバレッジを取得したい場合には,Makefileで ENABLE_GCOV を以
78下の値のいずれかに定義すること.
79
80 full : 全体取得
81 part : 一部取得
82 only_kernel_full : 全体取得(カーネルコードのみ)
83 only_kernel_part : 一部取得(カーネルコードのみ)
84
85full と only_kernel_full は,プログラム実行全体のカバレッジを取得する.
86only_kernel_full はカーネルコードのみのカバレッジを取得する.これらの
87カバレッジ結果は,ext_ker()を呼び出してカーネル終了することにより,
88*.gcda に出力される.
89
90part と only_kernel_part 指定した区間(時間)のカバレッジを取得する.
91only_kernel_part はカーネルコードのみのカバレッジを取得する.区間(時
92間)を指定やカバレッジの出力のために以下の関数を提供する.
93
94void gcov_init(void);
95 GCOV初期化関数.呼び出した時点以降のカバレッジを取得する.
96
97void gcov_pause(void);
98 GCOV中断関数.カバレッジの取得を中断する.
99
100void gcov_resume(void);
101GCOV再開関数.カバレッジの取得を再開する.
102
103void gcov_dump(void);
104 GCOV出力関数.カバレッジを.gcda に出力する.
105
106カーネル実行後にカーネルがあるディレクトリで以下のコマンドを実行すると,
107カバレッジの結果が xxx.c.gcov に出力される.
108
109 $arm-none-eabi-gcov.exe *.gcda
110
111カバレッジの結果をhtml化するlcovを使うことも可能である.
112
113 http://ltp.sourceforge.net/coverage/lcov.php
114
115動作確認を行ったバージョンは 1.9 であるが,日本語を出力するためと,
116Windwosネイティブアプリである Sourcery G++ を Cygwin環境上で使用してい
117る場合には,以下のパッチが必要である.
118
119--------------------------------------------------------------------------
120--- lcov-1.9_org/bin/genhtml 2010-08-06 20:05:17.000000000 +0900
121+++ lcov-1.9/bin/genhtml 2010-11-24 11:29:58.075739700 +0900
122@@ -4007,10 +4007,10 @@
123 write_html($_[0], <<END_OF_HTML)
124 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
125
126- <html lang="en">
127+ <html lang="ja">
128
129 <head>
130- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
131+ <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
132 <title>$_[3]</title>
133 <link rel="stylesheet" type="text/css" href="$_[1]gcov.css">
134 </head>
135@@ -4069,11 +4069,11 @@
136 write_html($_[0], <<END_OF_HTML)
137 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
138
139- <html lang="en">
140+ <html lang="ja">
141
142 <head>
143 <title>$_[3]</title>
144- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
145+ <meta http-equiv="Content-Type" content="text/html; charset=ECU-JP">
146 <link rel="stylesheet" type="text/css" href="$_[1]gcov.css">
147 </head>
148
149@@ -5578,10 +5578,10 @@
150 $result = <<END_OF_HTML
151 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
152
153-<html lang="en">
154+<html lang="ja">
155
156 <head>
157- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
158+ <meta http-equiv="Content-Type" content="text/html; charset=ECU-JP">
159 <title>\@pagetitle\@</title>
160 <link rel="stylesheet" type="text/css" href="\@basedir\@gcov.css">
161 </head>
162diff -urN lcov-1.9_org/bin/geninfo lcov-1.9/bin/geninfo
163--- lcov-1.9_org/bin/geninfo 2010-08-06 20:05:17.000000000 +0900
164+++ lcov-1.9/bin/geninfo 2010-11-24 11:31:26.481094900 +0900
165@@ -862,7 +862,7 @@
166
167 # Execute gcov command and suppress standard output
168 $gcov_error = system_no_output(1, $gcov_tool, $da_filename,
169- "-o", $object_dir, @gcov_options);
170+ @gcov_options);
171
172 if ($da_renamed)
173 {
174@@ -929,7 +929,7 @@
175 my $num;
176
177 ($source, $object) = read_gcov_header($gcov_file);
178-
179+ $source =~ s/(.*)\r$/$1/;
180 if (defined($source))
181 {
182 $source = solve_relative_path($base_dir, $source);
183--------------------------------------------------------------------------
184
185カバレッジの取得後,以下のコマンドを実行すると,coverage_html 以下にカ
186バレッジ結果のhtmlが生成される.
187
188 $make lcov
189
190○トレースログのファイル出力
191
192トレースログをファイルへ出力するための文字出力関数を用意している.
193
194 void target_fput_log_file(char c);
195
196この関数を trace_dump の引数とすることにより,トレースログは,
197kernel_trace.log というファイルに出力される.
198
199○各種設定の変更
200
201幾つかのパラメータは変更可能になっている.設定ファイル毎に設定可能項目
202は次のようになっている.
203
204●Makefile.target の設定項目
205
206・GCC_TARGET
207 GCCの suffix を定義
208
209・INCLUDES
210 インクルード指定
211
212・COPTS
213 Cコンパイラへのオプション
214
215・LDFLAGS
216 リンカへのオプション
217
218●target_config.h の設定項目
219
220・DEFAULT_ISTKSZ
221 ディフォルトの非タスクコンテキスト用のスタックサイズ
222
223・SIL_DLY_TIM1/2
224 微少時間待ちのための定義
225
226
227○変更履歴
2282015/05/27
229・SSP-1.3.0へ対応
230・LaunchPad GCCへの対応
231
232-----(ここから下はASP版の記録)
233
2342013/02/05
235・1.8.0対応のため,char_t の箇所を他の型に変更.
236
2372012/11/17
238・2012/11/09の修正に間違いがあったため修正.
239
2402012/11/09
241・有効な割込み番号を(1〜18)に修正.
242
2432011/11/22
244・ARMCC対応に伴う変更
245 ・at91skyeye.ld(変更)
246 ・ベクターのセクション名を".vector"から"vector"に変更.
247 ・target_asm.inc(追加)
248 ・target_cfg1_out.h(変更)
249 ・core_cfg1_out.hのインクルード方法を""から<>に変更して,コンパイラの
250 引数で指定された順でインクルードファイルをサーチするよう変更.
251 ・target_config.h(変更)
252 ・core_config.hのインクルード方法を""から<>に変更して,コンパイラの
253 引数で指定された順でインクルードファイルをサーチするよう変更.
254 ・target_sil.h(変更)
255 ・core_sil.hのインクルード方法を""から<>に変更して,コンパイラの
256 引数で指定された順でインクルードファイルをサーチするよう変更.
257 ・target_support.S(変更)
258 ・ARMCCとファイルを共有するため,ディレクティブをマクロに書き換え.
259・CPSRの操作にcxsfを付加
260 ・start.S
261
2622011/05/09
263・ASP 1.7.0 への追従.
264 ・オフセットファイルの生成方法をコンフィギュレータを用いる方法に変更.
265
2662011/03/10
267・ASP 1.7.0 への追従.
268
2692011/03/04
270・トレースログをファイルに出力する機能を追加.
271
2722011/01/31
273・SkyEyeのバージョンがサポートしているバージョンと異なった場合に,
274 SkyEyeのバージョンと,カーネルがサポートしているバージョンを表示する
275 ように変更.
276
2772010/11/30
278・全ての割込みをマスクしてARM依存の終了処理を呼び出すように変更.
279
2802010/11/28
281・software_init_hook が定義されていない場合に呼び出さないように
282 一旦volatile指定のあるfpに代入するように変更
283
2842010/11/24
285・lcov 1.9 への対応.
286
2872010/11/01
288・4種類のカバレッジ取得方法をサポート.
289
2902010/09/10
291・GCOVを有効時にマクロ TOPPERS_ENABLE_GCOV を有効にするよう変更.
292・CPU例外を未定義命令に変更.
293
2942010/07/26
295・アセンブラファイル中の分岐命令を AAPCS推奨に変更.
296
2972010/07/10
298・ASP 1.5.0 への追従.
299
3002010/06/23
301・ena_int()で,割込みマスクの状態を考慮せずにハードウェアを更新してい
302 た問題を修正.
303
3042010/05/19
305・割込み受け付け時に,システムの割込み優先度マスクを受け付けた割込みの
306 割込み優先度に設定していなかった問題を修正.
307
3082010/04/21
309・SkyEye DeviceManager Extension 2.1.0 に対応.
310・起動時にSkyEyeのバージョンを確認するように変更.
311
3122009/12/19
313・起動時に software_init_hook() を呼び出すように変更.
314
3152009/11/30
316・リンカスクリプトを generic-hosted.ld ベースから,
317 armulator-ram-hosted.ld ベースに変更.
318 コード・データサイズを大きくすると,標準関数やgcovが正しく動作しない
319 問題を解決.同時に skyeye.conf のメモリの設定をリンカスクリプトの内
320 容と統一.
321
3222009/11/13
323・スタックを kernel_cfg.c で確保するように変更.
324
3252009/10/18
326・TLV 1.1rc対応.
327 ・サイクルカウンタの有効化.
328 ・TRACE_GET_TIM()を定義.
329
3302009/08/02
331・lcovのサポート.
332
3332009/08/01
334・newlibのサポート.サポートに伴い,SkyEyeはTOPPERSプロジェクトから公
335 開している SkyEye -V1.2 DeviceManager Extension 2.0.3 以降 が必要と
336 なる.
337・gcovのサポート.
338
3392009/07/09
340・target_timer_initialize()でタイマ周期にTIMER_CLOCKの値を反映するよう
341 に修正.
342
3432009/05/18
344・共通部 1.4.0 追従.
345・コンパイラを Sourcery G++ Lite に変更.
346
3472009/01/29
348・サイクルカウンタのサポート
349 ・トレースログ機能で用いる
350 ・使用するためには,TOPPERSで拡張済みのskyeyeが必要となる
351
3522008/11/4
353・Skyeye-1.2.6に対応
354 ・Skyeye-1.2.6で追加されたUART受信割り込み許可・禁止レジスタに対応
Note: See TracBrowser for help on using the repository browser.