EmbeddedRelated.com
Forums
The 2024 Embedded Online Conference

Remotely upgrading only one section/functionality of an entire software

Started by karthikbalaguru November 23, 2009
Hi,
I am looking for some ways for remotely upgrading
only a part of functionality/section of a software
running on a target board by sending commands
to it through web interface. I do not want the entire
software to be upgraded. I want only one
functionality to be upgraded. I do not want the
software on the remote target board to be rebooted.

I am considering an ARM processor based board
with external FLASH and RAM memory.

What are the best possible ways for doing this ?
Any ideas ?

Thx in advans,
Karthik Balaguru
On Nov 23, 1:00=A0pm, karthikbalaguru <karthikbalagur...@gmail.com>
wrote:

> I am looking for some ways for remotely upgrading > only a part of functionality/section of a software > running on a target board by sending commands > to it through web interface. I do not want the entire
Do you really mean "upgrading" (adding functionality different from how the board was shipped from the factory) or "enabling" (purchasing a license for a feature)?
On Mon, 23 Nov 2009 10:00:11 -0800, karthikbalaguru wrote:

> Hi, > I am looking for some ways for remotely upgrading only a part of > functionality/section of a software running on a target board by sending > commands to it through web interface. I do not want the entire software > to be upgraded. I want only one functionality to be upgraded. I do not > want the software on the remote target board to be rebooted. > > I am considering an ARM processor based board with external FLASH and > RAM memory. > > What are the best possible ways for doing this ? Any ideas ? > > Thx in advans, > Karthik Balaguru
How big an OS are you using? This is something that a 'big' OS like Linux, VxWorks (icky), and Windows (ickier) all support. Either through a loadable library (Windows uses the DLL, I can't remember the names that Linux and VxWorks use), or with separate applications communicating with one another. You define your interface, you partition the functionality _before_ you write all the code, you put the mutable stuff into loadable libraries, then to do your upgrade you just upgrade the library. I _do not know_ if you can get away with doing this method without rebooting your application -- you'll have to research. Alternately, all of these OS's will let you have separate applications running as separate processes, communicating with sockets or whatever. Swapping out an application becomes more structured, although you still have issues with how to get 'er done if you want to do it on the fly. -- www.wescottdesign.com
On Mon, 23 Nov 2009 10:07:13 -0800, larwe wrote:

> On Nov 23, 1:00&nbsp;pm, karthikbalaguru <karthikbalagur...@gmail.com> wrote: > >> I am looking for some ways for remotely upgrading only a part of >> functionality/section of a software running on a target board by >> sending commands to it through web interface. I do not want the entire > > Do you really mean "upgrading" (adding functionality different from how > the board was shipped from the factory) or "enabling" (purchasing a > license for a feature)?
Heh -- that one is _easy_. -- www.wescottdesign.com
karthikbalaguru wrote:
> Hi, > I am looking for some ways for remotely upgrading > only a part of functionality/section of a software > running on a target board by sending commands > to it through web interface. I do not want the entire > software to be upgraded. I want only one > functionality to be upgraded. I do not want the > software on the remote target board to be rebooted.
But, you will have to make sure the "module"/portion that is being upgraded is not accessed during the upgrade process. Can you do this? Does your *other* code reside in the same physical device? (i.e., can you be upgrading one portion while executing code out of it at the same time?)
> I am considering an ARM processor based board > with external FLASH and RAM memory. > > What are the best possible ways for doing this ? > Any ideas ?
How is your application sturctured? At the very least, you need some way of compartmentalizing the portions that you want to upgrade. You can choose whatever size/shape "compartments" you want. As long as you can govern access to those individual "compartments" during the upgrade. For example, you might decide you want to treat the FLASH as a set of 1K compartments -- any of which can be upgraded independant of the others. Or, you can treat it as a set of one *byte* compartments. As long as you can keep the processor from trying to *use* the compartments that you are altering *while* their state is indeterminate. (e.g., if you can keep the processor out of the entire flash, then you can pick and chose which individual *bytes* you modify) As far as not having to reboot, that is possible if you don't have any "state" that has been corrupted/invalidated as a consequence of the upgrade (or, if any such problems are fixable as part of your upgrade/recovery procedure)

karthikbalaguru wrote:
> Hi, > I am looking for some ways for remotely upgrading > only a part of functionality/section of a software > running on a target board by sending commands > to it through web interface. I do not want the entire > software to be upgraded. I want only one > functionality to be upgraded. I do not want the > software on the remote target board to be rebooted. > > I am considering an ARM processor based board > with external FLASH and RAM memory. > > What are the best possible ways for doing this ? > Any ideas ?
Upgrading system components without reboot requires guaranteed correct handling of all dependencies and states. This is non-trivial problem which very well can be insoluble unless your system is specifically designed for that. The upgradeability on the fly will cost you a lot of software overhead and complexity, so the best way is drop this idea. Vladimir Vassilevsky DSP and Mixed Signal Design Consultant http://www.abvolt.com
On Nov 23, 11:26=A0pm, Tim Wescott <t...@seemywebsite.com> wrote:
> On Mon, 23 Nov 2009 10:00:11 -0800, karthikbalaguru wrote: > > Hi, > > I am looking for some ways for remotely upgrading only a part of > > functionality/section of a software running on a target board by sendin=
g
> > commands to it through web interface. I do not want the entire software > > to be upgraded. I want only one functionality to be upgraded. I do not > > want the software on the remote target board to be rebooted. > > > I am considering an ARM processor based board with external FLASH and > > RAM memory. > > > What are the best possible ways for doing this ? Any ideas ? > > > Thx in advans, > > Karthik Balaguru > > How big an OS are you using? >
Linux :-) with minimal functionalities along with filesystem.
> This is something that a 'big' OS like Linux, VxWorks (icky), and Windows > (ickier) all support. =A0Either through a loadable library (Windows uses > the DLL, I can't remember the names that Linux and VxWorks use), or with > separate applications communicating with one another. > > You define your interface, you partition the functionality _before_ you > write all the code, you put the mutable stuff into loadable libraries, > then to do your upgrade you just upgrade the library. =A0I _do not know_ =
if
> you can get away with doing this method without rebooting your > application -- you'll have to research.
The trick of having the section of software that is to be upgraded as a library and upgrading only the libraries is interesting :-) . Yes, that avoids the upgradation of the complete software. I think the partitioning of the application w.r.t memory can be done using the Linker Script and while partitioning we need to have a separate memory section/segment for library . In this way, i think that section alone can be overwritten with the new library. But, Is the above method feasible in linux ?
> Alternately, all of these OS's will let you have separate applications > running as separate processes, communicating with sockets or whatever. =
=A0
> Swapping out an application becomes more structured, although you still > have issues with how to get 'er done if you want to do it on the fly.
Can you pleasse elaborate this method ? Thx in advans, Karthik Balaguru
On Mon, 23 Nov 2009 13:30:19 -0800, karthikbalaguru wrote:

> On Nov 23, 11:26&nbsp;pm, Tim Wescott <t...@seemywebsite.com> wrote: >> On Mon, 23 Nov 2009 10:00:11 -0800, karthikbalaguru wrote: >> > Hi, >> > I am looking for some ways for remotely upgrading only a part of >> > functionality/section of a software running on a target board by >> > sending commands to it through web interface. I do not want the >> > entire software to be upgraded. I want only one functionality to be >> > upgraded. I do not want the software on the remote target board to be >> > rebooted. >> >> > I am considering an ARM processor based board with external FLASH and >> > RAM memory. >> >> > What are the best possible ways for doing this ? Any ideas ? >> >> > Thx in advans, >> > Karthik Balaguru >> >> How big an OS are you using? >> >> > Linux :-) with minimal functionalities along with filesystem. > >> This is something that a 'big' OS like Linux, VxWorks (icky), and >> Windows (ickier) all support. &nbsp;Either through a loadable library >> (Windows uses the DLL, I can't remember the names that Linux and >> VxWorks use), or with separate applications communicating with one >> another. >> >> You define your interface, you partition the functionality _before_ you >> write all the code, you put the mutable stuff into loadable libraries, >> then to do your upgrade you just upgrade the library. &nbsp;I _do not know_ >> if you can get away with doing this method without rebooting your >> application -- you'll have to research. > > The trick of having the section of software that is to be upgraded as a > library and upgrading only the libraries is interesting :-) . Yes, > that avoids the upgradation of the complete software. I think the > partitioning of the application w.r.t memory can be done using the > Linker Script and while partitioning we need to have a separate memory > section/segment for library . In this way, i think that section alone > can be overwritten with the new library. But, Is the above method > feasible in linux ? > > >> Alternately, all of these OS's will let you have separate applications >> running as separate processes, communicating with sockets or whatever. >> Swapping out an application becomes more structured, although you still >> have issues with how to get 'er done if you want to do it on the fly. > > Can you pleasse elaborate this method ? > > Thx in advans, > Karthik Balaguru
Google is your friend: http://www.yolinux.com/TUTORIALS/LibraryArchives- StaticAndDynamic.html. -- www.wescottdesign.com

The 2024 Embedded Online Conference