2008/10/29(水)TOPPERS/ASP kernelのSH7144への移植~その1
[TOPPERS/ASP]プロセッサ依存部の資料
大枠
ポーティング資料の大元は,以下のファイル.
asp/doc/porting.txt TOPPERS/ASPカーネル ターゲット依存部 ポーティングガイド 対応バージョン: Release 1.3.2 (最終更新: 2008年8月3日)
sh12a_gcc/prc_user.txt より
@SH12Aプロセッサ依存部(asp-1.3.1対応)Last Modified: '08/05/12 SH13A依存部は,SH1/2/2Aをターゲットとしている.SH1/2/2Aにはいくつかの バリエーションが存在し,バリエーションによっては,割込み関連のレジスタ
誤植もあるが,SH2対応のarchitecture対応と明示されている.(方針)
(方針)SH7144対応は,コレに対するpatchという形で作成する
SH2A(7211)とSH2(7144F)とでは,SCIそのものの構成が変わっている.SCIのレジスタアドレス・制御レジスタの構造はもちろん,SH2AのほうがFIFOを積んでいて快適そうだ.
流用できないことが自明になったが,本家が pdic/sh/sh_scifとしているため,当初はSCIFのコードをtarget依存部においていた.しかしながら,秋月のSH7145へのポーティング((私がやるのではなく,第三者が,と考えています.同時に複数触らない&買い増すならSH2A以上とか..))を視野に入れると,pdicなのかな?と.ただ,pdicて外付けICのためのように思えたりもするのだけれど….
ディレクトリ構成の詳しいシキタリやドキュメント記述ルールも明確化しないと,結構ばらついているように思います.
いざリリースしようと思っても,どれにあわせるべきかで悩んでしまった.
RENESASのサイトでダウンロードできるヘッダファイル集*1をパクってくると良い感じだろうか.
ToDo?
資料より,何をすべきしたかをまとめる.もともとポーティングについて纏まって記述されているが,具体的作業を併記することで,別プロセッサへの移植の助けになることを期待.
ファイルの新規作成
- asp/arch/sh12a_gcc/配下
サポートするプロセッサの型番を(sh7xxx)とする.- テンプレートファイル(sh7xxx.tf)
- カーネル実装のターゲット依存の定義(sh7xxx_config.h)
- ハードウェア資源のヘッダーファイル(sh7xxx.h)
- asp/target/cq7144/配下(ディレクトリも新規作成)
基本は既存のtargetファイルを元に作成する.今回はapsh2a_gccをベースにする.
{asp/doc/porting.txt::10.1 ターゲット依存部のファイル一覧に詳しく書かれている….- E_PACKAGE
asp/doc/porting.txt :: 9.2 パッケージ記述ファイル/option. - MANIFEST
asp/doc/porting.txt :: 9.2 パッケージ記述ファイル/option.個別パッケージ作成用ファイル. - Makefile.target
- cqsh2.h
- target.tf
- target_cfg1_out.h
- target_check.tf
- target_config.c
- target_config.h
- target_kernel.h
- target_rename.def
- target_rename.h
- target_serial.c
- target_serial.cfg
- target_serial.h
- target_sil.h
- target_stddef.h
- target_support.S
- target_syssvc.h
- target_test.h
- target_timer.cfg
- target_timer.h
- target_unrename.h
- target_user.txt
asp/doc/porting.txt :: 9.1 ドキュメントにて要求されている.記述内容もtarget設定や環境など該当ドキュメントに記載されている. - test_log.txt
sampleプログラムのconsole出力結果(log.
- E_PACKAGE
以下,さらに抽出.
- 不思議ファイル
個別パッケージ生成時のコマンド例 % utils/makerelease arch/arm_gcc/MANIFEST 簡易パッケージ生成時のコマンド例 % utils/makerelease target/at91skyeye_gcc/E_PACKAGE
[bf:MANIFEST}や*PACKAGEで,リリース用のアーカイブを作る際に内包させるファイル等を明記する,ということのようです.
- その他のファイルが必要な場合は,プロセッサの型番を先頭に着けたファイルを作成,
ターゲット依存部からインクルードすればよい.
割込み優先度設定
prc_config.c :: const IPR_INFO ipr_info_tbl[] を IPR_INFO_TBL_DATA で初期化する.依存部(shxxx_config.h)にて,IPR_INFO_TBL_DATAを含めた割込み関連のシンボルを定義する.割込みベクタのMIN.値をindex=0として,該当ベクタの優先度設定のためのIPRレジスタのアドレスをaddressメンバへ放り込む.resere/空きもあるので,そこは 0を代入しておくこと.
typedef struct { /* 割込み優先順設定レジスタのアドレス */ uint32_t address; /* オフセット */ uint32_t offset; } IPR_INFO;
メモ
tareget依存部のmakefile(Makefile.target)に,以下のシンボルが存在する.
これによりプロセッサ依存部のファイルを選択するようになった.JSPではプロセッサとターゲットを個別に指定する必要があった*2と思う.
BOARD = cqsh2a PRC = sh12a TOOL = gcc