ちょっと手持ちのFRDM-KL25Zをmbed化しようと思ったが、ブートローダをアップデートするにあたって困った事態が発生。
手持ちのボードに入っているOpenSDAのファームウェアが Version 1.11 未満の場合、Windows 7以前のマシンでないとブートローダをアップデートできない。この問題の解決法をなんとか見つけたので共有する。MacやLinuxについてはまだ試していないので御免。
まず結論
結論を書いておくと、以下のいずれかの方法で “System Volume Information” の生成を (一時的にでも) 抑制するとアップデートできる。
- レジストリを変更
- HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Search\DisableRemovableDriveIndexing (なければREG_DWORDタイプで新規追加) の値を1にする
- グループポリシーを変更
- Group Policy Editorを使用して (ただしOSによってはこれが入っていない) 、”Computer Configuration > Administrative Templates > Windows Components > Search > Do not allow locations on removable drives to be added to libraries” をonにする
- サービスの停止
- “Storage Service” もしくは “Windows Search” サービスを停止する
どんな問題なのか
FRDM-KL25ZにはOpenSDAが入っている。OpenSDAというのはUSBで接続するだけでけっこう簡単にデバッグできたり、USBストレージとしてファイルのやりとりをするだけでソフトウェアをアップデートできたりと非常に便利なモノで、OpenSDA自体のアップデートもその要領で簡単にできる……はずなのだが、買ってきた時点でちょっと古い場合があり、Windows 7以前のWindows機からでないとアップデートができないという問題がある。FRDM-KL25Zをmbed化する場合にも、ファームウェアアップデートが必要であるため、この問題の影響を受ける。
Firmware FRDM KL25Z – Handbook | mbed より引用。
Bootloader Firmware update for Linux, Mac, Windows8+
If you are using Linux or Mac or Windows 8+, according to the version of the bootloader of your board, the BOOTLOADER might not appear. If you experience this problem, you have no choice but to use a Windows 7 or older machine to update the firmware.
PE Micro has release an update for the bootloader. Version 1.11+ now supports Linux and MAC [ here ]. Please update your board for cross platform support.
私はWindows 10を使っており、その時点でのOpenSDAファームウェアのバージョンは1.09だった。ボードを接続すると “BOOTLOADER” が表示されるものの、そこにファームウェアアップデートファイルをコピーしても一向にアップデートが成功しない。mbedのファームウェアも書き込めないし、P&E microの配布しているOpenSDAファームウェアも書き込めない。手持ちのWindows機はすべて10にアップデート済みであり、7以前はなかなか用意できそうにない。
なお、FRDM-KL25Z用のOpenSDAファームウェアの最新版はこちらからダウンロードできる。
http://www.pemicro.com/opensda/
また、現状のファームウェアバージョンはブートローダモードでPCに接続した後、中身の “SDA_INFO.HTM” を開くと確認できる。
原因は何か
Windows 8以降では、リムーバブルディスクを接続すると、OSが自動でSystem Volume Informationというフォルダを勝手に作る。それが原因。これは隠しフォルダなので、フォルダの表示オプションを変更しないと見えない。
FRDM-KL25Zのブートローダは、リムーバブルディスクとしてPCに接続された後、ファームウェアのアップデートファイルが書き込まれるのを待ち、正しいアップデートファイルを受け取ったことを確認したらアップデートを行うようになっている。そこにSystem Volume Informationフォルダおよびその内容物という異物を書き込まれたことによりエラーを起こしていると思われる。
新しいファームウェアではそういう異物を書き込まれても無視しするようになっているが、古いものだと異物を書き込んだ時点でアウトになるようだ。作られてしまったSystem Volume Informationを削除する方法は色々あるが、それをやったところでファームウェアアップデートはできない。
解決方法を少し詳しく
この “System Volume Information” の作成を抑制する方法は色々ある。私が確認できているのは以下の方法。
レジストリを変更
regexdit.exeを起動し、HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\を見つける。そこに “Windows Search” というキーがあれば開く。なければ追加。そこに、”DisableRemovableDriveIndexing” というという値を追加する。タイプはREG_DWORD、値は1にする。そしてマシンを再起動。
グループポリシーを変更
OSによっては Group Policy Editor (gpedit.exe) というものが入っている。Windows 10 Home Editionなどは入っていない。
Computer Configuration > Administrative Templates > Windows Components > Search > Do not allow locations on removable drives to be added to libraries をonにして再起動すればいい……らしいけれど、手持ちの環境では試せなかったので詳しくはググってください。
各種サービスの停止
サービス一覧を開く。”Storage Service” もしくは “Windows Search” サービスを停止する。再起動はしなくてもOKだった。
これらの方法を試し、再度、ブートローダモードでボードを接続する。 “System Volume Information” が作成されなくなったことを確認したらファームウェアアップデートを試す。きっと成功する。
「レジストリを書き換えて再起動すればSystem Volume Informationは作られなくなるよ」という情報もあったのだが、私の環境では、レジストリ変更 + サービスの停止を両方やらないと駄目だった。このへんはOSのバージョンやその他いろいろな環境に依存するので、他にも方法はあるかもしれない。
とにかく「接続されたリムーバブルディスクにOSが勝手に何らかのファイルを書き込むのをやめさせる」というのを目標にしていろいろ調べると解決すると思う。
追記: 大事なことなので英語でも書きました