Archive for 2011/02/15

レジストリ変更内容の永続化(1/2)

・はじめに
IP アドレスの設定など、各種設定項目は、WinCE の OS イメージを生成する際に、レジストリに格納されます。デフォルトでは、レジストリは OS イメージ内に配置され、起動時に RAMFS (ObjectStore) に展開されます。このため、コントロールパネルで IP アドレスなどの設定を変更しても、その変更内容は、電源を切った時点で失われてしまいます。つまり、コールドブートに対して、レジストリの変更内容は永続的(persistent)ではありません。なお、WinCE の RAMFS (ObjectStore) について興味のある方は、リファレンスページをご覧ください:
 http://msdn.microsoft.com/en-us/library/ee490183.aspx (RAM (Object Store) File System)

さて、レジストリの変更内容を永続的にすることは可能です。レジストリを永続化するには、ハードディスクなどの永続記憶域にファイルとして配置すればよいのです。この手順については、以下のリファレンスページが参考になるでしょう。ただし、以下のページに書かれていることだけでは詳細な手順が分からないため、この後で、具体的な手順を述べます。
 http://msdn.microsoft.com/en-us/library/ee490554.aspx (Hive-based Registry Setup)
 http://msdn.microsoft.com/en-us/library/ee490032.aspx (Implementing the Hive-Based Registry)

・具体的な手順
レジストリを永続化するための手順の例として、弊社が提供している WinCE 6.0 の BSP(Lilas-am440-6; Armadillo-440 用の BSP)の場合の手順を述べます。BSP に固有な点は明記しますので、他の BSP をお使いの場合でも、参考にして頂けるのではないかと思います。以下が、その手順です。ここでは、永続記憶域として、Armadillo-440 に microSD カードを装着して使います。

1.) OS Design に、「Hive ベースのレジストリ」を追加する。
  PlatformBuilder のカタログ項目ビューで、次のカタログ項目を選択して下さい
  
   コア OS
    CEBASE
     ファイルシステムおよびデータストア
      レジストリ記憶域(1つ選択)
*       Hive ベースのレジストリ

2.) <WINCE600_Root>/PLATFORM/AM440/FILES/platform.reg の末尾に、次の行を追加する。
  以下の内容は、最初の二つのレジストリキーが共通な設定で、残りは、BSP に固有な設定です。BSP に固有な設定は、レジストリのファイル(hive)を配置する永続記憶域として何を使うか、および、使用する永続記憶域のデバイスドライバのレジストリ設定によって変わります。

; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE\init\BootVars]
    "SystemHive"="REG\\system.hv"
    "ProfileDir"="REG"
    "Flags"=dword:3
    "RegistryFlags"=dword:1

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\ObjectStore]
    "MountAsBootable"=dword:0

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SDBusDriver]
    "Dll"="SDBus.dll"
    "Flags"=dword:1000
    "IClass"=multi_sz:"{20FA98A8-B298-4b32-8D72-C716AEE2FA84}=%b","{6F40791D-300E-44E4-BC38-E0E63CA8375C}=%b"
    "Order"=dword:15
    "Prefix"="SDC"
    "RequestListDepth"=dword:30
    "ThreadPriority"=dword:64
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\ESDHC1_MX25]
    "DisableDMA"=dword:0
    "Dll"="esdhc.dll"
    "Flags"=dword:1000
    "Index"=dword:1
    "MaximumClockFrequency"=dword:3197500
    "Order"=dword:21
    "Prefix"="SHC"
[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class]
    "BlockTransferSize"=dword:40
    "Dll"="SDMemory.dll"
    "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}","{8DD679CE-8AB4-43c8-A14A-EA4963FAA715}"
    "Prefix"="DSK"
    "Profile"="SDMemory"

[HKEY_LOCAL_MACHINE\SYSTEM\StorageManager\Profiles\SDMemory]
    "Folder"="SDMemory"
    "Name"="SD Memory Card"
    "AutoMount"=dword:1
    "DefaultFileSystem"="FATFS"
    "PartitionDriver"="mspart.dll"
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory\FATFS]
    "MountPermanent"=dword:1
    "MountAsBootable"=dword:1
; END HIVE BOOT SECTION

3.) OS イメージを作りなおす。
  OS Design のソリューションを、再ビルドして下さい。

以上で、レジストリを永続化した OS イメージが出来上がります。実際に動かしてみて、コントロールパネルで IP アドレスの設定を変更してみて下さい。変更した後、電源を入れ直してコールドブートしても、設定内容が失われず、永続化されているはずです。

上で示した、platform.reg で設定する内容については、次回、レジストリが永続化される仕組みとともに説明します。

Add comment 2011/02/15 koga


Categories

Links

Posts by Authors

Recent Posts

Calendar

2011年2月
« 9月   8月 »
 12345
6789101112
13141516171819
20212223242526
2728  

Posts by Month

Posts by Category

Meta