gpt4 book ai didi

linux-kernel - 在运行时调整 MTD 分区的大小

转载 作者:行者123 更新时间:2023-12-04 20:50:56 28 4
gpt4 key购买 nike

我正在使用嵌入式设备,并希望它们能够通过 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

以此为指导,我能够编写内核和用户空间代码来创建一个新的 MTD 分区,我可以在该分区上安装 JFFS2。但是,此代码无法正确删除分区。即使从 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()mtdchar.c触发 get_mtd_device() ,这可能是额外的 usecount增量。但是我的用户空间应用程序需要调用 open()在分区上向它发送 ioctl()用于删除分区:/catch 22?有没有更正确的方法来做到这一点?

最佳答案

我最终通过让我的补丁 mtd 实用程序增加“mtd0”大小来解决这个问题,然后创建一个正确减小大小的全新分区来安装 JFFS,这让我有机会将配置信息复制到新的闪存位置。

为了降低复杂性,我也做了它,所以我不能多次运行这个应用程序。它最终成为“运行一次,做你的事,重新启动”类型的程序。

更新:

这是我的代码,认为它可以使某些人受益:

https://github.com/mikzat/mtd_runtime_partition

关于linux-kernel - 在运行时调整 MTD 分区的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10836715/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com