新石器Wiki

近年はシリコン(石)から進化した便利なもので溢れる時代。そんな気になった事や試した事など記す。

ユーザ用ツール

サイト用ツール


サイドバー

Home The modern stone age.

サイドバー

記事ナビ


タグ一覧

タグ#
1
18

作者関連サイト

参考

スポンサーリンク

develop:rtk_kernel:rtk_kernel-user-application


rtk_kernelユーザアプリケーション

rtk_kernelから呼ばれるユーザアプリケーションには以下の2種類がある。

  1. T-Kernelと一緒にリンクしたアプリケーションプログラム。
  2. T-Kernelとは別オブジェクトで作成されたアプリケーションプログラム。

概要

T-Kernelが起動すると、opt_main()タスクが実行され(tkernel_source/kernel/sysmain/src/opt_main.c)、rominfoで指定(userinit)した開始番地からのヘッダ情報をチェックしてOKなら開始番地の外部アプリに分岐する。
開始番地が未定義(0)かヘッダ情報が不正の場合は、ワーニング表示してopt_main()に記述してあるサンプルアプリを実行する。

1.T-Kernelとリンクするアプリ

T-Kernelとリンクしたユーザアプリプログラムを使いたい場合は、opt_main()から呼ばれる同梱のサンプルアプリ(T2EXの簡易ショル)の代わりにユーザ定義のプログラムが実行されるように直接記述していく。

2.T-Kernelとは別オブジェクトの外部アプリ

外部アプリは、本rtk_kernelプロジェクトを直接変更して利用する事もできるが、アプリプロジェクト内にGitサブモジュール機能でサブディレクトリとして登録して使う事を想定。
又、別プロジェクトで動かす外部アプリのサンプルプロジェクトも公開していく予定。

外部アプリの開始番地

コンフィグファイル(rominfo_rom.c)の、「RI_USERINIT」に外部アプリの実行開始アドレスを指定する。yt-kernelでの外部アプリの推奨開始番地は機種によって異なる

機種 推奨開始番地 備考
Raspberry Pi 0x00080000
RZ/T1 0x30080000
  • OS領域と重複しなければ違う番地でも大丈夫。

外部アプリのヘッダ情報

rtk_kernelでは不正なプログラムを実行しないように、開始番地からヘッダ情報(下記)をチェックし、整合が確認できたら開始番地に分岐する。

相対番地 名称 説明 備考
+0x0 (分岐命令) ユーザプログラムへの分岐命令 +0x20番地以降に分岐
+0x4 ApSignature 0x12345678 固定値
+0x8 StartAddress アプリの開始番地 ロード位置確認の為
+0xC ApType 0 現在は=0のみ
+0x10 (Reserved) 0にしておく 予約
+0x14 (Reserved) 0にしておく 予約
+0x18 (Reserved) 0にしておく 予約
+0x1C (Reserved) 0にしておく 予約

外部アプリ作成要領

外部アプリは、全く独立した実行モジュールなので、C言語などで動かす場合はスタートアップルーチンから記述する。T-Kernel機能の呼び出しはサービスコールにより行い、T-Kernelサービスコールのライブラリをリンクする必要がある。

別モジュールなので自由にプログラムでき、Newlib のC標準ライブラリなども利用する事も可能。

develop/rtk_kernel/rtk_kernel-user-application.txt · 最終更新: 2020/01/07 14:12 by yoko