O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
TOPPERS/SSP を用いた教育訓練カ
リキュラムカーネルの自作およびカ
スタマイズ
アライブビジョンソフトウェア株式会社
高橋和浩
https://www.facebook.com/firstandlastandallways
TOPPE...
バックグランド(それまでの経緯)
 ルネサスエレクトロニクスの
RTOS(μITRON カーネル ) のおよそ 8 年
ほど受託開発。  M32C M16C R32C RX
など
 ポリテクセンター兵庫にて、在職者向け
コース( μITRO...
動機
 ITRON を使うセミナから作るセミナにし
たい
 受講生からの要望
 オープンソースの OS を使う以上、中身の
理解の必要性
 入り口として、もっとも手軽なもの 最少
セットカーネル
 Linux のカーネルに読破にくじけ...
μITRON (RTOS)の講習会
 ポリテクセンター兵庫(武庫之荘)で実施
  ・ μITRON 基本
  ・ μITRON ネットワーク
  ・新講習 RTOS自作とカスタマイズ(本
年1月実施)
 いずれも土曜日 3 日間
 H27 ...
RTOS 自作講習会の概要
 標準 ITRON ガイドブック(作り方の章)
  特に専門用語の解説をしっかり
 TOPPERS/SSP( オープンソース μITRON) を
ベース(シュリンク版というものを利用)
 ボードで実際に演習を交...
講習のサンプル
 ソースコード解説の例
 カーネル拡張の例
カーネルコード解説
 sta_ker() から始まる。
 マルチタスクになる前段
階の処理
 ブート一回目だけの処理
としてカーネルオブジェ
クトの生成がある。
 SSP はカーネルオブジェ
クトといってもタスクの
み
 TCB の初...
カーネルコード解説 2
 ディスパッチャ部分
 これは、途中で待ちになら
ない SSP 特有のディスパ
ッチ処理。
 優先度の高いタスクにプリ
エンプトはするが、待ち状
態にはならないから、タス
クの高いタスクが終了して
から低いタスクの...
カーネルコード解説 3
 スケジューラは、今の
レディーキューから、
次にディスパッチする
タスクを選ぶ処理。
 レディーキューの構造
に依存するが、 SSP は
単純なビットマップの
み
uint_t
search_schedtsk(vo...
カーネルコード解説 4
ER
act_tsk(ID tskid)
{
ER ercd;
uint_t tskpri;
LOG_ACT_TSK_ENTER(tskid);
CHECK_TSKCTX_UNL();
CHECK_TSKID_SELF(...
カーネルコード解説 5
 最後は、ユーザーからの OS 呼び出しである。
 タスクの起動で、基本はまずレディーキューに指
定したタスクの TCB をキューイングする
 カーネルの最後(遅延ディスパッチで)今の最優
先タスクを動かす。
 ...
タスクスイッチの例 ( 追加ペー
ジ)
 タスク 2 が RUN 中に、 act_tsk() でタス
ク 1 を起動
 タスク 1 が優先度が高い場合
 タスク 1 がサブルーチンコールされる動き
タスク2 中断
実行
タスク1
時間
a...
 移植対応部 アセンブリ言語
割込み時のタスクスイッチの例(追加ペ
ージ)
 Task2 が RUN 中に割り込みが発生
 割込みハンドラで iact_tsk(task1) を呼び
出
 Task1 が優先度高い
0 1 2 3 4 5
割り込み処理
Task2
割り...
カーネル (RTOS) 仕様
シュリンク版
 SourceForge に公開
 http://sourceforge.jp/projects/shrink-sp-rx62n/
 本物との違い
 割込みベクターの登録およびスタートアップの削
除  OS なし環境を流...
TOPPERS/SSP のカスタマイズ フル改造編
 (1)待ち状態を持つカーネルの設計
 (2)実装
   イ.コンテキストの保存と復元
   ロ.サービスコール部の作成
 (3) dly_tsk の追加
   イ.実装に必要な項...
(1)待ち状態を持つカーネルの設計
 待ちを持つということは
 タスクが  run --> wait --> dormant
     wait --> ready
 中断したところから再開しなければならな
い。
コンテキストの保存と復元
 1. コンテキストの保存エリアを検討する。
 2. コンテキストからタスクが復帰する仕組
みでのタスク起動部を実装する
 3. タスクスイッチする場合にコンテキスト
の保存と復帰をします。
 タスクがスイッチ...
longjmp/setjmp の利用
 コンテキストの保存領域を渡して call すれば、そ
こに保存される。
 割込みには対応できないので工夫が必要
 シュリンク版の移植性を考慮して C でできるだけ
実装
longjmp/setjmp の限界
 RTOS のコンテキスト保存
は、 longjmp/setjmp だけでは、すべて
の場合に対応できません。
 少なくとも戻り値が、 R1 レジスタが保存
されないことがある。
 割り込みには対応で...
Longjmp/setjmp の考え方
 Setjmp はコンパイラが把握
   OS 呼び出しの場合は、 setjmp を使い、これ
はコンパイラが把握できる。 Setjmp から戻る場
合は、レジスタ一式が復帰して jmp してくるが
保...
今後の展開
 ポリテクセミナーの内容(プラットフォー
ム)の見直し
 SSP シュリンク版の拡張
セミナのプラットフォーム
シュリンク版のこれから
 ハード依存部が少ないことから移植がしや
すいはず
   raspberry pi に移植しました
     (baremetal 環境)
http://www.slideshare.net/alvstakahash...
シュリンク版の展望
ありがとうございました
 ポリテクセンター兵庫 在職者研修
http://www3.jeed.or.jp/hyogo/poly/contents/holding/index.html
正式名称
独立行政法人高齢・障害・求職者雇用支援機構
兵庫...
Próximos SlideShares
Carregando em…5
×

TOPPERS/SSPを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ @ソフトウェア講演会名古屋

686 visualizações

Publicada em

2015.3.13 名古屋工業研究所で行われる
ソフトウェア講演会のスライドです

Publicada em: Engenharia
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

TOPPERS/SSPを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ @ソフトウェア講演会名古屋

  1. 1. TOPPERS/SSP を用いた教育訓練カ リキュラムカーネルの自作およびカ スタマイズ アライブビジョンソフトウェア株式会社 高橋和浩 https://www.facebook.com/firstandlastandallways TOPPERS プロジェクト 特別会員(個人)  アイデアアプリケーションコンテスト  アイデア部門 入賞
  2. 2. バックグランド(それまでの経緯)  ルネサスエレクトロニクスの RTOS(μITRON カーネル ) のおよそ 8 年 ほど受託開発。  M32C M16C R32C RX など  ポリテクセンター兵庫にて、在職者向け コース( μITRON) を担当 (H24 より実 施)
  3. 3. 動機  ITRON を使うセミナから作るセミナにし たい  受講生からの要望  オープンソースの OS を使う以上、中身の 理解の必要性  入り口として、もっとも手軽なもの 最少 セットカーネル  Linux のカーネルに読破にくじけた人にも  OS 自作本などのニーズ
  4. 4. μITRON (RTOS)の講習会  ポリテクセンター兵庫(武庫之荘)で実施   ・ μITRON 基本   ・ μITRON ネットワーク   ・新講習 RTOS自作とカスタマイズ(本 年1月実施)  いずれも土曜日 3 日間  H27 年度ももちろんあります
  5. 5. RTOS 自作講習会の概要  標準 ITRON ガイドブック(作り方の章)   特に専門用語の解説をしっかり  TOPPERS/SSP( オープンソース μITRON) を ベース(シュリンク版というものを利用)  ボードで実際に演習を交えて実施(雑誌付録ボー ド RX62n)+E1 デバッガ  ソースコードをステップベースで解説していきま す。    (SSP は省ステップなので可能)  SSP 本来の機能からカーネル機能拡張(待ち状態 を追加)作業を演習実施。 dly_tsk を実装してい きます。
  6. 6. 講習のサンプル  ソースコード解説の例  カーネル拡張の例
  7. 7. カーネルコード解説  sta_ker() から始まる。  マルチタスクになる前段 階の処理  ブート一回目だけの処理 としてカーネルオブジェ クトの生成がある。  SSP はカーネルオブジェ クトといってもタスクの み  TCB の初期設定をする。  最後にディスパッチャを 呼ぶ void sta_ker(void) { initialize_object(); kerflg = true; intnest = 0; dispatcher(); }
  8. 8. カーネルコード解説 2  ディスパッチャ部分  これは、途中で待ちになら ない SSP 特有のディスパ ッチ処理。  優先度の高いタスクにプリ エンプトはするが、待ち状 態にはならないから、タス クの高いタスクが終了して から低いタスクの起動はこ ういう単純な呼び出しでよ い。  さらに SSP はスタック共 有型なのでスタックを切り 替える必要はない。
  9. 9. カーネルコード解説 3  スケジューラは、今の レディーキューから、 次にディスパッチする タスクを選ぶ処理。  レディーキューの構造 に依存するが、 SSP は 単純なビットマップの み uint_t search_schedtsk(void) { return primap_search(); }
  10. 10. カーネルコード解説 4 ER act_tsk(ID tskid) { ER ercd; uint_t tskpri; LOG_ACT_TSK_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); tskpri = get_ipri_self(tskid); t_lock_cpu(); if (test_dormant(tskpri)) { if(make_active(tskpri)) { run_task(tskpri); } ercd = E_OK; } else { ercd = E_QOVR; } t_unlock_cpu(); error_exit: LOG_ACT_TSK_LEAVE(ercd); return(ercd); }
  11. 11. カーネルコード解説 5  最後は、ユーザーからの OS 呼び出しである。  タスクの起動で、基本はまずレディーキューに指 定したタスクの TCB をキューイングする  カーネルの最後(遅延ディスパッチで)今の最優 先タスクを動かす。  SSP は単純にサブルーチンコールしかしていない ので、  タスクは常に頭から動くが、プリエンプトされて 復帰するケースは  自タスクよりも高いタスクを起動した場合。  起動されたタスクが終了した時点で、タスク起動 後に戻ればいいのでサブルーチンコールするのと 同じ作りで実現している
  12. 12. タスクスイッチの例 ( 追加ペー ジ)  タスク 2 が RUN 中に、 act_tsk() でタス ク 1 を起動  タスク 1 が優先度が高い場合  タスク 1 がサブルーチンコールされる動き タスク2 中断 実行 タスク1 時間 act_tsk(task1) 呼び出し
  13. 13.  移植対応部 アセンブリ言語
  14. 14. 割込み時のタスクスイッチの例(追加ペ ージ)  Task2 が RUN 中に割り込みが発生  割込みハンドラで iact_tsk(task1) を呼び 出  Task1 が優先度高い 0 1 2 3 4 5 割り込み処理 Task2 割り込み発生 Task1 時間 Copyright (C) Reserved 2010 Embedded Systems Co., 割り込み発生 iact_tsk(task1) Running Ready Dormant
  15. 15. カーネル (RTOS) 仕様
  16. 16. シュリンク版  SourceForge に公開  http://sourceforge.jp/projects/shrink-sp-rx62n/  本物との違い  割込みベクターの登録およびスタートアップの削 除  OS なし環境を流用  なぜ作ったか?  SSP カーネルの簡潔な処理に比較して割り込みベ クタ関係の処理の難度が高く、コード量も多い。 カーネルを学ぶために必要な部分だけ残した。そ れで動くことが必要と考えた
  17. 17. TOPPERS/SSP のカスタマイズ フル改造編  (1)待ち状態を持つカーネルの設計  (2)実装    イ.コンテキストの保存と復元    ロ.サービスコール部の作成  (3) dly_tsk の追加    イ.実装に必要な項目の整理    ロ.指定時間待ちの実装 (dly_tsk)  (4)評価・改善    イ.制作したカーネルを用いる際の問題点の把握    ロ.問題点の改善
  18. 18. (1)待ち状態を持つカーネルの設計  待ちを持つということは  タスクが  run --> wait --> dormant      wait --> ready  中断したところから再開しなければならな い。
  19. 19. コンテキストの保存と復元  1. コンテキストの保存エリアを検討する。  2. コンテキストからタスクが復帰する仕組 みでのタスク起動部を実装する  3. タスクスイッチする場合にコンテキスト の保存と復帰をします。  タスクがスイッチするときにコンテキスト を保存 / 復帰するように実装する。
  20. 20. longjmp/setjmp の利用  コンテキストの保存領域を渡して call すれば、そ こに保存される。  割込みには対応できないので工夫が必要  シュリンク版の移植性を考慮して C でできるだけ 実装
  21. 21. longjmp/setjmp の限界  RTOS のコンテキスト保存 は、 longjmp/setjmp だけでは、すべて の場合に対応できません。  少なくとも戻り値が、 R1 レジスタが保存 されないことがある。  割り込みには対応できない  割り込み部でレジスタ保存 / 復帰を補完す る必要がある。
  22. 22. Longjmp/setjmp の考え方  Setjmp はコンパイラが把握    OS 呼び出しの場合は、 setjmp を使い、これ はコンパイラが把握できる。 Setjmp から戻る場 合は、レジスタ一式が復帰して jmp してくるが 保存を必要としない一部のレジスタを壊しても続 行できる。  割込みはコンパイラが把握できない   割り込みの場合はコンパイラが把握していない ため、どこでどのレジスタを壊していいというこ とがなくなる。
  23. 23. 今後の展開  ポリテクセミナーの内容(プラットフォー ム)の見直し  SSP シュリンク版の拡張
  24. 24. セミナのプラットフォーム
  25. 25. シュリンク版のこれから  ハード依存部が少ないことから移植がしや すいはず    raspberry pi に移植しました      (baremetal 環境) http://www.slideshare.net/alvstakahash i/raspberry-pi-toppers-ssp
  26. 26. シュリンク版の展望
  27. 27. ありがとうございました  ポリテクセンター兵庫 在職者研修 http://www3.jeed.or.jp/hyogo/poly/contents/holding/index.html 正式名称 独立行政法人高齢・障害・求職者雇用支援機構 兵庫職業訓練支援センター 兵庫職業能力開発促進センター  アライブビジョンソフトウエア株式会社 http://homepage3.nifty.com/ALVS/  Facebook https://www.facebook.com/firstandlastandallways ありがとうございました

×