我需要使用具有超级用户权限的 Linux 用户空间中的新 UBIFS 映像更新原始 UBI 分区,但是EBUSY
每当我尝试打开我的对应/dev/ubiX_Y
文件进行写入时,我都会收到(设备或资源繁忙)错误,即使当前文件系统存在它以只读方式安装。我怀疑具有例如 ext4 文件系统的通常块分区可以在以只读方式安装时打开以进行写入,看到诸如 zerofree 和 ext4magic 之类的实用程序以这种方式工作。UBI 分区似乎并非如此。
从理论上讲,我可以使用分区终止进程或附加到它们并强制关闭其上的所有文件,然后再完全卸载分区,但似乎我不能对init
一直保持/etc/inittab
打开状态的 busybox 进程执行任何操作。是的,有问题的分区是根/
挂载的分区。
我也可以实现一个内核模块来完成脏活,但我想为我的更新实用程序保留尽可能多的二进制前向兼容性,并且基本上尽可能多地保持内核版本不可知,从而以这种方式解决它是非常不受欢迎的。我还有其他方法可以做到这一点吗?
如果有这样的一行
/etc/inittab
:然后,如果您向它发送 SIGQUIT,
init
它将用 /tmp/updater_stage2 替换自己。要/etc/inittab
在更改后重新加载,请发送 SIGHUP。您可以/etc/inittab
用绑定安装替换:如果没有
/etc/inittab
或支持inittab
in not compiled ininit
will runinit
,那么您将不得不替换/sbin/init
为:然后,您可以使用
pivot_root
和chroot
替换根文件系统,然后您可以卸载(在移动/tmp
等之后/proc
)。