[92] | 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受信割り込み許可・禁止レジスタに対応
|
---|