JP2016029547A - 実行モジュール生成装置、及び電子制御装置 - Google Patents

実行モジュール生成装置、及び電子制御装置 Download PDF

Info

Publication number
JP2016029547A
JP2016029547A JP2014151889A JP2014151889A JP2016029547A JP 2016029547 A JP2016029547 A JP 2016029547A JP 2014151889 A JP2014151889 A JP 2014151889A JP 2014151889 A JP2014151889 A JP 2014151889A JP 2016029547 A JP2016029547 A JP 2016029547A
Authority
JP
Japan
Prior art keywords
source code
application
module
execution
object module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2014151889A
Other languages
English (en)
Inventor
充弘 谷
Mitsuhiro Tani
充弘 谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Denso Corp
Original Assignee
Denso Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Denso Corp filed Critical Denso Corp
Priority to JP2014151889A priority Critical patent/JP2016029547A/ja
Publication of JP2016029547A publication Critical patent/JP2016029547A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】条件に応じて異なる処理を実行する際に、いずれの処理を実行する場合であっても、迅速に処理を実行し得る実行モジュールを生成すること。【解決手段】実行モジュール生成装置は、ソースコードC11が第一モードで作動する第一アプリケーションのソースコードである場合、所定の処理に対応してリンクされるオブジェクトモジュールとして第一オブジェクトモジュールC13を静的にリンクすることにより、第一の処理を所定の処理として実行する実行モジュールC30を生成し、ソースコードC21が第一モードとは異なる第二モードで作動する第二アプリケーションのソースコードである場合、所定の処理に対応してリンクされるオブジェクトモジュールとして第二オブジェクトモジュールC23を静的にリンクすることにより、第一の処理とは異なる第二の処理を所定の処理として実行する実行モジュールC30を生成する。【選択図】図4

Description

本発明は、実行モジュール生成装置、及び電子制御装置に関する。
車載用の電子制御装置(ECU;Electronic Control Unit)のソフトウェアを標準化するための規格の一つとして、AUTOSAR(Automotive Open System Architecture)において策定された規格(以下、AUTOSAR規格と称する。)が知られている。
AUTOSAR規格には、車載用リアルタイムOS(以下、AUTOSAR−OSと称する。)が用意され、電子制御装置に搭載されるアプリケーションの作動モード(以下、アプリケーションモードとも称する。)として、二種類の作動モードが規定されている。一方の作動モードで作動するアプリケーションは、「trusted OS-Application(信頼できるアプリケーション)」と呼ばれ、他方の作動モードで作動するアプリケーションは、「non-trusted Application(信頼されないアプリケーション)」と呼ばれる。
また、AUTOSAR−OSの仕様では、サービスコール呼び出し時にサービスプロテクションを行うことが要求されている。この仕様に従えば、「trusted OS-Application」と「non-trusted OS-Application」とでは、それぞれで使用できるサービスコールに違いが生じる。例えば、同じサービスコールであっても、「trusted OS-Application」から呼び出せば正常に処理が実行されるのに対し、「non-trusted OS-Application」から呼び出すとエラーになるなど、その挙動に違いがある。
OS(Operating System)が提供するAPI(Application Programming Interface)を使って、OSが有する所定の機能を利用した際に、正常終了するケースとエラーとなるケースがある例としては、例えば特許文献1に示されているような処理を挙げることができる。特許文献1の図8に示されている処理では、API経由で所定の処理が呼び出された際に、呼び出される側のルーチンで動的にエラー判定を行う(S21,S22,S12,S13)。そして、その判定結果に応じて、所定の処理を正常に実行する場合もあれば(S24,S14)、所定の処理を実行することなく異なる挙動を示す場合(例えばエラー処理を実行する場合)もある(S23,S15)。
特開2012−194845号公報
しかしながら、上述の例のように、呼び出された側のルーチンにおいて、当該ルーチンが呼び出されるたびに動的にエラー判定を実行するように構成すると、そのような判定を行うために必要な処理も含めて、相応の処理時間を要する。そのため、このような判定手法を採用することは、サービスコールの実行速度が低下する要因の一つとなり得る。
例えば、AUTOSAR規格に準拠したアプリケーションの場合、呼び出された側のルーチン(サービスコール側。)において、「trusted OS-Application」なのか「non-trusted OS-Application」なのかを判定したい場合には、まず、実行中タスクIDを取り出す処理を行う。そして、取り出したIDに基づいてタスク構成情報テーブルを参照し、アプリケーションの作動モードを取り出す処理を行う。その上で、その作動モードから「trusted OS-Application」なのか「non-trusted OS-Application」なのかを判断し、その判断結果に対応する処理を実行することになる。
しかし、これら一連の処理を実行するには、ROMの読み出しや、テーブル内を参照するためのオフセット計算などが必要になる。そのため、これら一連の処理を実行するために相応の処理時間を要し、これがサービスコールを呼び出したときの応答速度を低下させる原因になる。
以上のような事情から、条件に応じて異なる処理を実行する際に、いずれの処理を実行する場合であっても、迅速に処理を実行し得る実行モジュールを生成可能な実行モジュール生成装置と、そのような実行モジュールを備えた電子制御装置を提供することが望ましい。
以下に説明する実行モジュール生成装置は、ソースコードをコンパイルしてオブジェクトモジュールを生成し、生成されたオブジェクトモジュールを含む複数のオブジェクトモジュールを静的にリンクすることによって実行モジュールを生成可能に構成されている。
この実行モジュール生成装置は、ソースコード中に所定の処理の実行を要求する処理ステップが記述されている場合に、ソースコードが第一モードで作動することが規定された第一アプリケーションのソースコードである場合には、所定の処理に対応してリンクされるオブジェクトモジュールとして第一オブジェクトモジュールを静的にリンクする。これにより、第一の処理を所定の処理として実行する実行モジュールを生成する。
一方、この実行モジュール生成装置は、ソースコード中に所定の処理の実行を要求する処理ステップが記述されている場合に、ソースコードが第一モードとは異なる第二モードで作動することが規定された第二アプリケーションのソースコードである場合には、所定の処理に対応してリンクされるオブジェクトモジュールとして第二オブジェクトモジュールを静的にリンクする。これにより、第一の処理とは異なる第二の処理を所定の処理として実行する実行モジュールを生成する。
このように構成された実行モジュール生成装置によって実行モジュールを生成すれば、ソースコードが、第一アプリケーション又は第二アプリケーションいずれのソースコードであるのかに応じて、ソースコード中に記述された所定の処理が同一であっても、その所定の処理に対応してリンクされるオブジェクトモジュールが変わる。
そのため、例えば、第一オブジェクトモジュールについては、第一アプリケーションから呼び出されることを前提にして作成されたルーチンを備えていればよい。また、例えば、第二オブジェクトモジュールについては、第二アプリケーションから呼び出されることを前提にして作成されたルーチンを備えていればよい。
よって、第一オブジェクトモジュール及び第二オブジェクトモジュールのいずれにおいても、第一アプリケーション又は第二アプリケーションのいずれから呼び出されたのかを判断する処理は不要となる。また、そのような判断に必要な情報を取得する処理も不要となる。したがって、それらの処理が不要となる分だけ、各アプリケーションで所定の処理の実行を要求した場合の処理速度を向上させることができる。
また、第一オブジェクトモジュール及び第二オブジェクトモジュールのそれぞれについては、条件に応じて分岐する処理が不要となる。そのため、各オブジェクトモジュールの試験時にはテストケースを削減でき、予期しない処理へ分岐するおそれがない分だけ処理の信頼性向上を図ることもできる。
また、以下に説明する電子制御装置は、OSと、OSの制御下で作動する複数のアプリケーションが組み込まれている。複数のアプリケーションには、第一モードで作動することが規定されたアプリケーションと、第一モードとは異なる第二モードで作動することが規定されたアプリケーションとが含まれる。
これらの各アプリケーションは、ソースコードをコンパイルしてオブジェクトモジュールを生成し、生成されたオブジェクトモジュールを含む複数のオブジェクトモジュールを静的にリンクすることによって生成された実行モジュールによって構成される。
この実行モジュールは、ソースコード中に所定の処理の実行を要求する処理ステップが記述されている場合に、第一アプリケーションのソースコードである場合には、所定の処理に対応してリンクされるオブジェクトモジュールとして第一オブジェクトモジュールを静的にリンクすることにより、第一の処理を所定の処理として実行する実行モジュールとして構成される。
一方、ソースコード中に所定の処理の実行を要求する処理ステップが記述されている場合に、ソースコードが第二アプリケーションのソースコードである場合には、所定の処理に対応してリンクされるオブジェクトモジュールとして第二オブジェクトモジュールを静的にリンクすることにより、第一の処理とは異なる第二の処理を所定の処理として実行する実行モジュールとして構成されている。
このように構成された電子制御装置によれば、第一アプリケーション及び第二アプリケーションそれぞれの実行モジュールが、上述のように構成されている。そのため、各アプリケーションのソースコードレベルでは、同様に所定の処理を実行する旨の記述がなされていても、実行モジュールレベルでは、第一アプリケーションの場合は第一の処理が実行され、第二アプリケーションの場合は第二の処理が実行される。
しかも、各アプリケーションで第一の処理又は第二の処理を実行するに当たって、第一アプリケーションの場合は上述のような第一オブジェクトモジュールをリンクし、第二アプリケーションの場合は上述のような第二オブジェクトモジュールをリンクする構成とされている。
そのため、第一オブジェクトモジュール及び第二オブジェクトモジュールのいずれにおいても、第一アプリケーション又は第二アプリケーションのいずれから呼び出されたのかを判断する処理は不要となる。また、そのような判断に必要な情報を取得する処理も不要となる。したがって、それらの処理が不要となる分だけ、各アプリケーションで所定の処理の実行を要求した場合の処理速度を向上させることができる。
また、第一オブジェクトモジュール及び第二オブジェクトモジュールのそれぞれについては、条件に応じて分岐する処理が不要となる。そのため、各オブジェクトモジュールの試験時にはテストケースを削減でき、予期しない処理へ分岐するおそれがない分だけ処理の信頼性向上を図ることもできる。
なお、特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本発明の技術的範囲を限定するものではない。
電子制御装置(ECU)の構成を示すブロック図。 電子制御装置に搭載されるソフトウェアの構成を示す説明図。 実行モジュール生成装置の構成を示すブロック図。 第一実施形態における実行モジュールの生成手順を示す説明図。 第二実施形態における実行モジュールの生成手順を示す説明図。 ソースコードの一例を示す説明図。
次に、上述の実行モジュール生成装置、及び電子制御装置について、例示的な実施形態を挙げて説明する。
(1)第一実施形態
[電子制御装置の構成]
図1に示すように、車載用の電子制御装置(Electronic Control Unit;以下、ECUと略称する。)1は、CPU2、ROM3、RAM4、及びCAN(Controller Area Network)コントローラ5など、周知のハードウェアを備えている。これらCPU2、ROM3、RAM4、及びCANコントローラ5は、内部バス6を介して相互に接続されている。また、CANコントローラ5はCAN8に接続されている。これにより、ECU1は、CAN8を介して他のECUと通信可能に構成されている。
また、ECU1には、ソフトウェアとして、AUTOSAR−OS、及びAUTOSAR−OSの制御下で作動する各種アプリケーションプログラムが搭載されている。これらのソフトウェアは、ROM3に記憶されている。ECU1の作動時には、ROM3に記憶されたソフトウェアがCPU2によって読み出され、CPU2が各種プログラムに従って所定の処理を実行することにより、ECU1においてOS及びアプリケーションが機能する状態になる。
[電子制御装置上で作動するソフトウェアの一例]
上述のECU1の作動時には、まず上述のAUTOSAR−OSが作動する。そして、AUTOSAR−OSの制御下で、各種アプリケーションが作動する。AUTOSAR−OSの制御下で作動するアプリケーションは、既に言及した通り、「trusted OS-Application」と、「non-trusted OS-Application」に分類される。各アプリケーションが「trusted OS-Application」又は「non-trusted OS-Application」のいずれに該当するのかは、ソースコードレベルで規定されている。そのため、各アプリケーションの作動モードが、各アプリケーションの作動時に動的に変更されることはない。
「trusted OS-Application」と「non-trusted OS-Application」とでは、それぞれにおいて使用できるサービスコールやサービスコールの動作が異なる。一例を挙げれば、サービスコールの一つに該当する「ShutdownOS」については、「trusted OS-Application」からから呼び出されたときの動作と「non-trusted OS-Application」から呼び出されたときの動作が異なる。これは、AUTOSAR−OSの規格として取り決められている事項である。
そのため、第一実施形態では、上記ECU1に搭載されるアプリケーションの実行モジュールを生成する際に、「trusted OS-Application用カーネル」と「non-trusted OS-Application用カーネル」とをそれぞれ用意し、各アプリケーション単位で一次リンク作業を行っている。この一次リンク作業により、サービスコールの呼び出しについて解決を行った後、更に二次リンク作業を行うことにより、他のOSカーネルとのリンクも行うことで、ECU1に搭載される実行モジュール群が生成される。
例えば、図2に示す事例の場合、オブジェクトモジュール11は、「trusted OS-Application」のソースコードをコンパイルすることによって生成される。このソースコード中で「ShutdownOS」を呼び出している場合、一次リンク作業を行う際には、「trusted OS-Application」用のカーネルモジュール12を含むカーネルライブラリが選択されて、一次リンク作業が行われる。
一方、オブジェクトモジュール13は、「non-trusted OS-Application」のソースコードをコンパイルすることによって生成される。このソースコード中で「ShutdownOS」を呼び出している場合、一次リンク作業を行う際には、「trusted OS-Application」用のカーネルモジュール14を含むカーネルライブラリが選択されて、一次リンク作業が行われる。
そして、これら各アプリケーションの一次リンクを終えた後に、更に二次リンク作業を行うことで、他のOSカーネルモジュール15とのリンクも行われる。「trusted OS-Application」のオブジェクトモジュール11において「ShutdownOS」が呼ばれた場合は、「trusted OS-Application」に組み込まれた「trusted OS-Application」用のカーネルモジュール12が機能し、それに伴ってOSカーネルモジュール15も機能する。一方、「non-trusted OS-Application」のオブジェクトモジュール13において「ShutdownOS」が呼ばれた場合は、「non-trusted OS-Application」に組み込まれた「non-trusted OS-Application」用のカーネルモジュール14が機能する。この場合は、「non-trusted OS-Application」に対する機能制限に起因して、OSカーネルモジュール15に対する情報伝達は実施されず、OSカーネルモジュール15は機能しない。
このように「trusted OS-Application」用のカーネルモジュール12と、「non-trusted OS-Application」用のカーネルモジュール14とを、それぞれ個別に用意して各アプリケーションに組み込んでおけば、カーネルモジュール12については、必ず「trusted OS-Application」に組み込まれることが保証される。また、カーネルモジュール14については、必ず「non-trusted OS-Application」に組み込まれることが保証される。
したがって、カーネルモジュール12の内部処理では、「trusted OS-Application」から呼び出されたのか否かを判定する処理や、その判定結果に応じて処理を分岐させる対応を行わなくても、常に「trusted OS-Application」から呼び出された場合に対応する処理を実施すればよい。また、カーネルモジュール14の内部処理では、「non-trusted OS-Application」から呼び出されたのか否かを判定する処理や、その判定結果に応じて処理を分岐させる対応を行わなくても、常に「non-trusted OS-Application」から呼び出された場合に対応する処理を実施すればよい。
[実行モジュール生成装置の構成]
図3に示すように、実行モジュール生成装置として機能するパーソナルコンピュータ(Personal Computer;以下PCと略称する。)20は、制御部21、記憶部22、表示部23,及び入力部24など、周知のハードウェアを備えている。制御部21は、周知のCPU211、ROM212、RAM213、及びインターフェース部214などを備える。
記憶部22は、ハードディスク装置などによって構成され、各種プログラムや各種データを記憶可能に構成されている。表示部23は、液晶ディスプレイ装置などによって構成され、制御部21から出力される映像信号に基づいて各種情報を表示可能に構成されている。入力部24は、ポインティングデバイス(例えばマウス等。)やキーボードなどによって構成され、利用者が所定の入力操作を実施することで、その入力操作に応じた入力信号を制御部21が入力可能に構成されている。
また、このPC20には、ソフトウェアとして、OS、及びOSの制御下で作動する各種アプリケーションプログラムがインストールされている。アプリケーションプログラムとしては、後述するコンパイラ31やリンケージエディタ32(図4参照。)がインストールされている。
[実行モジュールの生成手順の一例]
PC20において、「trusted OS-Application」の実行モジュールを生成する場合は、図4に示すように、ソースコードC11をコンパイラ31によってコンパイルすることにより、オブジェクトモジュールC12が生成される。このコンパイル工程において、コンパイラ31はソースコードC11を解析し、ソースコードC11が「trusted OS-Application」又は「non-trusted OS-Application」のいずれのソースコードなのかを判断する。ここでは、ソースコードC11が「trusted OS-Application」のソースコードであると判断され、その旨の情報が所定の記憶領域に記録される。
続いて、リンケージエディタ32は、コンパイル工程で記録された情報に基づき、「trusted OS-Application」用のカーネルライブラリ33を選択する。カーネルライブラリ33には、AUTOSAR−OSによって提供される機能に対応する様々なオブジェクトモジュールが登録されている。上述の「ShutdownOS」に対応するオブジェクトモジュールなどもカーネルライブラリ33に含まれている。
コンパイル工程で生成されたオブジェクトモジュールC12中で、「ShutdownOS」を呼び出している場合、リンケージエディタ32は、コンパイル工程で生成されたオブジェクトモジュールC12と、選択したカーネルライブラリ33に登録された「ShutdownOS」のオブジェクトモジュールC13とをリンクする。これにより、一次リンク済みオブジェクトモジュールC14が生成される。
一方、PC20において、「non-trusted OS-Application」の実行モジュールを生成する場合は、ソースコードC21をコンパイラ31によってコンパイルすることにより、オブジェクトモジュールC22が生成される。このコンパイル工程においても、コンパイラ31はソースコードC21を解析し、ここではソースコードC21が「non-trusted OS-Application」のソースコードであると判断されて、その旨の情報が所定の記憶領域に記録される。
続いて、リンケージエディタ32は、コンパイル工程で記録された情報に基づき、「non-trusted OS-Application」用のカーネルライブラリ34を選択する。カーネルライブラリ34には、AUTOSAR−OSによって提供される機能に対応する様々なオブジェクトモジュールが登録されている。上述の「ShutdownOS」に対応するオブジェクトモジュールなどもカーネルライブラリ34に含まれている。
ただし、先に説明したカーネルライブラリ33は、「trusted OS-Application」用であったのに対し、カーネルライブラリ34は、「non-trusted OS-Application」用である。そのため、カーネルライブラリ33,34それぞれに上述の「ShutdownOS」に対応するオブジェクトモジュールC13,C23が含まれているものの、それらの処理内容は異なるものとされている。
コンパイル工程で生成されたオブジェクトモジュールC22中で、「ShutdownOS」を呼び出している場合、リンケージエディタ32は、コンパイル工程で生成されたオブジェクトモジュールC22と、選択したカーネルライブラリ34に登録された「ShutdownOS」のオブジェクトモジュールC23とをリンクする。これにより、一次リンク済みオブジェクトモジュールC24が生成される。
カーネルライブラリ33に含まれるオブジェクトモジュールC13と、カーネルライブラリ34に含まれるオブジェクトモジュールC23は、双方とも「ShutdownOS」という同じシンボル(関数名)に対応付けられている。しかし、これらのカーネルライブラリ33,34は、同時に併用されることはなく、いずれか一方がリンケージエディタ32によって択一的に選択されて、アプリケーション単位でオブジェクトモジュール間のリンクが解決される。したがって、「trusted OS-Application」のリンク時にカーネルライブラリ34が利用されることはなく、「non-trusted OS-Application」のリンク時にカーネルライブラリ33が利用されることもない。
このようにして生成された一次リンク済みオブジェクトモジュールC14,C24は、更にリンケージエディタ32によって、「trusted OS-Application」及び「non-trusted OS-Application」の双方で共用されるOSカーネルモジュール35ともリンクされ、二次リンク済み実行モジュール群C30が生成される。なお、二次リンク済み実行モジュール群C30は、ECU1が備えるROM3(例えば、フラッシュメモリやマスクROM等。)に書き込まれる。
[第一実施形態の効果]
以上説明したようなECU1によれば、サービスコール(例えば、「ShutdownOS」。)が呼び出された際に、呼び出し元が「trusted OS-Application」であれば、「trusted OS-Application」に対応した処理を実行することができる。また、呼び出し元が「non-trusted OS-Application」であれば、「non-trusted OS-Application」に対応した処理を実行することができる。
しかも、サービスコールが呼び出された際に、「trusted OS-Application」に対応した処理を実行するか、「non-trusted OS-Application」に対応した処理を実行するかは、静的解析、静的な設計により、リンケージエディタ32によるリンク時に確定している。そのため、呼び出されたサービスコール側では、「trusted OS-Application」から呼び出されたのか、「non-trusted OS-Application」から呼び出されたのかを、動的に判断する必要がなく、そのような判断に必要な情報を取得する必要もなく、判断結果に応じて異なる処理を実行する必要もない。
したがって、これらアプリケーションモードの判定にかかる処理を省略することができ、その分だけ迅速に処理を完了させることができる。よって、サービスコールの実行速度が低下するのを避けつつ、確実にアプリケーションごとのアプリケーションモードに応じた機能を実現することができる。また、それぞれのサービスコールのプログラムについては、判定条件が少ないシンプルな処理手順になるので、その分だけテストケースの削減ができ、カーネル自体の信頼性向上にもつながる。
なお、電子制御装置1に搭載される各アプリケーションは、製造段階やメンテナンス段階でフラッシュメモリやマスクROM等に書き込まれるが、実行時にプログラムが書き換えられることはない。そのため、各アプリケーションが「trusted OS-Application」であるのか「non-trusted OS-Application」であるのかが動的に変化することはなく、各アプリケーションの作動モードは、コンパイル段階における静的な解析で特定することができる。
上記実施形態では、このような特徴を利用し、「ShutdownOS」に対応するオブジェクトモジュールC13,C23をアプリケーションモードごとに用意し、これらをリンク段階で静的にリンクすることで、動的なアプリケーションモード判定等を省略してパフォーマンス向上している。しかも、「ShutdownOS」に対応するオブジェクトモジュールC13,C23をアプリケーションモードごとに用意することで、サービスコール呼び出し時のサービスプロテクションを適切に実施することができ、これにより、信頼性の確保をも実現することができる。
(2)第二実施形態
次に、第二実施形態について説明する。なお、第二実施形態は、基本的な構成は第一実施形態と同様であるため、共通する構成については説明を省略し、相違点を中心に説明する。
[実行モジュールの生成手順の一例]
上述の第一実施形態では、「trusted OS-Application」用のカーネルライブラリ33と、「non-trusted OS-Application」用のカーネルライブラリ34とを、それぞれ個別に用意し、リンケージエディタ32によるリンク工程で、カーネルライブラリ33,34のいずれかを選択していた。
これに対し、以下に説明する第二実施形態では、ソースコードのコンパイル時に、「trusted OS-Application」又は「non-trusted OS-Application」のいずれに対応するソースコードなのかに応じて、選択的にソースコードの一部を置換することで、所期の実行モジュールを生成している。
より詳しく説明すると、第二実施形態において、「trusted OS-Application」の実行モジュールを生成する場合は、図5に示すように、ソースコードC41をコンパイラ31によってコンパイルすることにより、オブジェクトモジュールC42が生成される。このコンパイル工程において、コンパイラ31はソースコードC41を解析し、ソースコードC41が「trusted OS-Application」用のソースコードであれば、所定の関数を呼び出す記述を「trusted OS-Application」用の関数を呼び出す記述に置換する。また、「non-trusted OS-Application」の実行モジュールを生成する場合は、ソースコードC51をコンパイラ31によってコンパイルすることにより、オブジェクトモジュールC52が生成される。このコンパイル工程において、コンパイラ31はソースコードC51を解析し、ソースコードC51が「non-trusted OS-Application」用のソースコードであれば、所定の関数を呼び出す記述を「non-trusted OS-Application」用の関数を呼び出す記述に置換する。
本実施形態において、これら所定の関数に対する置換処理は、図6に示すような、インライン機能を利用したプロトタイプ宣言をソースコード中に加えることによって実現している。図6に示すソースコードは、ソースコードC41,C51それぞれをコンパイルする際に、各ソースコードC41,C51中に書き加えられる。
図6に示すソースコードは、サービスコールの一つに該当する「ActivateTask」を呼び出す記述が各ソースコードC41,C51中に含まれている場合に、「trusted OS-Application」用のソースコードC41であれば、「ActivateTask」を呼び出す記述を「ActivateTask_Trust」を呼び出す記述に置換する。また、「non-trusted OS-Application」用のソースコードC51であれば、「ActivateTask」を呼び出す記述を「ActivateTask_NonTrust」を呼び出す記述に置換する。
各ソースコードC41,C51中に図6に示すソースコードが含まれる場合、図6に示すソースコード中の1行目に記述されている、C99規格のインライン機能を利用したプロトタイプ宣言により、「ActivateTask」を呼び出す記述は、2行目から17行目が展開される。
また、図6に示すソースコード中、4行目にある記述は、定数であるべき「TaskID」が定数であり、かつ、「TaskID」が最小値「MINTASKID」以上であり、かつ、「TaskID」が最大値「MAXTASKID」以下である場合に真(true)となる。「TaskID」は、アプリケーションごとに割り当てられた定数であるため、上記4行目の条件が真となるか否かは、コンパイラ31によるコンパイル時静的解析機能を利用して判断することができる。
また、図6に示すソースコード中、6行目にある記述は、アプリケーションモードを判断する記述であり、ソースコードが「trusted OS-Application」のソースコードである場合に真(true)となる。「アプリケーションモード」も、アプリケーションごとに決められて、それに対応する定数が記述されているため、上記6行目の条件が真となるか否かは、コンパイラ31によるコンパイル時静的解析機能を利用して判断することができる。
そのため、「trusted OS-Application」用のソースコードC41をコンパイルする際には、上述のコンパイル時静的解析機能による判断の結果、8行目の記述だけがコンパイル対象として残される。これにより、「ActivateTask」を呼び出す記述は「ActivateTask_Trust」を呼び出す記述に置換されてからコンパイルされて、オブジェクトモジュールC42が生成されることになる。また、「non-trusted OS-Application」用のソースコードC51をコンパイルする際には、上述のコンパイル時静的解析機能による判断の結果、11行目の記述だけがコンパイル対象として残される。これにより、「ActivateTask」を呼び出す記述は「ActivateTask_NonTrust」を呼び出す記述に置換されてからコンパイルされて、オブジェクトモジュールC52が生成されることになる。
なお、ソースコードに何らかの問題があって、上記4行目の条件が真とならなかった場合には、15行目の記述だけがコンパイル対象として残される。これにより、「ActivateTask」を呼び出す記述は「Static_analysys_error」を呼び出す記述に置換され、この場合も、オブジェクトモジュールは生成される。ただし、「Static_analysys_error」は、カーネルライブラリ37等に登録されていないため、リンク時にエラーとなる。したがって、「Static_analysys_error」のリンクエラーが発生した場合は、そのことをもって、コンパイル対象となったソースコードに何らかの問題があるものと判断でき、間違ったアプリケーションの作成が防止される。
さて、上述のようなコンパイル工程により、オブジェクトモジュールC42,C52が生成されたら、続いて、リンケージエディタ32は、オブジェクトモジュールC42と、カーネルライブラリ37に登録された「ActivateTask_Trust」のオブジェクトモジュールC43とをリンクする。また、リンケージエディタ32は、オブジェクトモジュールC52と、カーネルライブラリ37に登録された「ActivateTask_NonTrust」のオブジェクトモジュールC53とをリンクする。オブジェクトモジュールC43,C53は、第一実施形態の場合とは異なり、異なるシンボル(関数名)が付与されているので、同じカーネルライブラリ37内に共存させることができる。さらに、これらのオブジェクトモジュールは、リンケージエディタ32により、「trusted OS-Application」及び「non-trusted OS-Application」の双方で共用されるOSカーネルモジュール35ともリンクされ、リンク済み実行モジュール群C60が生成される。なお、リンク済み実行モジュール群C60は、ECU1が備えるROM3(例えば、フラッシュメモリやマスクROM等。)に書き込まれる。
[第二実施形態の効果]
第二実施形態において例示した手法で、第一実施形態で例示したようなECU1を構成しても、第一実施形態と全く同様の作用、効果を奏し、サービスコールが呼び出された際に、「trusted OS-Application」に対応した処理を実行するか、「non-trusted OS-Application」に対応した処理を実行するかは、静的解析、静的な設計により、リンケージエディタ32によるリンク時に確定している。そのため、呼び出されたサービスコール側では、「trusted OS-Application」から呼び出されたのか、「non-trusted OS-Application」から呼び出されたのかを、動的に判断する必要がなく、そのような判断に必要な情報を取得する必要もなく、判断結果に応じて異なる処理を実行する必要もない。
したがって、これらアプリケーションモードの判定にかかる処理を省略することができ、その分だけ迅速に処理を完了させることができる。よって、サービスコールの実行速度が低下するのを避けつつ、確実にアプリケーションごとのアプリケーションモードに応じた機能を実現することができる。また、それぞれのサービスコールのプログラムについては、判定条件が少ないシンプルな処理手順になるので、その分だけテストケースの削減ができ、カーネル自体の信頼性向上にもつながる。
[他の実施形態]
以上、実行モジュール生成装置、及び電子制御装置について、例示的な実施形態を挙げて説明したが、本発明は、上述の例示的な実施形態に限定されるものではなく、本発明の技術的思想を逸脱しない範囲内において、様々な形態で実施することができる。
例えば、上記各実施形態では、「ShutdownOS」、「ActivateTask」といった特定のサービスコールを例示しながら技術的特徴を説明したが、上記以外の各種システムコールや標準ライブラリを組み込む場合でも、本技術を適用することができる。
また、上記第一実施形態では、リンク工程を一次リンクと二次リンクに分けて実施する例、上記第二実施形態では、リンク工程を一次リンクと二次リンクには分けずに実施する例を示したが、上記第二実施形態の場合でも、上記第一実施形態同様に、リンク工程を複数段階に分けて実施してもよい。
また、上記各実施形態では、電子制御装置1に搭載されるOSの例として、AUTOSAR−OSを例示したが、OSがAUTOSAR−OSであるか否かは任意である。例えば、AUTOSAR−OSに対して更に仕様を付加した規格のOSや、逆に、AUTOSAR−OSの一部の仕様を削除した規格のOSなどにおいても、本技術を適用することができる。あるいは、AUTOSAR−OSとは全く異なる規格のOSに対しても、本技術を適用することができる。
また、上記実施形態における1つの構成要素が有する機能を複数の構成要素として分散させたり、複数の構成要素が有する機能を1つの構成要素に統合させたりしてもよい。例えば、コンパイラ31は、複数のプロセスが協働してコンパイラ31として機能するように構成されていてもよい。
また、上記実施形態の構成の少なくとも一部を、同様の機能を有する公知の構成に置き換えてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加又は置換してもよい。なお、特許請求の範囲に記載した文言のみによって特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
また、上述した電子制御装置の他、当該電子制御装置を構成要素とするシステム、当該電子制御装置としてコンピュータを機能させるためのプログラム、このプログラムを記録した媒体など、種々の形態で本発明を実現することもできる。
1…電子制御装置(ECU)、2…CPU、3…ROM、4…RAM、5…CANコントローラ、6…内部バス、8…CAN、20…PC(実行モジュール生成装置)、21…制御部、211…CPU、212…ROM、213…RAM、214…インターフェース部、22…記憶部、23…表示部、24…入力部、31…コンパイラ、32…リンケージエディタ、33,34,37…カーネルライブラリ、35…カーネルモジュール。

Claims (5)

  1. ソースコード(C11,C21,C41,C51)をコンパイルしてオブジェクトモジュール(C12,C22,C42,C52)を生成し、前記生成されたオブジェクトモジュールを含む複数のオブジェクトモジュール(C12,C13,C22,C23,C42,C43,C52,C53)を静的にリンクすることによって実行モジュール(C30,C60)を生成可能に構成されており、
    前記ソースコード中に所定の処理の実行を要求する処理ステップが記述されている場合に、前記ソースコードが第一モードで作動することが規定された第一アプリケーションのソースコード(C11,C41)である場合には、前記所定の処理に対応してリンクされるオブジェクトモジュールとして第一オブジェクトモジュール(C13,C43)を静的にリンクすることにより、第一の処理を前記所定の処理として実行する実行モジュールを生成する一方、前記ソースコードが前記第一モードとは異なる第二モードで作動することが規定された第二アプリケーションのソースコード(C21,C51)である場合には、前記所定の処理に対応してリンクされるオブジェクトモジュールとして第二オブジェクトモジュール(C23,C53)を静的にリンクすることにより、前記第一の処理とは異なる第二の処理を前記所定の処理として実行する実行モジュールを生成するように構成されている
    実行モジュール生成装置。
  2. 請求項1に記載の実行モジュール生成装置であって、
    前記ソースコードが、前記第一アプリケーションのソースコードであるのか、前記第二アプリケーションのソースコードであるのかを、前記ソースコード中の記述に基づいて解析し、その解析結果に応じて、前記第一オブジェクトモジュール又は前記第二オブジェクトモジュールのいずれか一方を静的にリンクするように構成されている
    実行モジュール生成装置。
  3. 請求項2に記載の実行モジュール生成装置であって、
    前記ソースコード(C41,C51)をコンパイルする段階で、前記解析を行って、その解析結果に応じて、前記ソースコード中に記述されている前記所定の処理の実行を要求する処理ステップを、前記第一の処理の実行を要求する処理ステップ又は前記第二の処理の実行を要求する処理ステップのいずれか一方に置換してから、前記置換されたソースコードに基づいてオブジェクトモジュール(C42,C52)を生成することにより、前記生成されたオブジェクトモジュールが前記第一オブジェクトモジュール(C43)又は前記第二オブジェクトモジュール(C53)のいずれか一方が静的にリンクされるオブジェクトモジュールとなるように構成されている
    実行モジュール生成装置。
  4. 請求項2に記載の実行モジュール生成装置であって、
    前記ソースコード(C11,C21)をコンパイルする段階で、前記解析を行って、その解析結果に応じて、前記第一アプリケーションのソースコード(C11)であった場合には、前記所定の処理に対応してリンクされるオブジェクトモジュールとして前記第一オブジェクトモジュール(C13)が含まれるライブラリ(33)を選択する一方、前記第二アプリケーションのソースコード(C21)であった場合には、前記所定の処理に対応してリンクされるオブジェクトモジュールとして前記第二オブジェクトモジュール(C23)が含まれるライブラリ(34)を選択し、前記生成されたオブジェクトモジュールと前記選択されたライブラリ内のオブジェクトモジュールとを含む複数のオブジェクトモジュールを静的にリンクするように構成されている
    実行モジュール生成装置。
  5. OS(Operating System)と、前記OSの制御下で作動する複数のアプリケーションが組み込まれており、
    前記複数のアプリケーションは、第一モードで作動することが規定されたアプリケーションと、前記第一モードとは異なる第二モードで作動することが規定されたアプリケーションとを含み、各アプリケーションは、ソースコード(C11,C21,C41,C51)をコンパイルしてオブジェクトモジュール(C12,C22,C42,C52)を生成し、前記生成されたオブジェクトモジュールを含む複数のオブジェクトモジュール(C12,C13,C22,C23,C42,C43,C52,C53)を静的にリンクすることによって生成された実行モジュール(C30,C60)によって構成され、
    前記実行モジュールは、前記ソースコード中に所定の処理の実行を要求する処理ステップが記述されている場合に、前記第一アプリケーションのソースコード(C11,C41)である場合には、前記所定の処理に対応してリンクされるオブジェクトモジュールとして第一オブジェクトモジュール(C13,C43)を静的にリンクすることにより、第一の処理を前記所定の処理として実行する実行モジュールとして構成され、前記ソースコードが前記第二アプリケーションのソースコード(C21,C51)である場合には、前記所定の処理に対応してリンクされるオブジェクトモジュールとして第二オブジェクトモジュール(C23,C53)を静的にリンクすることにより、前記第一の処理とは異なる第二の処理を前記所定の処理として実行する実行モジュールとして構成されている
    電子制御装置。
JP2014151889A 2014-07-25 2014-07-25 実行モジュール生成装置、及び電子制御装置 Pending JP2016029547A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014151889A JP2016029547A (ja) 2014-07-25 2014-07-25 実行モジュール生成装置、及び電子制御装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014151889A JP2016029547A (ja) 2014-07-25 2014-07-25 実行モジュール生成装置、及び電子制御装置

Publications (1)

Publication Number Publication Date
JP2016029547A true JP2016029547A (ja) 2016-03-03

Family

ID=55435402

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014151889A Pending JP2016029547A (ja) 2014-07-25 2014-07-25 実行モジュール生成装置、及び電子制御装置

Country Status (1)

Country Link
JP (1) JP2016029547A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019215725A (ja) * 2018-06-13 2019-12-19 株式会社デンソー 電子制御装置及びソフトウエア生成方法
JP2022000768A (ja) * 2020-11-10 2022-01-04 北京百度網訊科技有限公司 深層学習ネットワークモデルを構築する方法、装置、電子デバイス、記憶媒体およびコンピュータプログラム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019215725A (ja) * 2018-06-13 2019-12-19 株式会社デンソー 電子制御装置及びソフトウエア生成方法
JP7172155B2 (ja) 2018-06-13 2022-11-16 株式会社デンソー 電子制御装置及びソフトウエア生成方法
JP2022000768A (ja) * 2020-11-10 2022-01-04 北京百度網訊科技有限公司 深層学習ネットワークモデルを構築する方法、装置、電子デバイス、記憶媒体およびコンピュータプログラム
JP7223817B2 (ja) 2020-11-10 2023-02-16 ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド 深層学習ネットワークモデルを構築する方法、装置、電子デバイス、記憶媒体およびコンピュータプログラム

Similar Documents

Publication Publication Date Title
US8954929B2 (en) Automatically redirecting method calls for unit testing
US7886285B2 (en) Combining software executable libraries
KR20090017598A (ko) 소프트웨어를 분석하기 위한 방법 및 시스템
CN106201850B (zh) 一种兼容性测试方法及装置
CN112685410B (zh) 业务规则校验方法、装置、计算机设备及存储介质
US10019598B2 (en) Dynamic service discovery
US20170185784A1 (en) Point-wise protection of application using runtime agent
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
US8479177B2 (en) Attribute based method redirection
CN111897711B (zh) 代码中bug的定位方法、装置、电子设备及可读存储介质
US10275238B2 (en) Hybrid program analysis
US7987457B2 (en) Targeted patching for native generation images
US20100058305A1 (en) Automatic Generation of Language Bindings for Libraries Using Data from Compiler Generated Debug Information
CN114840427A (zh) 一种代码测试、测试用例生成的方法及装置
US8762976B2 (en) Static extensibility models with dynamic languages and scripts
CN113778838B (zh) 二进制程序动态污点分析方法及装置
US20130152049A1 (en) Warning of register and storage area assignment errors
JP2016029547A (ja) 実行モジュール生成装置、及び電子制御装置
US20240036887A1 (en) Intercepting calls to a dynamic library
US11057416B2 (en) Analyze code that uses web framework using local parameter model
CN113778451B (zh) 文件加载方法、装置、计算机系统和计算机可读存储介质
CN110275710B (zh) 一种Java本地接口一致性检查方法及系统、存储介质及终端
JP2009129133A (ja) ソフトウェア部分テストシステム、ソフトウェア部分テスト方法およびソフトウェア部分テスト用プログラム
CN114327497A (zh) 一种代码处理方法、装置及设备
CN111367796A (zh) 应用程序调试方法及装置