T-Kernel 2.0 の起動処理



1. はじめに

ここでは、T-Kernel 2.0 の起動処理に関して説明します。

ハードウェアおよび実装に依存する処理に関しては、各機種ごとの「実装仕様書」を参照してください。。

2. リセット/T-Monitor の起動処理

システムがリセットすると、最初に T-Monitor が起動して以下の処理を実行します。

  1. (1) リセット初期化処理

  2. (2) T-Kernel プログラムのロード

    1. ハードウェアおよび実装に依存しますが、基本的に以下の処理を実行します。
  3. (3) T-Kernel の起動

    1. T-Monitor または ブートプログラムから T-Kernel の起動アドレスにジャンプしたときの CPU やハードウェアの状態は実装に依存しますが、原則として、CPU の動作モードは特権モード、割り込みは全て禁止された状態となります。

    2. T-Kernel が起動した後は、以下の場合を除いて T-Monitor は使用されません。

3. システムの起動情報

T-Kernel が起動される際に、以下の情報がメモリ中に存在する必要があります。

  1. (1) ROM 情報 ( rominfo )

    1. ROM 上の固定アドレスに配置されるシステムの起動情報です。T-Monitor と T-Kernel の両方で参照します。

    2. 本情報は、ハードウェアおよび実装に依存します。

  2. (2) システム共有情報 ( SysCommonInfo )

    1. RAM 上の固定アドレスに配置されるシステムに関する共有情報です。システムの起動時に T-Monitor が設定し、T-Kernel の起動時にも一部のデータが設定されます。その後、T-Monitor と T-Kernel の両方により参照されます。

    2. 本情報は、ハードウェアおよび実装に依存します。

4. T-Kernel/OS の初期化処理

T-Kernel の起動アドレス "_start" に制御が移ると、以下の手順で T-Kernel/OS の初期化処理を実行します。

  1. (1) _start - C 初期化ルーチン [ sysdepend/device/<機種名>/icrt0.S ]

    1. レジスタ、キャッシュ、変数領域の初期化などのプログラム実行のための前処理を実行します。

    2. ROM からの起動の場合は ROM 起動初期化ルーチン ROM_startup [ sysdepend/device/<機種名>/devinit.c ] を呼び出します。

    3. 本ルーチンは、ハードウェアおよび実装に依存します。

  2. (2) main - カーネルのメインルーチン [ sysinit/src/sysinit_main.c ]

    1. T-Kernel/OS の起動処理を開始します。本処理では、カーネル初期化処理 ( init_system ) を呼び出した後、カーネルメイン処理 ( t_kernel_main ) を呼び出します。

    2. カーネルメイン処理からは復帰しません。

  3. (3) init_system - カーネル初期化処理 [ sysinit/src/sysstartup.c ]

    1. カーネルの初期化処理の各ルーチンを以下の手順で呼び出します。この段階では T-Kernel は起動していないので、T-Kernel のシステムコールを使用することはできません。

    2. ここで行われる初期化処理は、カーネルメモリ管理の初期化など、T-Kernel/OS が起動するために必要な機能の初期化処理です。

    1. (a) init_device - デバイスの初期化 [ sysdepend/device/<機種名>/devinit.c ]

    2. (b) init_subsystems - サブシステムの初期化 [ extension/startup/<EXT_STUP>/subsystem.c ]

    3. (c) init_segmgr - セグメント管理の初期化 [ extension/memory/<EXT_MEM>/segmgr.c ]

    4. (d) init_memmgr - メモリ管理の初期化 [ extension/memory/<EXT_MEM>/memmgr.c ]

    5. (e) init_Imalloc - カーネルメモリ管理の初期化 [ sysmgr/src/imalloc.c ]

  4. (4) t_kernel_main - カーネルメイン処理 [ tkernel/src/tkstart.c ]

    1. 前述の main から init_system に続いて呼び出されます。T-Kernel/OS の各機能の初期化処理が行われ、最後に初期タスクを生成・起動します。初期タスクが生成される段階で、T-Kernel/OS の全ての機能は有効となっています。

    2. 初期タスクの起動をもって、T-Kernel/OS の起動処理は終了します。

    1. (a) cpu_initialize - CPU 関連初期化処理 [ sysdepend/cpu/<機種名>/cpu_init.c ]

      1. カーネル内で使用する例外ハンドラの登録、コプロセッサ関連の設定などの CPU に依存する初期化処理を実行します。

    2. (b) tkdev_initialize - デバイス関連初期化処理 [ sysdepend/device/<機種名>/tkdev_init.c ]

      1. 各デバイスの割込み禁止など、CPU 以外のハードウェアに依存する初期化処理を実行します。

    3. (c) 各機能モジュールの初期化

      1. 機能モジュールの初期化ルーチンを以下の順に実行します。

        • task_initialize - タスク機能 [ tkernel/src/task.c ]
        • semaphore_initialize - セマフォ機能 [ tkernel/src/semaphore.c ]
        • eventflag_initialize - イベントフラグ機能 [ tkernel/src/eventflag.c ]
        • mailbox_initialize - メールボックス機能 [ tkernel/src/mailbox.c ]
        • messagebuffer_initialize - メッセージバッファ機能 [ tkernel/src/messagebuf.c ]
        • rendezvous_initialize - ランデブ機能 [ tkernel/src/rendezvous.c ]
        • mutex_initialize - ミューテックス機能 [ tkernel/src/utex.c ]
        • memorypool_initialize - 可変長メモリプール機能 [ tkernel/src/mempool.c ]
        • fix_memorypool_initialize - 固定長メモリプール機能 [ tkernel/src/mempfix.c ]
        • cyclichandler_initialize - 周期ハンドラ機能 [ tkernel/src/time_calls.c ]
        • alarmhandler_initialize - アラームハンドラ機能 [ tkernel/src/time_calls.c ]
        • subsystem_initialize - サブシステム機能 [ tkernel/src/subsystem.c ]
        • resource_group_initialize - リソースグループ管理 [ tkernel/src/subsystem.c ]
        • timer_initialize - システムタイマ [ tkernel/src/timer.c ]
    4. (d) init_task_startup - 初期タスクの生成/起動 [ tkernel/src/tkstart.c ]

      1. 初期タスクを生成し起動します。

5. 初期タスクによる起動処理

初期タスク init_task [ sysinit/sysinit_main.c ] は、T-Kernel/SM 等の上位のシステムや T-Kernel Extension の起動処理を以下の手順で実行した後、ユーザが定義した処理に実行を移します。

  1. (1) start_system - 上位システムの起動 [ sysinit/src/sysstartup.c ]

    1. T-Kernel/SM 等の上位のシステム、およびデバイスドライバの起動処理を以下の手順で実行します。本処理をもって T-Kernel の初期化/起動処理は終了します。

    1. (a) start_segmgr - セグメント管理の起動 [ extension/memory/<EXT_MEM>/segmgr.c ]

    2. (b) start_memmgr - メモリ管理の起動 [ extension/memory/<EXT_MEM>/memmgr.c ]

    3. (c) SystemManager - T-Kernel/SM の起動 [ sysmgr/src/smmain.c ]

      1. T-Kernel/SM を起動します。以降、T-Kernel/SM の機能が利用できます。

    4. (d) _InitLibtk - ライブラリ( libtk )の初期化 [ ../lib/libtk/src/libinit.c ]

      1. libtk ライブラリを初期化します。以降、libtk ライブラリ関数を利用できます。

    5. (e) start_device - デバイスドライバの起動 [ sysdepend/device/<機種名>/devinit.c ]

      1. デバイスドライバの登録/起動を行います。

    6. (f) start_subsystem - サブシステムの起動 [ extension/startup/<EXT_STUP>/subsystem.c ]

      1. サブシステムの登録/起動を行います。T-Kernel Extension を使用する場合には、Extension で使用するサブシステムやデバイスドライバの登録/起動を行います。

  2. (2) init_task_main - 初期タスクメイン処理 [ sysmain/src/init_task_main.c ]

    1. 以下の手順で、ユーザ定義のアプリケーションの処理を実行します。

    1. (a) userinit - ユーザ定義の初期化処理

      1. ROM 情報(rominfo) の userinit のアドレスが正当であれば、userinit プログラムを実行します。

    2. (b) usermain - ユーザ定義の初期タスクメイン処理 [ sysmain/src/usermain.c ]

      1. ユーザが定義した初期タスクのメイン処理です。この処理を終了すると初期タスクは終了し、T-Kernel の終了処理を実行して、システムをシャットダウンします。