1 | =====================================================================
|
---|
2 | AT91SKYEYEターゲット依存部
|
---|
3 | Last Modified: 2015 May 27
|
---|
4 | =====================================================================
|
---|
5 |
|
---|
6 | ○概要
|
---|
7 |
|
---|
8 | AT91SKYEYEターゲット依存部は,オープンソースのプロセッサシミュレータで
|
---|
9 | ある,Skyeye上の ARM7TDMI をベースとした AT91 システムをサポートしてい
|
---|
10 | る.
|
---|
11 |
|
---|
12 | ○SkyEye
|
---|
13 |
|
---|
14 | 本カーネルを動作させるためには,TOPPERSプロジェクトから公開されている,
|
---|
15 | TOPPERSカーネル向けシミュレーション環境が必要となる.
|
---|
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のサポートする方法を用いることができる.
|
---|
40 | arm-none-eabi-gdb (バージョン7.1) によるデバッグの動作確認を行った.
|
---|
41 |
|
---|
42 | 「TOPPERSカーネル向けシミュレーション環境」の skyeye.exe を用いた
|
---|
43 | GDBデバッグを行う場合,gdb-7.1 以前のバージョンを使用する必要がある.
|
---|
44 | たとえば,GDBのソースコードを以下からダウンロードしてビルドする.
|
---|
45 | http://ftp.gnu.org/gnu/gdb/
|
---|
46 |
|
---|
47 | gdb-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 |
|
---|
61 | GNU 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 |
|
---|
71 | ext_ker が呼び出されカーネル終了時には,at91skyeye.h にある
|
---|
72 | at91skyeye_exit() が実行される.既定では,特に処理は記述されていない.
|
---|
73 | 独自の処理処理を追加したい場合は,at91skyeye_exit() の内容を書き換えること.
|
---|
74 |
|
---|
75 | ○ gcovによるカバレッジ取得(未確認)
|
---|
76 |
|
---|
77 | gcovによるカバレッジを取得したい場合には,Makefileで ENABLE_GCOV を以
|
---|
78 | 下の値のいずれかに定義すること.
|
---|
79 |
|
---|
80 | full : 全体取得
|
---|
81 | part : 一部取得
|
---|
82 | only_kernel_full : 全体取得(カーネルコードのみ)
|
---|
83 | only_kernel_part : 一部取得(カーネルコードのみ)
|
---|
84 |
|
---|
85 | full と only_kernel_full は,プログラム実行全体のカバレッジを取得する.
|
---|
86 | only_kernel_full はカーネルコードのみのカバレッジを取得する.これらの
|
---|
87 | カバレッジ結果は,ext_ker()を呼び出してカーネル終了することにより,
|
---|
88 | *.gcda に出力される.
|
---|
89 |
|
---|
90 | part と only_kernel_part 指定した区間(時間)のカバレッジを取得する.
|
---|
91 | only_kernel_part はカーネルコードのみのカバレッジを取得する.区間(時
|
---|
92 | 間)を指定やカバレッジの出力のために以下の関数を提供する.
|
---|
93 |
|
---|
94 | void gcov_init(void);
|
---|
95 | GCOV初期化関数.呼び出した時点以降のカバレッジを取得する.
|
---|
96 |
|
---|
97 | void gcov_pause(void);
|
---|
98 | GCOV中断関数.カバレッジの取得を中断する.
|
---|
99 |
|
---|
100 | void gcov_resume(void);
|
---|
101 | GCOV再開関数.カバレッジの取得を再開する.
|
---|
102 |
|
---|
103 | void 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 であるが,日本語を出力するためと,
|
---|
116 | Windwosネイティブアプリである 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>
|
---|
162 | diff -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 の引数とすることにより,トレースログは,
|
---|
197 | kernel_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 | ○変更履歴
|
---|
228 | 2015/05/27
|
---|
229 | ・SSP-1.3.0へ対応
|
---|
230 | ・LaunchPad GCCへの対応
|
---|
231 |
|
---|
232 | -----(ここから下はASP版の記録)
|
---|
233 |
|
---|
234 | 2013/02/05
|
---|
235 | ・1.8.0対応のため,char_t の箇所を他の型に変更.
|
---|
236 |
|
---|
237 | 2012/11/17
|
---|
238 | ・2012/11/09の修正に間違いがあったため修正.
|
---|
239 |
|
---|
240 | 2012/11/09
|
---|
241 | ・有効な割込み番号を(1〜18)に修正.
|
---|
242 |
|
---|
243 | 2011/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 |
|
---|
262 | 2011/05/09
|
---|
263 | ・ASP 1.7.0 への追従.
|
---|
264 | ・オフセットファイルの生成方法をコンフィギュレータを用いる方法に変更.
|
---|
265 |
|
---|
266 | 2011/03/10
|
---|
267 | ・ASP 1.7.0 への追従.
|
---|
268 |
|
---|
269 | 2011/03/04
|
---|
270 | ・トレースログをファイルに出力する機能を追加.
|
---|
271 |
|
---|
272 | 2011/01/31
|
---|
273 | ・SkyEyeのバージョンがサポートしているバージョンと異なった場合に,
|
---|
274 | SkyEyeのバージョンと,カーネルがサポートしているバージョンを表示する
|
---|
275 | ように変更.
|
---|
276 |
|
---|
277 | 2010/11/30
|
---|
278 | ・全ての割込みをマスクしてARM依存の終了処理を呼び出すように変更.
|
---|
279 |
|
---|
280 | 2010/11/28
|
---|
281 | ・software_init_hook が定義されていない場合に呼び出さないように
|
---|
282 | 一旦volatile指定のあるfpに代入するように変更
|
---|
283 |
|
---|
284 | 2010/11/24
|
---|
285 | ・lcov 1.9 への対応.
|
---|
286 |
|
---|
287 | 2010/11/01
|
---|
288 | ・4種類のカバレッジ取得方法をサポート.
|
---|
289 |
|
---|
290 | 2010/09/10
|
---|
291 | ・GCOVを有効時にマクロ TOPPERS_ENABLE_GCOV を有効にするよう変更.
|
---|
292 | ・CPU例外を未定義命令に変更.
|
---|
293 |
|
---|
294 | 2010/07/26
|
---|
295 | ・アセンブラファイル中の分岐命令を AAPCS推奨に変更.
|
---|
296 |
|
---|
297 | 2010/07/10
|
---|
298 | ・ASP 1.5.0 への追従.
|
---|
299 |
|
---|
300 | 2010/06/23
|
---|
301 | ・ena_int()で,割込みマスクの状態を考慮せずにハードウェアを更新してい
|
---|
302 | た問題を修正.
|
---|
303 |
|
---|
304 | 2010/05/19
|
---|
305 | ・割込み受け付け時に,システムの割込み優先度マスクを受け付けた割込みの
|
---|
306 | 割込み優先度に設定していなかった問題を修正.
|
---|
307 |
|
---|
308 | 2010/04/21
|
---|
309 | ・SkyEye DeviceManager Extension 2.1.0 に対応.
|
---|
310 | ・起動時にSkyEyeのバージョンを確認するように変更.
|
---|
311 |
|
---|
312 | 2009/12/19
|
---|
313 | ・起動時に software_init_hook() を呼び出すように変更.
|
---|
314 |
|
---|
315 | 2009/11/30
|
---|
316 | ・リンカスクリプトを generic-hosted.ld ベースから,
|
---|
317 | armulator-ram-hosted.ld ベースに変更.
|
---|
318 | コード・データサイズを大きくすると,標準関数やgcovが正しく動作しない
|
---|
319 | 問題を解決.同時に skyeye.conf のメモリの設定をリンカスクリプトの内
|
---|
320 | 容と統一.
|
---|
321 |
|
---|
322 | 2009/11/13
|
---|
323 | ・スタックを kernel_cfg.c で確保するように変更.
|
---|
324 |
|
---|
325 | 2009/10/18
|
---|
326 | ・TLV 1.1rc対応.
|
---|
327 | ・サイクルカウンタの有効化.
|
---|
328 | ・TRACE_GET_TIM()を定義.
|
---|
329 |
|
---|
330 | 2009/08/02
|
---|
331 | ・lcovのサポート.
|
---|
332 |
|
---|
333 | 2009/08/01
|
---|
334 | ・newlibのサポート.サポートに伴い,SkyEyeはTOPPERSプロジェクトから公
|
---|
335 | 開している SkyEye -V1.2 DeviceManager Extension 2.0.3 以降 が必要と
|
---|
336 | なる.
|
---|
337 | ・gcovのサポート.
|
---|
338 |
|
---|
339 | 2009/07/09
|
---|
340 | ・target_timer_initialize()でタイマ周期にTIMER_CLOCKの値を反映するよう
|
---|
341 | に修正.
|
---|
342 |
|
---|
343 | 2009/05/18
|
---|
344 | ・共通部 1.4.0 追従.
|
---|
345 | ・コンパイラを Sourcery G++ Lite に変更.
|
---|
346 |
|
---|
347 | 2009/01/29
|
---|
348 | ・サイクルカウンタのサポート
|
---|
349 | ・トレースログ機能で用いる
|
---|
350 | ・使用するためには,TOPPERSで拡張済みのskyeyeが必要となる
|
---|
351 |
|
---|
352 | 2008/11/4
|
---|
353 | ・Skyeye-1.2.6に対応
|
---|
354 | ・Skyeye-1.2.6で追加されたUART受信割り込み許可・禁止レジスタに対応
|
---|