chfs(4)とnandemulator(4)

この記事は、NetBSD Advent Calendar 2019の19日目の記事です。

はじめに

CHFSを使ってみたいと思っていましたが、 サポートするハードウェアが分からないし、おそらく手元に存在しないので試せないと考えていました。 CHFS (CHFS flash file system)は、フラッシュメモリー用のファイルシステムです。

しかし、NANDフラッシュメモリーデバイスについては、nandemulator(4)というエミュレートする仮想的なデバイスが用意されていて、 RAMから割り当てて揮発性のNANDフラッシュメモリーデバイスを作成することが可能でした。 これにより、NetBSD/amd64でもCHFSを試してみることができそうです。

nandemulator(4)のソースコードであるsys/dev/nand/nandemulator.cを読むと、エミュレートされるNANDフラッシュメモリーの サイズは32MBでハードコードされてしまっていますが、CHFSを試してみるという視点では、32MBでも良さそうです。

CHFSを使う準備

カーネル設定ファイルに以下のように追記して、カーネルを作り直しても良さそうですが、最も簡単なのはロード可能なカーネルモジュールを使う方法のように思います。
file-system     CHFS
pseudo-device   nandemulator

以下のようにして、カーネルモジュールを読み込みます。

# modload nandemulator
# modload chfs
これらを実行すると、カーネルブートメッセージに以下のように出力されます。
nandemulator0: NAND emulator
nand0 at nandemulator0: ONFI NAND Flash
nand0: vendor: NETBSD, model: NANDEMULATOR
nand0: manufacturer id: 0x00 (Unknown), device id: 0x00
nand0: page size: 2048 bytes, spare size: 64 bytes, block size: 131072 bytes
nand0: LUN size: 256 blocks, LUNs: 1, total storage size: 32 MB
nand0: column cycles: 2, row cycles: 3, width: x16
nand0: scanning for bad blocks
flash0 at nand0: partition, size 32 MB, offset 0
flash0: erase size 128 KB, page size 2048 bytes, write size 2048 bytes
仮想的なNANDフラッシュメモリーデバイスは、/dev/flash0に割り当てられたようです。

CHFSを使ってみる

mount_chfs(8)のマニュアルページによると、CHFSなフラッシュメモリーデバイスは、 初回マウント時に自動的にnewfs(8)相当のことが実施されるようです。

The file system will be created during the first mount.
ですので、newfs_chfsコマンドはありません。

以下のようにして、/mntにマウントしてみます。

# mount_chfs /dev/flash0 /mnt
状況を確認してみます。
$ mount
/dev/flash0 on /mnt type chfs (local)

$ df -h
/dev/flash0               31M         0B        30M   0% /mnt
どうやら普通に使えそうです。

CHFSは、LinuxやeCosで利用できるJFFS2を意識して作られたようなので、機会があったら比較してみたいと思います。

No comments:

Post a Comment

Windows To GoがWindows 10 2004でなくなってしまった

Microsoft Windows 10をMay 2020 (2004)にアップデーしたら、Windows To Goがコントロールパネルになくなってしまった。 廃止されてしまったらしい。 BIOSを更新するために使っていたので不便になってしまうが、仕方がない。 ...