(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-07-07
(45)【発行日】2025-07-15
(54)【発明の名称】制御装置、管理方法
(51)【国際特許分類】
G06F 8/654 20180101AFI20250708BHJP
B60R 16/02 20060101ALI20250708BHJP
【FI】
G06F8/654
B60R16/02 660U
(21)【出願番号】P 2021201706
(22)【出願日】2021-12-13
【審査請求日】2023-11-08
(73)【特許権者】
【識別番号】000003207
【氏名又は名称】トヨタ自動車株式会社
(74)【代理人】
【識別番号】110003199
【氏名又は名称】弁理士法人高田・高橋国際特許事務所
(72)【発明者】
【氏名】佐藤 文哉
【審査官】児玉 崇晶
(56)【参考文献】
【文献】特開2000-207681(JP,A)
【文献】特開2021-005148(JP,A)
【文献】特開2018-018186(JP,A)
【文献】特開2002-207599(JP,A)
【文献】特開2012-009938(JP,A)
【文献】特開2020-027666(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/654
B60R 16/02
(57)【特許請求の範囲】
【請求項1】
車両の制御装置であって、
前記車両を制御するソフトウェアを格納する第1の不揮発メモリと、
前記ソフトウェアを実行する1又は複数のプロセッサと
を備え、
前記1又は複数のプロセッサは、
前記ソフトウェアを更新するときに、更新前の旧ソフトウェアを、前記車両に搭載された第2の不揮発メモリに退避させ、前記ソフトウェアを前記第1の不揮発メモリに格納し、
前記ソフトウェアを前記旧ソフトウェアに戻す必要がある場合に、前記第2の不揮発メモリに、更新前の前記旧ソフトウェアが格納されているか否かを判定し、
前記第2の不揮発メモリに前記旧ソフトウェアが格納されている場合に、
前記旧ソフトウェアの暗号鍵が管理センタによって正しく認証されたことを確認した上で、前記第2の不揮発メモリから前記第1の不揮発メモリに前記旧ソフトウェアを格納する
ように構成され、
前記第2の不揮発メモリは、前記制御装置及び他の制御装置の外部に搭載された、前記第1の不揮発メモリとは異なる不揮発メモリであり、前記車両から取り外し可能に構成される
制御装置。
【請求項2】
請求項1に記載の制御装置であって、
前記第1の不揮発メモリは前記ソフトウェアが格納される第1領域と、前記第1領域と異なる領域の第2領域を有し、
前記第2の不揮発メモリから前記第1の不揮発メモリに前記旧ソフトウェアを格納することは、
前記第2の不揮発メモリから非稼働状態の前記第2領域に前記旧ソフトウェアを格納することと、
前記旧ソフトウェアを前記第2領域に格納後、前記第1領域を非稼働状態に切り替え、前記第2領域を稼働状態に切り替えることと
を含む
制御装置。
【請求項3】
請求項2に記載の制御装置であって、
前記1又は複数のプロセッサは、更に、
前記ソフトウェアを更新前の前記旧ソフトウェアに戻す必要がある場合に、前記第1の不揮発メモリの前記第2領域に、前記旧ソフトウェアが格納されているか否かを判定し、
前記第2領域に前記旧ソフトウェアが格納されている場合に、
前記第1領域を非稼働状態に切り替え、前記第2領域を稼働状態に切り替え、
前記車両に搭載された前記第2の不揮発メモリに、更新前の前記旧ソフトウェアが格納されているか否かの判定をスキップする、
制御装置。
【請求項4】
請求項2又は3に記載の制御装置であって、
前記1又は複数のプロセッサは、更に、
前記旧ソフトウェアから前記ソフトウェアへの更新時に、前記ソフトウェアを前記第1の不揮発メモリの非稼働状態の前記第1領域に格納し、格納後、前記第1領域を稼働状態に切り替え、前記第2領域を非稼働状態に切り替え、切り替え後、前記旧ソフトウェアを前記第2の不揮発メモリに退避させる、
制御装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、車両の制御装置、及び制御装置を管理する管理方法に関する。
【背景技術】
【0002】
特許文献1は、コンピュータプログラムに基づいて制御処理を行う制御装置のプログラムの更新が失敗した場合に、安全に復旧するための制御システム及びプログラム更新方法を開示している。複数の制御装置が接続されているシステム系において、対象となる制御装置のプログラムを更新する際に、他の制御装置に更新前のプログラム情報を一時的に退避させる。更新対象の制御装置におけるプログラムの更新が失敗した場合は、退避させたプログラムに書き戻すことでプログラムの復旧を可能とする。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
車両の制御装置は、コンピュータプログラムなどのソフトウェアに基づいて制御処理を行う。ソフトウェアは、機能の追加、利便性の向上などのため、新しいソフトウェアに更新されることがある。ソフトウェアの更新は、通信途絶などが発生すると失敗することがあり、特許文献1には、ソフトウェアの更新が失敗した場合でも復旧を可能とする技術が開示されている。しかし、ソフトウェアの更新が正常に完了した後であっても、更新後のソフトウェアそのものに関して何らかの不具合が発覚し、対応が必要になる場合がある。
【0005】
本開示の目的は、車両の制御装置において、更新後のソフトウェアに関して不具合が発覚した場合に、適切に不具合に対応することのできる技術を提供することにある。
【課題を解決するための手段】
【0006】
第1の観点は、車両の制御装置に関連する。
車両の制御装置は、
車両を制御するソフトウェアを格納する第1の不揮発メモリと、
ソフトウェアを実行する1又は複数のプロセッサと
を備える。
上記1又は複数のプロセッサは、
ソフトウェアを更新前の旧ソフトウェアに戻す必要がある場合に、車両に搭載された第2の不揮発メモリに、更新前の旧ソフトウェアが格納されているか否かを判定し、
第2の不揮発メモリに旧ソフトウェアが格納されている場合に、第2の不揮発メモリから第1の不揮発メモリに旧ソフトウェアを格納する。
【0007】
第2の観点は、制御装置を管理する管理方法に関連する。
制御装置は、車両に搭載され、車両を制御するソフトウェアを格納する第1の不揮発メモリを備える。
管理方法は、
ソフトウェアを更新前の旧ソフトウェアに戻す必要がある場合に、車両に搭載された第2の不揮発メモリに、更新前の旧ソフトウェアが格納されているか否かを判定することと、
第2の不揮発メモリに旧ソフトウェアが格納されている場合に、第2の不揮発メモリから第1の不揮発メモリに旧ソフトウェアを格納することと、
を含む。
【発明の効果】
【0008】
本開示によれば、車両の制御装置において、ソフトウェアに関して不具合が発覚した場合に、適切に不具合に対応することができる。
【図面の簡単な説明】
【0009】
【
図1】本実施の形態に係る車両の構成例を説明するためのブロック図である。
【
図2】本実施の形態に係る車両の構成例を示すブロック図である。
【
図3】本実施の形態に係る車両の他の構成例を示すブロック図である。
【
図4】本実施の形態に係る第1の不揮発メモリの例を説明するための概念図である。
【
図5】本実施の形態に係るロールバックに関連する処理の第1の例を説明するための概念図である。
【
図6】本実施の形態に係るロールバックに関連する処理の第1の例を説明するための概念図である。
【
図7】本実施の形態に係るロールバックに関連する処理の第1の例を示すフローチャートである。
【
図8】本実施の形態に係るバックアップに関連する処理の例を示すフローチャートである。
【
図9】本実施の形態に係るロールバックに関連する処理の第2の例を示すフローチャートである。
【
図10】本実施の形態に係るロールバックに関連する処理の第3の例を説明するための概念図である。
【発明を実施するための形態】
【0010】
添付図面を参照して、本開示の実施の形態を説明する。
【0011】
1.概要
本実施の形態に係る制御装置は、車両の制御装置である。制御装置は、メモリ及びプロセッサを備え、メモリに格納されたソフトウェアをプロセッサが実行することにより車両の制御を行う。車両の制御装置としてはECU(Electronic Control Unit)が代表的である。ECUを含む車両は、例えば
図1のように構成される。
【0012】
図1には、車両1000及び管理サーバ2000が図示されている。管理サーバ2000は、ソフトウェアの登録や配信などの管理を行うサーバである。ソフトウェアの配信は、無線通信又は有線通信により行われ、無線通信により行われる場合は、管理サーバ2000はOTA(Over the Air)サーバと呼ばれることもある。車両1000は、ECU100及び通信装置200を含む。車両1000は、ECU100以外にも、図示しない他のECUを含んでいても良い。通信装置200は、車両1000の外部と通信可能に構成され、例えば、ソフトウェアの更新の際に管理サーバ2000と通信を行う。ECU100は、不揮発メモリ10、RAM(Random Access Memory)20、及びプロセッサ30を含む。プロセッサ30は、1つのプロセッサであっても良いし、複数のプロセッサから成っていても良い。
【0013】
車両1000の制御を行うためのソフトウェアは、不揮発メモリ10に格納される。不揮発メモリ10は、ソフトウェアを1つのみ格納することもできるし、複数のソフトウェアを同時に格納することもできる。ECU100が起動されると、ブートソフトウェアと呼ばれる図示しないソフトウェアにより、不揮発メモリ10に格納されたソフトウェアのうち、実際に車両1000の制御に使用されるソフトウェアがRAM20に読み出される。そして、読み出されたソフトウェアをプロセッサ30が実行することにより車両1000の制御が行われる。ソフトウェアをRAM20に読み出し、プロセッサ30に実行させることを、ソフトウェアの起動と言う。以下、特に断りのない限り、ソフトウェアというときは、車両1000の制御を行うためのソフトウェアのことを言うものとする。
【0014】
ソフトウェアは、機能を追加するため、不具合の解消のため、あるいはより快適な車両の制御のためなど様々な理由により、新しいソフトウェアに更新されることがある。ソフトウェアの更新は、例えば、管理サーバ2000が、通信装置200を介してデータを配信することにより行われる。あるいは、車両1000の外部のコンピュータからの書込みにより行われても良い。管理サーバ2000からデータが配信される場合は、新しいソフトウェアのデータは、ソフトウェアのサプライヤなどにより、管理サーバ2000に登録される。管理サーバ2000は、新しいソフトウェアのデータ、又は更新前のソフトウェアと新しいソフトウェアとの差分データを車両1000に配信する。配信されたデータはRAM20においてソフトウェアに復元処理され、不揮発メモリ10に格納される。
【0015】
不揮発メモリ10への格納が完了すると、新しいソフトウェアに基づいて車両1000の制御が行われる。しかし、更新が完了した後になって、更新前のソフトウェアに戻すことが必要になる場合もある。例えば、ソフトウェアに不具合が含まれていることが発覚した場合などである。ソフトウェアに不具合が含まれているとは、ソフトウェアにバグが見つかった場合や、ソフトウェアが正常に稼働しない場合、実際には問題を起こしていないが正常に稼働しなくなる可能性がある場合などを含む。
【0016】
例えば、不揮発メモリ10に格納されていたVer5.0のソフトウェアをVer.6.0のソフトウェアに更新したところ、Ver6.0のソフトウェアに不具合が含まれていることが発覚したとする。Ver6.0に含まれる不具合を解消した更に新しいソフトウェアが即座に提供されることは少ないため、正常に稼働することがわかっている、更新前のVer5.0のソフトウェアに戻すことが必要になる。
【0017】
このように、車両の制御に用いるソフトウェアを更新前のソフトウェアへ戻すことを、ロールバックと呼ぶ。以下の説明において、更新後の新しいソフトウェアを「ソフトウェアPROG」、ロールバックの対象となる更新前のソフトウェアを「旧ソフトウェアPROG-OLD」と呼ぶ。
【0018】
ロールバックが必要な場面において、旧ソフトウェアPROG-OLDが常に管理サーバ2000に登録されているとは限らない。ロールバックできる旧ソフトウェアPROG-OLDが管理サーバ2000にない場合は、新しいソフトウェアの更新を待たなければいけなくなってしまう。また、管理サーバ2000に旧ソフトウェアPROG-OLDが登録されていたとしても、車両1000の通信状況によっては管理サーバ2000からのロールバックを行えないこともある。
【0019】
そこで、本実施の形態においては、不揮発メモリ10とは異なる不揮発メモリを車両1000に搭載することで、ロールバックを容易にする。以下の説明において、不揮発メモリ10を「第1の不揮発メモリ10」、不揮発メモリ10と異なる不揮発メモリを「第2の不揮発メモリ40」と呼ぶ。第2の不揮発メモリ40は、車両1000に組み込まれたメモリであっても良いし、車両1000から取り外し可能に構成されていても良い。第2の不揮発メモリ40にも、第1の不揮発メモリ10と同様に、旧ソフトウェアPROG-OLDを含むソフトウェアを格納しておくことができる。
【0020】
本実施の形態に係るECU100は、第1の不揮発メモリ10に格納されたソフトウェアPROGを旧ソフトウェアPROG-OLDに戻すことが必要になった場合は、第2の不揮発メモリ40に旧ソフトウェアPROG-OLDが格納されているか否かを判定する。第2の不揮発メモリ40に旧ソフトウェアPROG-OLDが格納されていれば、ECU100は、旧ソフトウェアPROG-OLDを第2の不揮発メモリ40から第1の不揮発メモリ10にロールバックする。これにより、管理サーバ2000に頼ることなく迅速にロールバックを行うことができ、例えば、ソフトウェアPROGに不具合が含まれていることが発覚した場合にも、適切に対応することができる。
【0021】
図2及び
図3は、第2の不揮発メモリ40を含む車両1000の構成の例を示す。なお、
図2及び
図3においては、RAM20、通信装置200、及び管理サーバ2000は省略されている。
図2においては、第2の不揮発メモリ40はECU100の外部に搭載される。
図3においては、第2の不揮発メモリ40は、ECU100の内部に含まれる。
【0022】
本実施の形態において、第2の不揮発メモリ40は、車両1000の内部であればどこに搭載されていても良い。ただし、第2の不揮発メモリ40がECU100以外の他のECUに含まれる場合には、通信負荷により他のECUに影響を与える可能性がある。そのため、第2の不揮発メモリ40は、
図3のようにECU100に含まれるか、ECU100及び他のECUの外部に搭載されることがより望ましい。第2の不揮発メモリ40は、1つであっても複数であっても良い。
【0023】
図2及び
図3の例では、第1の不揮発メモリ10はソフトウェアPROGを格納し、第2の不揮発メモリ40は旧ソフトウェアPROG-OLDを格納している。ソフトウェアPROGを旧ソフトウェアPROG-OLDに戻す必要がある場合、プロセッサ30は、第2の不揮発メモリ40から第1の不揮発メモリ10へ旧ソフトウェアPROG-OLDをロールバックする。第2の不揮発メモリ40からロールバックを行うことで、旧ソフトウェアPROG-OLDを迅速にロールバックすることができる。
【0024】
以下、ロールバックに関連する処理の様々な例を説明する。
【0025】
2.第1の例
2-1.2面の不揮発メモリ
第1の例では、第1の不揮発メモリ10は2面の不揮発メモリである。2面の不揮発メモリとは、ソフトウェアを格納することのできる2つの領域を有する不揮発メモリのことであり、それぞれの領域を面と呼ぶこともある。
図4において、2つの領域は、第1領域10-A及び第2領域10-Bとして図示されている。例えば、第1の不揮発メモリ10が有するソフトウェアの格納領域が、2つの領域10-A、10-Bに分けられる。他の例として、第1の不揮発メモリ10が2つの不揮発メモリを含み、2つの不揮発メモリが第1領域10-A及び第2領域10-Bとして機能してもよい。
【0026】
第1の不揮発メモリ10が2つの領域を有する場合、ECU100の起動時に、ブートソフトウェアにより、第1領域10-A及び第2領域10-Bのうちのいずれか1つの領域が選択される。そして、選択された領域に格納されたソフトウェアのうち、車両1000の制御に使用されるソフトウェアが起動される。選択された領域を稼働状態の領域又は稼働面と呼び、選択されていない領域を非稼働状態の領域又は非稼働面と呼ぶ。
【0027】
例えば、
図4の(1)では、第1領域10-Aが稼働面、第2領域10-Bが非稼働面となっている。(2)では、稼働面と非稼働面が入れ替えられ、第1領域10-Aが非稼働面、第2領域10-Bが稼働面となっている。稼働面と非稼働面を入れ替えることを、稼働面の切替と呼ぶ。
【0028】
例を挙げて説明すると、
図4において、第1領域10-AにVer2.5のソフトウェアPROGが、第2領域10-BにVer2.0の旧ソフトウェアPROG-OLDが格納されているとする。プロセッサ30が実行するソフトウェアは、(1)ではVer2.5のソフトウェアPROGであり、稼働面が切り替えられて(2)になるとVer2.0の旧ソフトウェアPROG-OLDとなる。稼働面の切替は、ECU100の停止中又はECU100の起動直後に行われる。
【0029】
第1の不揮発メモリ10が稼働面及び非稼働面の2つの領域を有することで、稼働面に格納されたソフトウェアを実行しながら、非稼働面へ別なソフトウェアの書込みを行うことができる。制御を止めずにソフトウェアの書込みができるため、よりスムーズなロールバックが可能となる。
【0030】
2-2.処理例
図5は、第1の例の場合のロールバックに関連する処理例を示す概念図である。
図5の例では、ソフトウェアPROGに相当するソフトウェアはVer4.0のソフトウェアであり、旧ソフトウェアPROG-OLDに相当するソフトウェアはVer3.0のソフトウェアである。(1)の状態では、稼働面の第2領域10-Bに格納されたVer3.0の旧ソフトウェアPROG-OLDが起動されている。
【0031】
(1)で、管理サーバ2000から、Ver4.0のソフトウェアPROGが配信され、第1の不揮発メモリ10に格納される。このとき、Ver4.0のソフトウェアPROGは、第1領域10-A及び第2領域10-Bのどちらにも格納することができる。ただし、格納する領域を非稼働面となっている第1領域10-Aとすると、制御を止めずにソフトウェアPROGの書込みができるため、ソフトウェアPROGの更新がよりスムーズとなる。加えて、ソフトウェアPROGの書込みによって稼働面のVer3.0の旧ソフトウェアPROG-OLDに影響を与えることもない。非稼働面の第1領域10-AへのVer4.0のソフトウェアPROGの書込みが完了すると、稼働面の切替が行われる。稼働面の切替により、(2)のように起動されるソフトウェアがVer4.0のソフトウェアPROGとなることで、更新が完了する。
【0032】
更新完了後、(2)のようにバックアップを行っても良い。バックアップとは、旧ソフトウェアPROG-OLDを第2の不揮発メモリ40へ退避させることである。つまり、
図5の例では、非稼働面に格納されたVer3.0の旧ソフトウェアPROG-OLDを第2の不揮発メモリ40に格納することでバックアップが行われる。バックアップによって、より確実なロールバックを実現することができる。
【0033】
その後、(3)のように、更に新しいVer5.0のソフトウェアが管理サーバ2000から配信されることもある。このときは、Ver5.0のソフトウェアは非稼働面の第2領域10-Bに格納される。Ver5.0のソフトウェアの書込みが完了すれば、再び稼働面が切り替えられ、Ver5.0のソフトウェアの更新が完了となる。ただし、(3)及び(4)では、ソフトウェアの書込み途中の状態が図示されている。
【0034】
(4)では、Ver4.0のソフトウェアPROGに不具合が含まれていることが発覚し、旧ソフトウェアPROG-OLDに戻すことが必要となる。
図5の例では、第2の不揮発メモリ40にVer3.0の旧ソフトウェアPROG-OLDが格納されているため、プロセッサ30は、第2の不揮発メモリ40からのロールバックを行う。つまり、プロセッサ30は、(5)のように非稼働面の第2領域10-BにVer3.0の旧ソフトウェアPROG-OLDを格納する。このとき、非稼働面にVer5.0のソフトウェアを書込み途中であったとしても、ロールバックが優先され、Ver5.0のソフトウェアの更新は停止させられる。
【0035】
格納後、(6)のように稼働面を切り替え、起動されるソフトウェアがVer3.0の旧ソフトウェアPROG-OLDとなることで、ロールバックは完了となる。(5)に示すように、旧ソフトウェアPROG-OLDは非稼働面に格納されるため、車両1000を制御しながら旧ソフトウェアPROG-OLDの書込みをすることが可能となる。このように、第1の不揮発メモリ10が2つの領域を有することで、よりスムーズにロールバックを行うことができ、ソフトウェアに関する不具合などにも適切に対応できる。
【0036】
ここで、比較例として、第2の不揮発メモリ40が設けられていない場合について考える。この場合、Ver3.0の旧ソフトウェアPROG-OLDを利用することはできない。何故なら、第2領域10-Bに格納されていたVer3.0の旧ソフトウェアPROG-OLDの少なくとも一部は、Ver5.0のソフトウェアによって上書きされているからである。一方、本実施の形態によれば、第2の不揮発メモリ40が設けられているため、ロールバックによって、Ver3.0の旧ソフトウェアPROG-OLDに戻すことができる。更に、バックアップを行うことにより、ロールバックをより確実なものとすることができる。このようにして、本実施の形態に係るECU100は、ソフトウェアPROGに関する不具合などの理由で旧ソフトウェアPROG-OLDに戻す必要がある場合においても、適切な対応を行うことができる。
【0037】
2-3.非稼働面からのロールバック
本実施の形態の変形例として、非稼働面に旧ソフトウェアPROG-OLDが格納されている場合は、非稼働面からのロールバックが行われても良い。
【0038】
図6は、非稼働面からのロールバックの例を示している。
図6の例では、ソフトウェアPROGに相当するソフトウェアはVer4.0のソフトウェアであり、旧ソフトウェアPROG-OLDに相当するソフトウェアはVer3.0のソフトウェアである。(1)では、
図5(1)と同様に、管理サーバ2000からVer4.0のソフトウェアPROGが配信され、第1の不揮発メモリ10の非稼働面に格納される。格納後、稼働面の切替が行われる。稼働面の切替後、(2)において、
図5の場合と同様にVer3.0の旧ソフトウェアPROG-OLDのバックアップが行われる。
【0039】
(3)で、Ver4.0のソフトウェアPROGに不具合が含まれていることが発覚し、Ver3.0の旧ソフトウェアPROG-OLDに戻すことが必要となる。このとき、非稼働面の第2領域10-Bには、Ver3.0の旧ソフトウェアPROG-OLDが格納されている。よって、第2の不揮発メモリ40からのロールバックを行う代わりに、稼働面を切り替える。稼働面を切り替えることで、起動されるソフトウェアは切替後の稼働面に格納されたVer3.0の旧ソフトウェアPROG-OLDとなる。つまり、旧ソフトウェアPROG-OLDにロールバックされる。
【0040】
このような稼働面の切替によるロールバックを、非稼働面からのロールバックと呼ぶ。非稼働面からのロールバックにおいては、稼働面を切り替えるだけで良く、ソフトウェアを格納しなおす必要がないため、より迅速にロールバックを行うことができる。
【0041】
2-4.処理フロー
図7は、第1の例の場合のロールバックに関連する処理を示すフローチャートである。
図7に例示されるフローチャートは、プロセッサ30により実行される。
【0042】
ステップS101において、ECU100に対してロールバックの指示が出される。ロールバックの指示は、例えば、管理サーバ2000や車両1000のユーザーにより、ソフトウェアを旧ソフトウェアPROG-OLDに戻す必要があるときに出される。ECU100がロールバックの指示を受け取ると、処理は、ステップS102に進む。
【0043】
ステップS102において、第1の不揮発メモリ10にソフトウェアが更新中か否かが判定される。ソフトウェアの更新中の場合(ステップS102;Yes)、処理は、ステップS103に進む。更新中でない場合、(ステップS102;No)、処理は、ステップS104に進む。
【0044】
ステップS103において、ロールバックを実行するために、ソフトウェアの更新が停止される。その後、処理はステップS104に進む。
【0045】
ステップS104において、第1の不揮発メモリ10の非稼働面に旧ソフトウェアPROG-OLDが格納されているか否かが判定される。このとき、旧ソフトウェアPROG-OLDが改竄されたり書き換えられたりしていない完全性の保たれた状態であるか否かを同時に判定しても良い。旧ソフトウェアPROG-OLDが完全性を保持して格納されている場合(ステップS104;Yes)、処理は、ステップS105に進む。旧ソフトウェアPROG-OLDが格納されていない場合、又は旧ソフトウェアPROG-OLDの完全性が保たれていない場合(ステップS104;No)、処理は、ステップS106に進む。
【0046】
ステップS105において、稼働面の切替が行われる。その後、処理は終了する。ステップS105で行われる稼働面の切替が、非稼働面からのロールバックである。
【0047】
ステップS106において、第2の不揮発メモリ40に旧ソフトウェアPROG-OLDが格納されているか否かが判定される。このとき、旧ソフトウェアPROG-OLDが改竄されたり書き換えられたりしていない完全性の保たれた状態であるか否かを同時に判定しても良い。旧ソフトウェアPROG-OLDが完全性の保たれた状態で格納されている場合(ステップS106;Yes)、処理は、ステップS108に進む。旧ソフトウェアPROG-OLDが格納されていない場合、又は旧ソフトウェアPROG-OLDの完全性が保たれていない場合(ステップS106;No)、処理は、ステップS107に進む。
【0048】
ステップS107において、プロセッサ30は、必要なソフトウェアをダウンロードするように外部への通知を行う。例えば、専用のツールを使った有線によるダウンロードや外部のコンピュータからのダウンロードを行うように、車両1000のユーザーに通知する。その後、処理はステップS101に戻る。
【0049】
ステップS108において、第2の不揮発メモリ40から第1の不揮発メモリ10の非稼働面に旧ソフトウェアPROG-OLDが格納される。その後、処理は、ステップS109に進む。
【0050】
ステップS109において、稼働面が切り替えられる。稼働面が切り替えられることにより、旧ソフトウェアPROG-OLDが起動される。その後、処理は終了する。ステップS108及びステップS109の処理が、第2の不揮発メモリ40からのロールバックである。
【0051】
旧ソフトウェアPROG-OLDのバックアップは、例えば、
図8に示すフローチャートをプロセッサ30が実行することにより実現される。
【0052】
ステップS201において、ソフトウェアの更新が行われる。ソフトウェアの更新が行われると、処理は、ステップS202に進む。
【0053】
ステップS202において、ソフトウェアの更新が完了したか否かが判定される。例えば、第1の不揮発メモリ10の非稼働面へ新しいソフトウェアを格納することによりソフトウェアの更新が行われる場合は、非稼働面へのソフトウェアの格納及び稼働面の切替が完了したときにソフトウェアの更新が完了したと判定される。ソフトウェアの更新が完了している場合(ステップS202;Yes)、処理は、ステップS203に進む。更新が完了していない場合、(ステップS202;No)、処理は、ステップS201に戻る。
【0054】
ステップS203において、第2の不揮発メモリ40へ、ソフトウェアの書込み通知が出される。その後、処理は、ステップS204へ進む。
【0055】
ステップS204において、ソフトウェアの書込み通知に対して第2の不揮発メモリ40からの正常な応答があったか否かが判定される。正常な応答があった場合(ステップS204;Yes)、処理は、ステップS205に進む。応答がない場合、又は応答が異常な場合(ステップS204;No)、処理は、ステップS207に進む。異常な応答は、第2の不揮発メモリ40の故障や容量不足などの場合に発せられる。
【0056】
ステップS207において、バックアップの失敗が車両1000のユーザーに通知される。その後、処理は終了する。ステップS207の通知により、第2の不揮発メモリ40の故障や容量不足などがあった場合に、ユーザーに対応を促すことができる。
【0057】
ステップS205において、旧ソフトウェアPROG-OLDのバックアップ、つまり、旧ソフトウェアPROG-OLDの第2の不揮発メモリ40への格納が開始する。その後、処理は、ステップS206に進む。
【0058】
ステップS206において、旧ソフトウェアPROG-OLDのバックアップが完了したか否かが判定される。バックアップが完了していない場合(ステップS206;No)、処理は、ステップS205に戻る。バックアップが完了した場合は(ステップS206;Yes)、バックアップ処置制御ソフトウェアによりバックアップ処理が停止されることで、処理は終了する。
【0059】
3.第2の例
第2の例では、第2の不揮発メモリ40からのロールバックの際に、管理センタによる認証を行うステップが追加される。第2の不揮発メモリ40は第1の不揮発メモリ10よりも書き換えが容易であり、悪意を持った第三者による攻撃を受けやすい。また、第2の不揮発メモリ40に、ソフトウェアPROGよりも古いバージョンのソフトウェアとして、複数のバージョンのソフトウェアが格納されている場合には、誤ったバージョンのソフトウェアにロールバックされてしまう恐れもある。第2の例においては、認証のステップを追加することで、第2の不揮発メモリ40に格納されている旧ソフトウェアPROG-OLDが正しいバージョンの正規のソフトウェアであることを確認する。こうして、改竄されたソフトウェアや誤ったバージョンのソフトウェアへのロールバックを防ぐことができる。認証のステップは、以下のように行われる。
【0060】
管理センタは、ソフトウェアに対し、それぞれのバージョンに対応した暗号鍵を付与する。管理センタは、管理サーバ2000と同じであってもよい。第2の不揮発メモリ40からのロールバックを行う際、ECU100は、通信装置200を介して旧ソフトウェアPROG-OLDの暗号鍵を管理センタに送信する。管理センタは、ECU100から受信した暗号鍵を解読し、正規のソフトウェアであることを検証する。例えば、ソフトウェアに付与したHash値を利用して認証を行うことで、ソフトウェアの一意性を検証する。あるいは、秘密鍵や、公開鍵、SHA-256などを利用した認証を行っても良い。管理センタによる認証が正しく行われた場合にのみ、第2の不揮発メモリ40からの旧ソフトウェアPROG-OLDのロールバックが行われる。
【0061】
図9は、第2の例における処理例を示すフローチャートである。
【0062】
ステップS301からステップS307においては、
図7のステップS101からステップS107と同様の処理が行われる。ステップS306において、ソフトウェアが格納されている場合(ステップS306;Yes)、処理は、ステップS308に進む。
【0063】
ステップS308において、管理センタによって旧ソフトウェアPROG-OLDが正しく認証されたか否かが判定される。管理センタによる認証には、上記に説明したように、暗号鍵が使われる。正しく認証された場合(ステップS308;Yes)、処理は、ステップS310に進む。正しく認証されない場合、(ステップS308;No)、処理は、ステップS309に進む。
【0064】
ステップS309においては、
図7のステップS107と同様の処理が行われる。その後、処理は、ステップS301に戻る。
【0065】
ステップS310及びステップS311では、
図7のステップS108及びステップS109と同様に、第2の不揮発メモリ40からの旧ソフトウェアPROG-OLDのロールバックが行われる。ステップS311で稼働面の切替が行われた後、処理は終了する。
【0066】
このように、管理センタによる旧ソフトウェアPROG-OLDの認証のステップを追加することで、第1の不揮発メモリ10に、改ざんされたソフトウェアや間違ったバージョンのソフトウェアがロールバックされるのを防ぐことができる。第2の不揮発メモリ40に正しく認証される旧ソフトウェアPROG-OLDが格納されていない場合は、ユーザーへの通知がされることで、正しいソフトウェアへの更新を促すことができる。
【0067】
3.第3の例
第1の不揮発メモリ10は1面の不揮発メモリであっても良い。本実施の形態に係る制御装置は、第1の不揮発メモリ10が1面の不揮発メモリである場合においても、上記と同様に旧ソフトウェアPROG-OLDのロールバックやバックアップを行うことができる。以下、ロールバック及びバックアップを行う例について説明する。
【0068】
図10では、第1の不揮発メモリ10は、ソフトウェアを格納する領域として、1つの領域10-Aのみを有している。そのため、領域10-Aが常に稼働面となる。
図10の例では、ソフトウェアPROGに相当するソフトウェアはVer4.0のソフトウェアであり、旧ソフトウェアPROG-OLDに相当するソフトウェアはVer3.0のソフトウェアである。
【0069】
(1)では、領域10-AにはVer3.0の旧ソフトウェアPROG-OLDが格納されている。(1)においては、旧ソフトウェアPROG-OLDのバックアップが行われ、第2の不揮発メモリ40にVer3.0の旧ソフトウェアPROG-OLDが退避させられる。(2)において、管理サーバ2000からVer4.0のソフトウェアPROGが配信され、第1の不揮発メモリ10のソフトウェアがVer4.0のソフトウェアPROGに更新される。
図10では、ソフトウェアPROGの更新中はECU100を含む車両1000の制御システムは停止した状態となる。
【0070】
更新が完了した後、(3)においてVer4.0のソフトウェアPROGに不具合が含まれていることが発覚し、旧ソフトウェアPROG-OLDに戻すことが必要となる。そこで、(4)で第2の不揮発メモリ40からVer3.0の旧ソフトウェアPROG-OLDのロールバックが行われる。このときロールバックが完了するまで車両1000の制御システムは停止した状態となる。
【0071】
図10に示すように、本実施の形態に係る制御装置は、第1の不揮発メモリ10が1面であるか2面であるかに関わらずロールバックを行うことができ、ソフトウェアに不具合が含まれていることが発覚したとしても、適切に対応できる。センサECUなどの高い性能を必要としないECUにおいては、第1の不揮発メモリ10が有する領域を1つにすることで、コストを抑えることができる。
【0072】
4.その他の例
旧ソフトウェアPROG-OLDは、2つ以上前のバージョンのソフトウェアを含んでいても良い。例えば、ソフトウェアにバグが含まれていることが発覚した場合において、1つ前のバージョンのソフトウェアにも同様のバグが含まれており、2つ以上前のバージョンのソフトウェアに戻すことが必要となる場合もある。このような場合には、本実施の形態に係る制御装置は、2つ以上前のバージョンの旧ソフトウェアPROG-OLDへのロールバックを行っても良い。本実施の形態においては、任意のバージョンのソフトウェアにロールバックできるように、第2の不揮発メモリ40にコンピュータなどの外部端末から事前に任意のバージョンのソフトウェアのデータをダウンロードしておいても良い。
【0073】
5.まとめ
以上に説明したように、第2の不揮発メモリ40を車両1000に搭載することにより、本実施の形態に係る制御装置は、迅速なロールバックを実現できる。第2の不揮発メモリ40を搭載することによって、メモリの空き容量を確実に確保することができ、旧ソフトウェアPROG-OLDのバックアップを行うこともできる。また、第2の不揮発メモリ40は取り外し可能に構成することもできるため、既存の多様な容量のメモリを選択して利用することができ、車両のシステムに対してロバスト性を持たせることができる。
【符号の説明】
【0074】
10 第1の不揮発メモリ
10-A 第1領域
10-B 第2領域
30 プロセッサ
40 第2の不揮発メモリ
200 通信装置
1000 車両
2000 管理サーバ
PROG ソフトウェア
PROG-OLD 旧ソフトウェア