Armadillo-400シリーズ、Armadillo-800シリーズ、Armadillo-Box WS1、Armadillo-IoT G2を対象に、動作の安定性向上を目的として、NORフラッシュメモリ書き換え処理に関する仕様変更を行いました。
本仕様変更は、NORフラッシュメモリの変更後(2017年発行の変更通知によるもの)の製品には影響しません。
影響のある製品については「対象製品」をご覧ください。
後述の「対象製品」において、/dev/mtd* (/dev/flash/*) への書き込みを行うアプリケーションは、仕様変更の影響を受けますので、詳しくは、後述の「ユーザーアプリケーションへの影響」をご覧ください。
この仕様変更は、「2018年4月製品アップデート」より適用されます。
Armadillo 製品アップデートのお知らせ (2018年4月/Armadillo-400 シリーズ対象)
Armadillo 製品アップデートのお知らせ (2018年4月/Armadillo-800 シリーズ対象)
Armadillo 製品アップデートのお知らせ (2018年4月/Armadillo-IoT G2対象)
Armadillo 製品アップデートのお知らせ (2018年4月/Armadillo-Box WS1 シリーズ対象)
対象製品
本仕様変更は、PC28Fから始まる型番のNORフラッシュメモリを搭載した以下の製品が対象となります。
- Armadillo-410
- Armadillo-420
- Armadillo-440
- Armadillo-460
- Armadillo-810
- Armadillo-840
- Armadillo-IoT G2
- Armadillo-Box WS1
NORフラッシュメモリの変更後(2017年発行の変更通知によるもの, MT28EWで始まる型番のNORフラッシュメモリを搭載)の製品は対象外となります。
詳細は、以下の変更通知をご確認ください。
- Armadillo-410/440/IoTゲートウェイ G2/Box WS1 搭載フラッシュメモリの変更について
- Armadillo-810 搭載フラッシュメモリの変更について
- Armadillo-840搭載フラッシュメモリおよびSDスロット部品の変更について
- Armadillo-400シリーズ/800シリーズ/IoTゲートウェイ G2/Box WS1開発セットの変更について
仕様変更の概要
NORフラッシュメモリのBlock Locking機能の利用方針について以下のように変更しました。
- 変更前
- 書き込みが行われる直前にUnlockし、書き込み完了後はLockしません
- 書き込みが行われるかどうかにかかわらず、Linuxカーネルがフラグに従って特定リージョンに属する全BlockをUnlockします
- 変更後
- 書き込みが行われる時だけUnlockし、書き込み完了後はLockします
- NORフラッシュメモリのBlock Locking機能を使用して、基本的にLockした状態でNORフラッシュメモリを使用します
ユーザーアプリケーションへの影響
「2018年4月製品アップデート」以降は、ioctl(MEMUNLOCK)を実行しなければ、NORフラッシュメモリ(/dev/mtd*, /dev/flash/*)へwrite()を行うことができなくなります。
そのため、お客様のアプリケーションにてNORフラッシュメモリ(/dev/mtd*,/dev/flash/*)へ書き込みを行う場合は、以下のいずれかの対応が必要となります。
- お客様のアプリケーション内で、NORフラッシュメモリへの書き込みの前後に、ioctl(MEMUNLOCK)およびioctl(MEMLOCK)を実行する
- お客様のアプリケーションの起動前/終了後に、flash_unlockコマンド/flash_lockコマンドを実行する
flash_unlockコマンドおよびflash_lockコマンドの使用方法については、各コマンドのヘルプをご覧ください。
ioctl(MEMUNLOCK)およびioctl(MEMLOCK)を実行する方法については、atmark-dist/user/netflash/netflash.cを参考にしてください。
仕様変更の詳細については、以下をご参照ください。
仕様変更詳細
Hermit-Atブートローダーの仕様について
変更前
NORフラッシュメモリの書き換えが必要になったタイミングで、当該のBlockをUnlockします。
書き換え後、当該のBlockをLockしません。
変更後
NORフラッシュメモリの書き換えが必要になったタイミングで、当該のBlockをUnlockする動作に変更はありません。
書き換え後、当該のBlockをLockするようになります。
Linuxカーネルの仕様について
変更前
NORフラッシュメモリの各リージョンを、MTD(Memory Technology Device)として認識する際に、struct mtd_partitionの.mask_flagsメンバー変数にセットされたフラグに従って、そのリージョンに属する全てのBlockをUnlockします。
- (.mask_flags & MTD_WRITEABLE) == trueの場合
- 当該リージョンはuserlandからのwrite()ができなくなります
- MTDの認識時にBlockがUnlockされません
- (.mask_flags & MTD_POWERUP_LOCK) == trueの場合
- MTDの認識時にBlockがUnlockされません
- .mask_flags == 0の場合
- MTDの認識時にBlockがUnlockされます
変更後
struct mtd_partitionの.mask_flagsメンバー変数の扱い方に変更はありません。
各リージョンの.mask_flagsにセットされるフラグが以下のように変更されます。
リージョン名 | .mask_flags(変更前) | .mask_flags(変更後) |
---|---|---|
config | 0(フラグ未設定) | MTD_POWERUP_LOCK |
kernel | 0(フラグ未設定) | MTD_POWERUP_LOCK |
userland | 0(フラグ未設定) | MTD_POWERUP_LOCK |
bootloader | MTD_WRITEABLE | MTD_WRITEABLE, MTD_POWERUP_LOCK |
firmware | MTD_WRITEABLE | MTD_WRITEABLE, MTD_POWERUP_LOCK |
license | MTD_WRITEABLE | MTD_WRITEABLE, MTD_POWERUP_LOCK |
Atmark Distの仕様について
変更前
netflash
- -uオプションを指定した時のみ、NORフラッシュメモリの書き換え前に、当該リージョンをUnlockします
- -lオプションを指定した時のみ、NORフラッシュメモリの書き換え後に、当該リージョンをLockします
flatfsd
- -w, -sオプションを指定した時のみ、NORフラッシュメモリの書き換え前に、configリージョン全体をUnlockします
- 書き換え後、当該のBlockをLockしません
変更後
netflash
- 指定したオプションに関わらず、NORフラッシュメモリの書き換え前に、当該リージョンをUnlockするようになります
- 指定したオプションに関わらず、NORフラッシュメモリの書き換え後に、当該リージョンをLockするようになります
flatfsd
- -w, -sオプションを指定した時のみ、NORフラッシュメモリの書き換え前に、configリージョン全体をUnlockする動作に変更はありません
- 書き換え後、当該のBlockをLockするようになります
修正を行ったファイルの一覧
hermit-at(v2)
- src/target/driver/flash_intel.c
hermit-at-v3
- src/target/driver/flash_intel.c
linux-3.14-at
- arch/arm/mach-imx/mach-armadillo-box-ws1.c
- arch/arm/mach-imx/mach-armadillo4x0.c
- arch/arm/mach-imx/mach-armadillo_iotg_std.c
linux-3.4-at
- arch/arm/mach-shmobile/board-armadillo810.c
- arch/arm/mach-shmobile/board-armadillo840.c
linux-2.6.26-at
- arch/arm/mach-mx25/armadillo400.c
- arch/arm/mach-mx25/armadillo_iotg_std.c
atmark-dist
- user/flatfsd/flatfsd-3.0.1/mtd.c
- user/flatfsd/flatfsd-3.0.2/mtd.c
- user/netflash/netflash.c