source: anotherchoice/tags/jsp-1.4.4-full-UTF8/doc/nios2.txt@ 26

Last change on this file since 26 was 26, checked in by ykominami, 12 years ago

initial

File size: 17.4 KB
Line 
1
2 = TOPPERS/JSPカーネル ユーザズマニュアル =
3 (Nios2 ターゲット依存部)
4
5 (Release 1.4.2 対応、最終更新: 10-Feb-2006)
6 (NiosII Development Kit 5.1 対応)
7
8------------------------------------------------------------------------
9 TOPPERS/JSP Kernel
10 Toyohashi Open Platform for Embedded Real-Time Systems/
11 Just Standard Profile Kernel
12
13 Copyright (C) 2004 by Embedded and Real-Time Systems Laboratory
14 Graduate School of Information Science, Nagoya Univ., JAPAN
15
16 上記著作権者
17は,以下の (1)〜(4) の条件か,Free Software Foundation
18 によってå…
19¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
20 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
21 を改変したものを含む.以下同じ)を使用・複製・改変・再é…
22å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
23 利用と呼ぶ)することを無償で許諾する.
24 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
25 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
26 スコード中に含まれていること.
27 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
28 用できる形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
31 者
32マニュアルなど)に,上記の著作権表示,この利用条件および下記
33 の無保証規定を掲載すること.
34 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
35 用できない形で再é…
36å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
37 と.
38 (a) 再é…
39å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
40マニュアルなど)に,上記の著
41 作権表示,この利用条件および下記の無保証規定を掲載すること.
42 (b) 再é…
43å¸ƒã®å½¢æ…
44‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
45 報告すること.
46 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
47 害からも,上記著作権者
48およびTOPPERSプロジェクトをå…
49è²¬ã™ã‚‹ã“と.
50
51 本ソフトウェアは,無保証で提供されているものである.上記著作権者
52お
53 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
54 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
55 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
56
57 @(#) $Id: nios2.txt,v 1.6 2006/02/10 08:36:10 honda Exp $
58------------------------------------------------------------------------
59
60
611. Nios2 ターゲット依存部の概要
62
631.1 ターゲットシステム
64
65Nios2 プロセッサのターゲットシステムとしては、Nios2 がサポートしてる
66FPGA を搭載したシステムをサポートしている。ターゲットシステムとしては、
67以下のボードをサポートしている。これらのボードを使用するする際には、ボ
68ードに付属するデザイン例の Standard もしくは Full Featured を FPGA に
69実装
70する必
71要がある.
72
73 ・NiosII Development Board Cyclone Edition
74 ・NiosII Development Board Stratix Edition
75 ・NiosII Development Board Stratix Professional Edition
76 ・NiosII Development Board StratixII Edition
77
781.2 開発環境と実行環境
79
80開発環境には,NiosII Development Kitに含まれている GCC などの GNU開発
81環境を用い,オブジェクトファイルフォーマットは ELF を標準とする.
82
83カーネルのコンパイル及びダウンロードはEclipseを用いずコマンドライン
84(CygwinもしくはNiosII SDK Shell)から行う.
85
861.3 サポートする機能の概要
87
88Nios2 依存の機能として,性能評価用システム時刻参ç…
89§æ©Ÿèƒ½ï¼ˆvxget_tim)を
90サポートしている.割込みの禁止・許可(dis_int, ena_int)をサポートする.
91また,割込みマスクの変更・参ç…
92§(chg_ixx,get_ixx)はサポートしていない.
93
941.4 他のターゲットへのポーティング
95
96JSPカーネルを動作させるには、64Kbyte程度のメモリと、標準のTIMERと
97JTAG-UART(もしくはUART)がそれぞれ1つ必
98要である。実際のコード変更箇所
99については後述する。
100
101
1022.Nios2 プロセッサ依存部の機能
103
104この節では,カーネルおよびシステムサービスの機能の中で,Nios2 依存の部
105分について解説する.
106
1072.1 データ型
108
109signed int型および unsigned int型のサイズは 32ビットである.
110
1112.2 割込み管理機能と割込みハンドラ
112
113DEF_INH で指定する割込みハンドラ番号(inhno)は,SOPC Builderでに指定
114した割込み番号を表し,そのデータ型(INHNO)は unsigned int型に定義され
115ている.DEF_INH で,割込み優å…
116ˆåº¦ã¨ã—て有効でない値や,実際の割込み優å…
117ˆ
118度とは異なる番号を指定した場合の動作は保証されない.
119
1202.4 スタートアップモジュール
121
122Nios2 依存のスタートアップモジュール(start.S)では,次の初期化処理を
123行う.
124
125(A) 命令キャッシュの初期化
126
127命令キャッシュを実装
128している場合,initiで命令キャッシュを初期化する.
129
130(B) データキャッシュの初期化
131
132データキャッシュを実装
133している場合,initiで命令キャッシュを初期化する.
134
135(C) スタックポインタの初期化とグローバルポインターの設定
136
137スタックポインタ(sp)STACKTOPに設定し,次にグローバルポインター(gp)を
138_gpで初期化する
139
140(D) hardware_init_hook の呼出し
141
142hardware_init_hook が 0 でない場合には,hardware_init_hook を呼び出す.
143hardware_init_hook は,カーネルが起動される前に行う必
144要があるターゲッ
145ト依存の初期化を行うために用意している.hardware_init_hook がどこでも
146定義されていない場合,リンカでこのシンボルを 0 に定義する(リンカスク
147リプト内
148に記述あり).
149
150(E) bssセクションの初期化
151
152bssセクションをゼロクリアする.なお,dataセクションについては,RAMの使
153用量を減らす目的で,ROM化に対応した初期化は行っていない.
154
155(F) software_init_hook の呼出し
156
157software_init_hook が 0 でない場合には,software_init_hook を呼び出す.
158software_init_hook は,カーネルが起動される前に行う必
159要があるソフトウェ
160ア環境(å…
161·ä½“的には,ライブラリ)依存の初期化を行うために用意している.
162software_init_hook がどこでも定義されていない場合,リンカでこのシンボ
163ルを 0 に定義する(リンカスクリプト内
164に記述あり).
165
166(G) カーネルの起動
167
168kernel_start へ分岐し,カーネルを起動する.kernel_start からリターンし
169てくることは想定していない.
170
1712.5 性能評価用システム時刻参ç…
172§æ©Ÿèƒ½
173
174Nios2 依存部では,性能評価用システム時刻参ç…
175§æ©Ÿèƒ½ï¼ˆvxget_tim)をサポー
176トしている.性能評価用システム時刻の精度はタイマに供給するクロックによ
177って決まる.なお,SYSUTIM型は UD型(64ビットの符号無し整数型)に定義し
178ている.
179
1802.6 シリアルインタフェースドライバ
181
182Nios2 依存部のシリアルインタフェースドライバは,UART もしくは
183JTAG-UART をサポートしている.UART と JTAG-UART の選択はシステム依存部
184の sys_defs.h で USE_JTAG_UART を定義すればよい。
185
186
1873. カーネルの構築方法 & 実行方法
188
1893.1 構築方法
190カーネルの構築にはGUN開発環境の他に,make や perl が必
191要となる.そのた
192め,Windows では Cygwin 環境もしくは NiosII SDK Shell を使用する必
193要が
194ある。NiosII SDK Shell は JSPカーネルの構築に必
195要な perlスクリプトで使
196用するライブラリが用意されていため、標準の構築方法では構築できない。以
197下では、Cygwin 環境と NiosII SDK Shell に分けて説明する。
198
1993.1.1 Cygwin環境
200
201NiosII Development Kit に含まれているコンパイラ等のGNUツールを Cygwin
202から呼び出せるようパスを通す。
203
204 $nios2_install$/bin/nios2-gnutools/H-i686-pc-cygwin/bin/
205 ($nios2_install$ は NiosII Development Kit のインストールディレクトリ)
206
207後は、通常の構築手順(user.txt の7.3からの方法)に従いカーネルを構築す
208る。
209
2103.1.2 NiosII SDK Shell 環境
211
212NiosIIサポートページ(http://www.ertl.jp/~honda/niosII/)から、以下の
213ファイルをダウンロードする。
214
215 ・コンパイル済みのコンフィギュレータ(cfg.exe)とチェッカー(chk.exe)
216 ・getopt.plライブラリ(perlライブラリ)
217
218カーネルソースコードを展開した後、ディレクトリ ./cfg にコンパイル済み
219のコンフィギュレータ(cfg.exe)とチェッカー(chk.exe)をコピーする。
220
221getopt.pl は、NiosII SDK Shell 環境で perl ライブラリの参ç…
222§å…
223ˆã«ã‚³ãƒ”ー
224する。
225 例 : $quartus_install\sopc_builder\bin\perl_lib
226 ($quartus_install はQuartusIIのインストールå…
227ˆ)
228
229カーネルソースコードを展開したディレクトリに直下にある perlスクリプト
230./configure を開き、get_object関数内
231を以下のように書き換える
232
233 オリジナル
234 sub get_objext {
235 local(@uname);
236
237 use POSIX;
238 @uname = do uname();
239 if ($uname[0] =~ /^cygwin/i) {
240 return("exe");
241 }
242 else {
243 return("");
244 }
245 }
246
247 書き換え後
248 sub get_objext {
249 return("");
250 }
251
252以上の作業の後、通常の構築方法に従いカーネルを構築する。以下はカーネル
253ソースコードを展開したディレクトリでの作業の例である。
254
255 ディレクトリを作成
256 $makdir obj
257 $cd obj
258
259 コンフィギュレーションスクリプトを実行
260 $../configure -C nios2 -S altera_dev_board
261
262 カーネルを構築
263 $make depned
264 $make
265
266カーネル構築後、オブジェクトファイル jsp.elf が出来ていれば構築は成功
267である。
268
269
2703.2 実行方法
271
272Cygwin もしくは NiosII SDK Shell のコンソールを開き、gdbserver を実行
273する。
274
275 $nios2-gdb-server --cable=USB-Blaster --tcpport=1234 -r
276
277JTAG-UART を使用する場合は、nios2-terminalも実行する。
278
279 $nios2-terminal.exe --cable=USB-Blaster --instance=0
280
281カーネルを構築したディレクトリで gdb を実行してカーネルをダウンロード
282して実行する。
283
284 $nios2-elf-gdb jsp.elf
285 (gdb)target remote localhost:1234
286 (gdb)load
287 (gdb)continue
288
289
2904. 他のターゲットボードへのポーティング
291
2924.1 ディレクトリ構成
293
294通常のターゲットの場合は,./config 以下で
295
296 (プロセッサ)/(ターゲットボード1)
297 /(ターゲットボード2)
298
299という構成でディレクトリが作成されており,(プロセッサ)はプロセッサコ
300アやプロセッサパッケージいわゆるICにパッケージされたものを示し,プロセッ
301サ依存部と呼ぶ.(ターゲットボード)はそのICを搭載したボード依存の機能
302についてのコードを置いている場所でターゲット依存部と呼ぶ.一方
303Nios2 は,システム構成を自由に変更できるため,このように明確な切り分
304けはできない.そこで,JSPカーネルを動作させるための必
305要最小限の構成を
306プロセッサ依存部として(プロセッサ)に置く.プロセッサ依存部としての,
307JSPカーネルを動作させるための最小構成を以下に示す.
308
309 ・プロセッサ
310 ・メモリ(64kbyte程度)
311 ・TIMER
312 ・UART もしくは JTAG UART
313
314UARTとJTAG UARTは排他的に使用可能であり、ディフォルトではJTAG-UARTを使
315用するようにしている。UART を使用する場合は、sys_defs.h で
316USE_JTAG_UART を未定義にすること.これ以外の機能のコードはターゲット依
317存部として,(ターゲットボード)以下のディレクトリにé…
318ç½®ã™ã‚‹ï¼Ž
319
320é…
321å¸ƒãƒ‘ッケージに含まれているターゲット依存部を以下に示す.
322
323 ・./altera_dev_board
324 NiosII Development Board用
325
326
3274.2 システムコンフィギュレーション
328
329 新たなシステムでJSPカーネルを動作させる場合は,上記の NiosII
330 Development Board 用のターゲット依存部のファイルを、対象とするシス
331 テム構成にあわせて書き換えればよい.システムに合わせて編集する必
332要
333 がある項
334目を以下に示す.
335
336 ・./sys_defs.h
337 STACKTOP : スタック初期アドレス
338 TIMER_CLOCK : タイマークロック
339 TIC_NUME : タイムティック周期の分子
340 TIC_DENO : タイムティック周期の分母
341 TIM_BASE : TIMERのベースアドレス
342 UART_BASE : UARTベースアドレス
343 TIM_INTLVL : TIMERの割込み番号
344 UART_INTLVL : UARTの割込み番号
345 NIOS2_ICACHE_SIZE : 命令キャッシュサイズ
346 NIOS2_DCACHE_SIZE : データキャッシュサイズ
347 NIOS2_ICACHE_LINE_SIZE : 命令キャッシュラインサイズ
348 NIOS2_DCACHE_LINE_SIZE : データキャッシュラインサイズ
349
350 ・./Makefile.config
351 COPTS : コンパイルオプション
352 LIBS : ライブラリ指定
353 LDFLAGS : リンカオプション
354 TEXT_START_ADDRESS : TEXTセクションのスタートアドレス
355 DATA_START_ADDRESS : DATAセクションのスタートアドレス
356
357 Nios2 のコンパイラオプションとしては以下のものがある。
358 -mno-hw-mul : 乗算器なし
359 -mno-hw-div : 除算器なし
360 -mhw-mul : 乗算器あり
361 -mhw-div : 除算器あり
362
363 ・./nios2elf.l
364 NiosII IDC(Eclipse)でサンプルプログラムを構築すると生成される
365 リンクスクリプト
366
367 xxx_syslib/Debug/system_description/generated.x
368
369 に以下の行を追加して使用する。
370
371 PROVIDE(_hardware_init_hook = 0);
372 PROVIDE(_software_init_hook = 0);
373 PROVIDE(software_term_hook = 0);
374
375
376 例外のエントリコードは,.exceptionにé…
377ç½®ã™ã‚‹ã‚ˆã†ã«æ›¸ã‹ã‚Œã¦ã„ã‚‹
378 ため,リンカスクリプトでは,このセクションを正しくプロセッサの
379 例外エントリにé…
380ç½®ã™ã‚‹å¿…
381要がある.
382
383 .exceptions :
384 {
385 . = ALIGN(0x20);
386 *(.irq)
387 KEEP (*(.exceptions));
388 } > sdram
389
390
3915.その他
392
3935.1 ディレクトリ・ファイル構成
394
395Nios2 ターゲット依存部の各ファイルの概要は次の通り.
396
397 config/nios2/
398 Makefile.config Makefile の Microblaze依存定義
399 cpu_defs.h プロセッサ依存部のアプリケーション用定義
400 cpu_config.h プロセッサ依存部の構成定義
401 cpu_config.c プロセッサ依存部の関数
402 cpu_support.S プロセッサ依存部のサブルーチン
403 cpu_context.h コンテキスト操作
404 makeoffset.c offset.h 生成サポートプログラム
405 cpu_insn.h 低レベルのプロセッサ操作ルーチン
406 start.S スタートアップモジュール
407 cpu_rename.def カーネルの内
408部識別名のリネーム定義
409 cpu_rename.h カーネルの内
410部識別名のリネーム
411 cpu_unrename.h カーネルの内
412部識別名のリネーム解除
413 nios2.h Nios2 の定義
414 nios2.c Nios2 用コード
415 hw_serial.h UART/JATG-UARTドライバ
416 hw_serial.cfg UART/JATG-UARTドライバのコンフィギュレーションファイル
417 hw_timer.h タイマ操作ルーチン
418 tool_defs.h 開発環境依存部のアプリケーション用定義(GNU開発環境用)
419 tool_config.h 開発環境依存部の構成定義(GNU開発環境用)
420
421 config/nios2/altera_dev_board
422 Makefile.config Makefile の MIREF 依存定義
423 nios3elf.l リンカスクリプト
424 sys_defs.h システム依存部のアプリケーション用定義
425 sys_config.h システム依存部の構成定義
426 sys_config.c システム依存部の関数
427 sys_support.S システム依存部のサブルーチン
428 sys_rename.def カーネルの内
429部識別名のリネーム定義
430 sys_rename.h カーネルの内
431部識別名のリネーム
432 sys_unrename.h カーネルの内
433部識別名のリネーム解除
434
435
4365.2 サポート
437
438バグ等を発見した場合は toppers-users の ML に報告もしくは,Nios2 依存
439部の開発者
440の以下のメールアドレスに連絡して頂きたい
441
442 honda@ertl.jp
443
444また,以下のページに関連情
445報を掲載している。
446
447 http://www.ertl.jp/~honda/nios2
448
449
450以上
Note: See TracBrowser for help on using the repository browser.