lkml.org 
[lkml]   [2005]   [Jun]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: How to replace an executing file on an embedded system?
On Wed, 1 Jun 2005 18:31:07 -0400 (EDT)
"Richard B. Johnson" <linux-os@analogic.com> wrote:

>
> The newer linux kernels have this problem:
>
> Suppose I do this:
>
> cp /sbin/init foo # Make a copy of 'init'
> mv foo /sbin/init # Rename it back (emulate install)
> chmod +x /sbin/init # Make sure we can boot.
>
> When I try to umount() the file-system, it now fails with
> EBUSY (16).
>
> I have tried fsync(), sync(), fsync() on /sbin, etc. I can't
> get rid of the busy inodes.
>
> This reared its ugly head with field software upgrades. We
> used to be able to upload new software for every executable
> on an embedded system using the network or a serial link.
>
> This would replace every file. We would then kill all the
> tasks except 'init', unmount the file-system and then reboot.
> The upgrade was finished. Every lived happily ever after.
> But, with newer kernels, we can't.
>
> What am I missing? How am I supposed to replace files that
> are being executed? Do I have to `mv` them to /tmp and
> delete them on the next boot? (not easy, we don't have
> a shell, I would have to write code to search /tmp). Also
> 'init' isn't SYS-V 'init'. It's just the startup program
> for a system that keeps growing so I need to be able to
> upgrade it.

The image of the file being executed has to exist because
the text portion could be needed at any time for a page in.

You can move it in the same filesystem (since the open file handle
stays the same), or even delete it (since it doesn't disappear till
last reference goes away). but you can't unmount the file system because
the inode is still busy.


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-06-02 01:48    [W:0.118 / U:0.968 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site