= TOPPERS/JSPカーネル ユーザズマニュアル = (ColdFire Version 2 ターゲット依存部) (Release 1.4.1対応,最終更新: 6-Oct-2004) ------------------------------------------------------------------------ TOPPERS/JSP Kernel Toyohashi Open Platform for Embedded Real-Time Systems/ Just Standard Profile Kernel Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory Toyohashi Univ. of Technology, JAPAN Copyright (C) 2004-2006 by Embedded and Real-Time Systems Laboratory Graduate School of Information Science, Nagoya Univ., JAPAN Copyright (C) 2007 by KURUSUGAWA Electronics Industry Inc, JAPAN Copyright (C) 2008 by Takahisa Yokota 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation によって公表されている GNU General Public License の Version 2 に記 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 利用と呼ぶ)することを無償で許諾する. (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 権表示,この利用条件および下記の無保証規定が,そのままの形でソー スコード中に含まれていること. (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 の無保証規定を掲載すること. (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 用できない形で再配布する場合には,次のいずれかの条件を満たすこ と. (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 作権表示,この利用条件および下記の無保証規定を掲載すること. (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 報告すること. (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 本ソフトウェアは,無保証で提供されているものである.上記著作権者お よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. @(#) $Id: m68k.txt,v 1.13 2004/10/06 06:51:51 honda Exp $ ------------------------------------------------------------------------ 1.ColdFire V2 ターゲット依存部の概要 1.1 ターゲットシステム ColdFire V2プロセッサのターゲットシステムとしては,フリースケール・セミコン ダクタ株式会社のCPUボードM52235EVB(MCF52235)のみをサポートしている. 1.2 開発環境と実行環境 開発環境には,GCCなどのGNU開発環境を用い,オブジェクトファイルフォーマッ トはELFを標準とする. 実行環境として,ROMから直接起動する方法とGDBスタブを用いる方法をサポート している.GDBスタブを用いる場合には,Makefile中で,DBGENVにGDB_STUBを 定義する(デフォルト).ROMモニタを用いる場合には,DBGENVを定義しない. (注)RAMにカーネルを配置するとM52235EVBではサイズが収まらないため、GDB_STUB は現状使用しない 1.3 サポートする機能の概要 ColdFire V2依存の機能として,割込みマスクの変更・参照(chg_ixx,get_ixx)を サポートしている.また,M52235EVBボード依存の機能として,性能評価用システム 時刻参照機能(vxget_tim)をサポートしている.割込みの禁止と 許可(dis_int,ena_int)はサポートしていない. 2.ColdFireプロセッサ依存部の機能 この節では,カーネルおよびシステムサービスの機能の中で,ColdFire依存の部 分について解説する. 2.1 データ型 signed int型,unsigned int型,size_t型のサイズは,いずれも32ビットであ る. 2.2 割込み管理機能と割込みハンドラ カーネル管理外の割込みはNMIのみである.よって,CPUロック状態や初期化ルー チン内では,NMI以外の割込みはすべて禁止されている.具体的には,IPM (Interrupt Priority Mask)が7に設定される. DEF_INHで指定する割込みハンドラ番号(inhno)は,MCF52235での例外ベクタ番 号を表し,そのデータ型(INHNO)はunsigned int型に定義されている. DEF_INHで,例外ベクタ番号として有効でない値や,外部割込みに対応しない 番号を指定した場合の動作は保証されない. MCF52235依存の機能として,SR(Status Register)中のIPM(Interrupt Priority Mask)の値を変更するためのサービスコールchg_ipmと,参照するた めのサービスコールget_ipmをサポートしている.なお,IPMの値を表すデータ 型IPMは,unsigned int型に定義されている. これらのサービスコールは,タスクコンテキストでCPUロック解除状態の場合 にのみ呼び出すことができる.chg_ipmによりIPMを0以外(すなわち,何らか の割込みが禁止されている状態)にした場合でも,ディスパッチは禁止されず, chg_ipmにより変更したIPMの値は,ディスパッチ後のタスクに引き継がれる. 例えば,あるタスクでIPMを1に変更した後,何らかの割込みにより別のタスク に切り替わると,切り替わった後のタスクでもIPMは1になる.ただし,IPMを0 以外に設定していても,実行できるタスクがなくなった場合にはIPMは一時的 に0になる.これは,COLDFIREの命令セットからくる制限事項である(解決手段 がないわけではない). chg_ipmをサポートするために,割込みハンドラの出入口処理などにオーバヘッ ドを生じている.そこで,SUPPORT_CHG_IPMというマクロにより,これらのサー ビスコールをサポートするかどうかを切り替えられるようにしている. SUPPORT_CHG_IPMは,cpu_config.hの中でマクロ定義されている. ColdFire V2依存の割込みマスクの変更・参照のためのサービスコールの仕様は次の 通り. (1) chg_ipm 割込みマスクの変更 【C言語API】 ER ercd = chg_ipm(IPM ipm); 【パラメータ】 IPM ipm 設定すべき IPM の値 【リターンパラメータ】 ER ercd エラーコード 【エラーコード】 E_CTX コンテキストエラー E_PAR パラメータエラー(ipm が不正) 【機能】 IPM(Interrupt Priority Mask)を ipm で指定された値に設定する.指定し た値が 0〜6 以外の場合,E_PARエラーとなる.IPM を 1〜6 に設定した場合 でも,ディスパッチは禁止されない.また,設定した IPM の値は,ディスパッ チ後も引き継がれる.ディスパッチを禁止したい場合には,dis_dsp と併用す ればよい. なお,このサービスコールを用いて,IPM を 7 (すべての割込みを禁止)に 設定することはできない.IPM を 7 にしたい場合には,loc_cpu を使うべき である. このサービスコールは,タスクコンテキストで CPUロック解除状態の時のみ呼 び出すことができる.非タスクコンテキストや CPUロック状態で呼び出した場 合には,E_CTXエラーとなる. (2) get_ipm 割込みマスクの参照 【C言語API】 ER ercd = get_ipm(IPM *p_ipm); 【パラメータ】 なし 【リターンパラメータ】 ER ercd エラーコード IPM ipm 現在の IPM の値 【エラーコード】 E_CTX コンテキストエラー 【機能】 現在の IPM(Interrupt Priority Mask)の値を読み出し,ipm に返す. このサービスコールは,タスクコンテキストで CPUロック解除状態の時のみ呼 び出すことができる.非タスクコンテキストや CPUロック状態で呼び出した場 合には,E_CTXエラーとなる. 2.3 CPU例外管理機能とCPU例外ハンドラ DEF_EXC で指定する割込みハンドラ番号(excno)は,COLDFIREでの例外ベクタ 番号を表し,そのデータ型(EXCNO)は unsigned int型に定義されている. DEF_EXC で,例外ベクタ番号として有効でない値や,CPU例外に対応しない番 号を指定した場合の動作は保証されない. 2.4 スタートアップモジュール COLFIRE依存のスタートアップモジュール(start.S)では,次の初期化処理を 行う. (A) ハードウェアの初期化 最初にSRAM、FlashROMの配置アドレスを設定する。 (B) プロセッサモードの初期化とスタックポインタの初期化 プロセッサのモードを,スーパバイザモード・割込みモードに設定し,NMI 以外 のすべての割込みを禁止する.スタートアップモジュールは,スーパバイザモード で起動しなければならないので,ここでスーパバイザモードに設定するのは,本当 はムダである. 次に,割込みスタックポインタ(SPI)を STACKTOP に設定する.ここで割込 みスタックポインタに設定されたスタック領域は,カーネル起動後は非タスク コンテキスト用のスタック領域として使われる.STACKTOP は,sys_config.h 部で定義することを想定している.また,フレームポインタを 0 に初期化す る. (B) hardware_init_hook の呼出し hardware_init_hook が 0 でない場合には,hardware_init_hook を呼び出す. hardware_init_hook は,カーネルが起動される前に行う必要があるターゲッ ト依存の初期化を行うために用意している.hardware_init_hook がどこでも 定義されていない場合,リンカでこのシンボルを 0 に定義する(リンカスク リプト内に記述あり). (C) bssセクションと dataセクションの初期化 bssセクションをゼロクリアする.また,dataセクションを初期化する. (D) software_init_hook の呼出し software_init_hook が 0 でない場合には,software_init_hook を呼び出す. software_init_hook は,カーネルが起動される前に行う必要があるソフトウェ ア環境(具体的には,ライブラリ)依存の初期化を行うために用意している. software_init_hook がどこでも定義されていない場合,リンカでこのシンボ ルを 0 に定義する(リンカスクリプト内に記述あり). (E) カーネルの起動 kernel_start へ分岐し,カーネルを起動する.kernel_start からリターンし てくることは想定していない. 3.M52235EVB システム依存部の機能 特になし 4.開発環境の構築 開発環境の構築方法については,GNU開発環境構築マニュアルを参照すること. 4.1 開発環境のバージョン 動作確認したツールのバージョンは以下の通りである. BINUTILS : 2.18 GCC-CORE : 3.6.3 GCC 3.3を用いる場合,コンパイラが標準Cライブラリ関数を呼び出すコードを 生成するため,NEWLIBが必要になる.NEWLIBの標準Cライブラリをリンクする ために,Makefile中のLIBSの定義に以下のように -lc を追加する必要がある. LIBS := $(LIBS) $(CXXLIBS) -lc -lgcc 5.その他 5.1 ディレクトリ・ファイル構成 M68040ターゲット依存部の各ファイルの概要は次の通り. config/cfv2/ Makefile.config MakefileのColdFire V2依存定義 cpu_config.c プロセッサ依存部の関数 cpu_config.h プロセッサ依存部の構成定義 cpu_context.h コンテキスト操作 cpu_defs.h プロセッサ依存部のアプリケーション用定義 cpu_insn.h 低レベルのプロセッサ操作ルーチン cpu_rename.def カーネルの内部識別名のリネーム定義 cpu_rename.h カーネルの内部識別名のリネーム cpu_support.S プロセッサ依存部のサブルーチン cpu_unrename.h カーネルの内部識別名のリネーム解除 m52235.h MCF52235の定義 makeoffset.c offset.h生成サポートプログラム mcfpit.h MCF52235内臓PITタイマードライバ mcfuart.c MCF52235内臓UART用シリアルドライバ mcfuart.h MCF52235内臓UART用シリアルドライバ start.S スタートアップモジュール tinet_cpu_config.h TINET用ヘッダ tinet_cpu_defs.h TINET用ヘッダ tool_config.h 開発環境依存部の構成定義(GNU開発環境用) tool_defs.h 開発環境依存部のアプリケーション用定義(GNU開発環境用) util.h vector_table.c config/cfv2/m52235evb/ Makefile.config MakefileのM52235EVB依存定義 Makefile.tinet cfv2.h ColdFireV2の定義 cfv2elf.ld リンカスクリプト cfv2elf.stub.ld リンカスクリプト(stub用) hw_serial.cfg SIOドライバのコンフィギュレーションファイル hw_serial.h SIOドライバ hw_timer.h タイマ操作ルーチン m52235evb.h M52235EVBボードのハードウェア資源の定義 sys_config.c システム依存部の関数 sys_config.h システム依存部の構成定義 sys_defs.h システム依存部のアプリケーション用定義 sys_rename.def カーネルの内部識別名のリネーム定義 sys_rename.h カーネルの内部識別名のリネーム sys_support.S システム依存部のサブルーチン sys_unrename.h カーネルの内部識別名のリネーム解除 tinet_sys_config.c TINET用システム依存部の関数 tinet_sys_config.h TINET用システム依存部の構成定義 user_config.h ユーザー定義情報 5.2 ターゲットへのダウンロードと実行 ターゲットへのダウンロードと実行手順については,GNU開発環境構築マニュ アルに説明されているが,以下では,ColdFire V2および M52235EVBボードの場 合に特有の事項について説明する. ROMから直接起動する方法 CF FlasherでBDM経由で書き込むことによりROMから起動できる。 以上