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

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

initial

File size: 17.1 KB
Line 
1
2 = TOPPERS/JSPカーネル ユーザズマニュアル =
3 (M68040 ターゲット依存部)
4
5 (Release 1.4.1対応,最終更新: 6-Oct-2004)
6
7------------------------------------------------------------------------
8 TOPPERS/JSP Kernel
9 Toyohashi Open Platform for Embedded Real-Time Systems/
10 Just Standard Profile Kernel
11
12 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
13 Toyohashi Univ. of Technology, JAPAN
14
15 上記著作権者
16は,以下の (1)〜(4) の条件か,Free Software Foundation
17 によってå…
18¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
19 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
20 を改変したものを含む.以下同じ)を使用・複製・改変・再é…
21å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
22 利用と呼ぶ)することを無償で許諾する.
23 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
24 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
25 スコード中に含まれていること.
26 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
27 用できる形で再é…
28å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
29å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
30 者
31マニュアルなど)に,上記の著作権表示,この利用条件および下記
32 の無保証規定を掲載すること.
33 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
34 用できない形で再é…
35å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
36 と.
37 (a) 再é…
38å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
39マニュアルなど)に,上記の著
40 作権表示,この利用条件および下記の無保証規定を掲載すること.
41 (b) 再é…
42å¸ƒã®å½¢æ…
43‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
44 報告すること.
45 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
46 害からも,上記著作権者
47およびTOPPERSプロジェクトをå…
48è²¬ã™ã‚‹ã“と.
49
50 本ソフトウェアは,無保証で提供されているものである.上記著作権者
51お
52 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
53 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
54 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
55
56 @(#) $Id: m68k.txt,v 1.13 2004/10/06 06:51:51 honda Exp $
57------------------------------------------------------------------------
58
59
601.M68040 ターゲット依存部の概要
61
621.1 ターゲットシステム
63
64M68040プロセッサのターゲットシステムとしては,(株)電産製の DVE-68K/40
65CPUボード(CPU: MC68LC040)のみをサポートしている.
66
671.2 開発環境と実行環境
68
69開発環境には,GCCなどのGNU開発環境を用い,オブジェクトファイルフォーマッ
70トはELFを標準とする.
71
72実行環境として,ROMモニタを用いる方法とGDBスタブを用いる方法をサポート
73している.GDBスタブを用いる場合には,Makefile中で,DBGENVにGDB_STUBを
74定義する(デフォルト).ROMモニタを用いる場合には,DBGENVを定義しない.
75
761.3 サポートする機能の概要
77
78M68040依存の機能として,割込みマスクの変更・参ç…
79§ï¼ˆchg_ixx,get_ixx)を
80サポートしている.また,DVE-68K/40 CPUボード依存の機能として,性能評価
81用システム時刻参ç…
82§æ©Ÿèƒ½ï¼ˆvxget_tim)をサポートしている.割込みの禁止と
83許可(dis_int,ena_int)はサポートしていない.
84
851.4 他のターゲットへのポーティング
86
87現バージョンでは,FPUを持たないMC68LC040のみをサポートしている.FPUを
88用いない場合には,FPU内
89蔵のM68040にも適用可能なはずである.FPUを活用し
90たい場合には,ディスパッチャでFPUレジスタを保存/復帰する必
91要があるな
92ど,若干の改造が必
93要である.
94
95他のM68K系列のプロセッサへのポーティングについては,マスタスタックと別
96に割込みスタックを持つM68020以降のプロセッサへは比較的容易にポーティン
97グ可能と思われるが,それより前のプロセッサへのポーティングはやや面倒で
98あろう.
99
100
1012.M68040プロセッサ依存部の機能
102
103この節では,カーネルおよびシステムサービスの機能の中で,M68040依存の部
104分について解説する.
105
1062.1 データ型
107
108signed int型,unsigned int型,size_t型のサイズは,いずれも32ビットであ
109る.
110
1112.2 割込み管理機能と割込みハンドラ
112
113カーネル管理外の割込みはNMIのみである.よって,CPUロック状æ…
114‹ã‚„初期化ルー
115チン内
116では,NMI以外の割込みはすべて禁止されている.å…
117·ä½“的には,IPM
118(Interrupt Priority Mask)が7に設定される.
119
120DEF_INHで指定する割込みハンドラ番号(inhno)は,M68040での例外ベクタ番
121号を表し,そのデータ型(INHNO)はunsigned int型に定義されている.
122DEF_INHで,例外ベクタ番号として有効でない値や,外部割込みに対応しない
123番号を指定した場合の動作は保証されない.
124
125M68040依存の機能として,SR(Status Register)中のIPM(Interrupt
126Priority Mask)の値を変更するためのサービスコールchg_ipmと,参ç…
127§ã™ã‚‹ãŸ
128めのサービスコールget_ipmをサポートしている.なお,IPMの値を表すデータ
129型IPMは,unsigned int型に定義されている.
130
131これらのサービスコールは,タスクコンテキストでCPUロック解除状æ…
132‹ã®å ´åˆ
133にのみ呼び出すことができる.chg_ipmによりIPMを0以外(すなわち,何らか
134の割込みが禁止されている状æ…
135‹ï¼‰ã«ã—た場合でも,ディスパッチは禁止されず,
136chg_ipmにより変更したIPMの値は,ディスパッチ後のタスクに引き継がれる.
137例えば,あるタスクでIPMを1に変更した後,何らかの割込みにより別のタスク
138に切り替わると,切り替わった後のタスクでもIPMは1になる.ただし,IPMを0
139以外に設定していても,実行できるタスクがなくなった場合にはIPMは一時的
140に0になる.これは,M68040の命令セットからくる制限事項
141である(解決手段
142がないわけではない).
143
144chg_ipmをサポートするために,割込みハンドラの出å…
145¥å£å‡¦ç†ãªã©ã«ã‚ªãƒ¼ãƒãƒ˜ãƒƒ
146ドを生じている.そこで,SUPPORT_CHG_IPMというマクロにより,これらのサー
147ビスコールをサポートするかどうかを切り替えられるようにしている.
148SUPPORT_CHG_IPMは,cpu_config.hの中でマクロ定義されている.
149
150M68040依存の割込みマスクの変更・参ç…
151§ã®ãŸã‚ã®ã‚µãƒ¼ãƒ“スコールの仕様は次の
152通り.
153
154(1) chg_ipm 割込みマスクの変更
155
156【C言語API】
157 ER ercd = chg_ipm(IPM ipm);
158
159【パラメータ】
160 IPM ipm 設定すべき IPM の値
161
162【リターンパラメータ】
163 ER ercd エラーコード
164
165【エラーコード】
166 E_CTX コンテキストエラー
167 E_PAR パラメータエラー(ipm が不正)
168
169【機能】
170
171IPM(Interrupt Priority Mask)を ipm で指定された値に設定する.指定し
172た値が 0〜6 以外の場合,E_PARエラーとなる.IPM を 1〜6 に設定した場合
173でも,ディスパッチは禁止されない.また,設定した IPM の値は,ディスパッ
174チ後も引き継がれる.ディスパッチを禁止したい場合には,dis_dsp と併用す
175ればよい.
176
177なお,このサービスコールを用いて,IPM を 7 (すべての割込みを禁止)に
178設定することはできない.IPM を 7 にしたい場合には,loc_cpu を使うべき
179である.
180
181このサービスコールは,タスクコンテキストで CPUロック解除状æ…
182‹ã®æ™‚のみ呼
183び出すことができる.非タスクコンテキストや CPUロック状æ…
184‹ã§å‘¼ã³å‡ºã—た場
185合には,E_CTXエラーとなる.
186
187(2) get_ipm 割込みマスクの参ç…
188§
189
190【C言語API】
191 ER ercd = get_ipm(IPM *p_ipm);
192
193【パラメータ】
194 なし
195
196【リターンパラメータ】
197 ER ercd エラーコード
198 IPM ipm 現在の IPM の値
199
200【エラーコード】
201 E_CTX コンテキストエラー
202
203【機能】
204
205現在の IPM(Interrupt Priority Mask)の値を読み出し,ipm に返す.
206
207このサービスコールは,タスクコンテキストで CPUロック解除状æ…
208‹ã®æ™‚のみ呼
209び出すことができる.非タスクコンテキストや CPUロック状æ…
210‹ã§å‘¼ã³å‡ºã—た場
211合には,E_CTXエラーとなる.
212
2132.3 CPU例外管理機能とCPU例外ハンドラ
214
215DEF_EXC で指定する割込みハンドラ番号(excno)は,M68040 での例外ベクタ
216番号を表し,そのデータ型(EXCNO)は unsigned int型に定義されている.
217DEF_EXC で,例外ベクタ番号として有効でない値や,CPU例外に対応しない番
218号を指定した場合の動作は保証されない.
219
2202.4 スタートアップモジュール
221
222M68040依存のスタートアップモジュール(start.S)では,次の初期化処理を
223行う.
224
225(A) プロセッサモードの初期化とスタックポインタの初期化
226
227最初に,すべてのキャッシュを無効化した後,コードキャッシュとデータキャッ
228シュをå…
229±ã«æœ‰åŠ¹ã«ã™ã‚‹ï¼Žã¾ãŸï¼Œãƒ—ロセッサのモードを,スーパバイザモード・
230割込みモードに設定し,NMI 以外のすべての割込みを禁止する.スタートアッ
231プモジュールは,スーパバイザモードで起動しなければならないので,ここで
232スーパバイザモードに設定するのは,本当はムダである.
233
234次に,割込みスタックポインタ(SPI)を STACKTOP に設定する.ここで割込
235みスタックポインタに設定されたスタック領域は,カーネル起動後は非タスク
236コンテキスト用のスタック領域として使われる.STACKTOP は,sys_config.h
237部で定義することを想定している.また,フレームポインタを 0 に初期化す
238る.
239
240(B) hardware_init_hook の呼出し
241
242hardware_init_hook が 0 でない場合には,hardware_init_hook を呼び出す.
243hardware_init_hook は,カーネルが起動される前に行う必
244要があるターゲッ
245ト依存の初期化を行うために用意している.hardware_init_hook がどこでも
246定義されていない場合,リンカでこのシンボルを 0 に定義する(リンカスク
247リプト内
248に記述あり).
249
250(C) bssセクションと dataセクションの初期化
251
252bssセクションをゼロクリアする.また,dataセクションを初期化する.
253
254(D) software_init_hook の呼出し
255
256software_init_hook が 0 でない場合には,software_init_hook を呼び出す.
257software_init_hook は,カーネルが起動される前に行う必
258要があるソフトウェ
259ア環境(å…
260·ä½“的には,ライブラリ)依存の初期化を行うために用意している.
261software_init_hook がどこでも定義されていない場合,リンカでこのシンボ
262ルを 0 に定義する(リンカスクリプト内
263に記述あり).
264
265(E) カーネルの起動
266
267kernel_start へ分岐し,カーネルを起動する.kernel_start からリターンし
268てくることは想定していない.
269
270
2713.DVE-68K/40 システム依存部の機能
272
2733.1 システムクロックドライバ
274
275システムクロックドライバがisig_timを呼び出す周期は,sys_defs.h中の
276TIC_NUMEとTIC_DENOで定義されている(標準は 1ミリ秒周期).この定義を変
277更することで,isig_timを呼び出す周期を変更することができる.ただし,タ
278イマの精度が1μ秒であるため,1μ秒単位で端数になる値を設定した場合には,
279isig_timの呼出し周期に誤差が生じることになる.
280
2813.2 性能評価用システム時刻参ç…
282§æ©Ÿèƒ½
283
284DVE-68K/40依存部では,性能評価用システム時刻参ç…
285§æ©Ÿèƒ½ï¼ˆvxget_tim)をサ
286ポートしている.性能評価用システム時刻の精度は1μ秒単位であるが,タイ
287マの現在値を読み出すために一時的にタイマを停止させる必
288要があるため,
289vxget_timを呼ぶ度にシステムクロックが少しづつ遅
290れることになる.なお,
291SYSUTIM型はUD型(64ビットの符号無し整数型)に定義している.
292
2933.3 シリアルインタフェースドライバ
294
295DVE-68K/40依存部のシリアルインタフェースドライバは,DVE-68K/40 CPUボー
296ドの2つのシリアルインタフェースをサポートしている.ポートID=1がポートB,
297ポートID=2がポートAに対応している.ポートの割当てを逆にしているのは,
298GDBスタブまたはROMモニタがポートAを使用するためである.
299
3003.4 メモリマップ
301
302DVE-68K/40依存部では,CPUボード上のメモリが4MBの場合を想定し,コード領
303域を0x10000〜0xfffffの約1MB,データ領域を0x100000〜の約3MB,非タスクコ
304ンテキスト用のスタック領域を〜0x3fffffに確保している.0〜0xffffの64KB
305は,ROMモニタまたはGDBスタブのワークエリアとなっており,使用することが
306できない.
307
308
3094.開発環境の構築
310
311開発環境の構築方法については,GNU開発環境構築マニュアルを参ç…
312§ã™ã‚‹ã“と.
313
3144.1 開発環境のバージョン
315
316動作確認したツールのバージョンは以下の通りである.
317
318 BINUTILS : 2.13.2.1
319 GCC-CORE : 2.95.3
320 GDB : 5.3
321 NEWLIB : 1.9.0
322
323GCC 2.95.3では,アプリケーションが標準Cライブラリを使用しないなら,
324NEWLIBは必
325要ない.
326
327GCC 3.3を用いる場合,コンパイラが標準Cライブラリ関数を呼び出すコードを
328生成するため,NEWLIBが必
329要になる.NEWLIBの標準Cライブラリをリンクする
330ために,Makefile中のLIBSの定義に以下のように -lc を追加する必
331要がある.
332
333 LIBS := $(LIBS) $(CXXLIBS) -lc -lgcc
334
335
3365.その他
337
3385.1 ディレクトリ・ファイル構成
339
340M68040ターゲット依存部の各ファイルの概要は次の通り.
341
342 config/m68k/
343 Makefile.config MakefileのM68040依存定義
344 cpu_defs.h プロセッサ依存部のアプリケーション用定義
345 cpu_config.h プロセッサ依存部の構成定義
346 cpu_config.c プロセッサ依存部の関数
347 cpu_support.S プロセッサ依存部のサブルーチン
348 cpu_context.h コンテキスト操作
349 cpu_rename.def カーネルの内
350部識別名のリネーム定義
351 cpu_rename.h カーネルの内
352部識別名のリネーム
353 cpu_unrename.h カーネルの内
354部識別名のリネーム解除
355 tool_defs.h 開発環境依存部のアプリケーション用定義(GNU開発環境用)
356 tool_config.h 開発環境依存部の構成定義(GNU開発環境用)
357 makeoffset.c offset.h生成サポートプログラム
358 cpu_insn.h 低レベルのプロセッサ操作ルーチン
359 start.S スタートアップモジュール
360 m68kelf.ld リンカスクリプト
361
362 config/m68k/dve68k/
363 Makefile.config MakefileのDVE-68K/40依存定義
364 sys_defs.h システム依存部のアプリケーション用定義
365 sys_config.h システム依存部の構成定義
366 sys_config.c システム依存部の関数
367 sys_support.S システム依存部のサブルーチン
368 sys_rename.def カーネルの内
369部識別名のリネーム定義
370 sys_rename.h カーネルの内
371部識別名のリネーム
372 sys_unrename.h カーネルの内
373部識別名のリネーム解除
374 hw_timer.h タイマ操作ルーチン
375 hw_serial.h SIOドライバ
376 hw_serial.cfg SIOドライバのコンフィギュレーションファイル
377 dve68k.h DVE-68K/40 CPUボードのハードウェア資源の定義
378 dve68k_dga.h DGAのアクセスユーティリティ
379
380 pdic/simple_sio/
381 upd72001.h μPD72001用 簡易SIOドライバ関連の定義
382 upd72001.c μPD72001用 簡易SIOドライバ
383
3845.2 ターゲットへのダウンロードと実行
385
386ターゲットへのダウンロードと実行手順については,GNU開発環境構築マニュ
387アルに説明されているが,以下では,M68040およびDVE-68K/40 CPUボードの場
388合に特有の事項
389について説明する.
390
391(A) ROMモニタを用いる方法
392
393DVE-68K/40 CPUボードの場合,別売りのROMモニタとそれに対応した端末ソフ
394トを用いると,Rコマンドでバイナリ形式のファイルをダウンロードすること
395ができる.
396
397 #R 10000
398 \up jsp.bin
399
400プログラムの実行は,gコマンドで行う.
401
402 #g 10000
403
404(B) GDBスタブを用いる方法
405
406M68040では,プログラムを実行中にNMIをかける(DVE-68K/40 CPUボードでは,
407ABORTスイッチを押す)ことで,プログラムを停止させて,gdbに制御を戻すこ
408とができる.
409
410以上
Note: See TracBrowser for help on using the repository browser.