組み込みデバイスを使用していますが、再起動せずにLinux経由でMTDパーティションのサイズを変更できるようにしたいと考えています。
問題は、Linuxイメージのサイズが大きくなり、それが存在する現在のMTDパーティション(mtd0)が小さすぎることです。ただし、その直後のパーティション(mtd1)は構成情報を格納するために使用されるJFFS2セクションであるため、構成が失われる可能性があるため、再起動によるサイズ変更はオプションではありません。
私の目標はこれです:
1. Copy contents of JFFS2 into /tmp/
2. Unmount JFFS2 from mtd1
3. Increase the starting offset + reduce size of mtd1 by X bytes (or delete mtd1 and create new mtd of proper size and offset)
4. Mount JFFS2 on new mtd1 and restore contents from /tmp/
5. Increase the size of mtd0 by X bytes
6. Burn new (larger) Linux image into mtd0 (the new image will contain a device tree with an updated partition structure)
7. Reboot
数年前から「mtd-utils」に提案されたパッチを見つけました。
http://article.gmane.org/gmane.linux.drivers.mtd/30949
http://article.gmane.org/gmane.linux.drivers.mtd/30950
http://article.gmane.org/gmane.linux.drivers.mtd/30951
これをガイドとして使用して、カーネルとユーザースペースのコードを記述し、JFFS2をマウントできる新しいMTDパーティションを作成することができました。ただし、このコードはパーティションを適切に削除しません。mtd1からJFFS2をアンマウントして呼び出した後でもput_mtd_device
、del_mtd_device
が呼び出されると、カーネルは次のように文句を言います。
user.notice kernel: Removing MTD device #1 (jffs2) with use count 1
私が知りたいのは:
1. How to fix the patch to allow deleting my old mtd1
2. How to change the starting offset of mtd1 instead of creating/deleting partitions
パッチの作者に連絡してみましたが、メールが無効になっているので、何か提案をいただければ幸いです。
アップデート:
トリガーで、おそらく余分な増分を説明mtd_open()
しているようです。しかし、私のユーザースペースアプリは、パーティションを削除するためにパーティションを送信するためにパーティションを呼び出す必要があります:/ catch 22?これを行うためのより正しい方法はありますか?mtdchar.c
get_mtd_device()
usecount
open()
ioctl()