linuxembedded-linuxpower-managementpower-saving

How to do power save on a ARM-based Embedded Linux system?


I plan to develop a nice little application that will run on an arm-based embedded Linux platform; however, since that platform will be battery-powered, I'm searching for relevant information on how to handle power save.

It is kind of important to get decent battery time.

I think the Linux kernel implemented some support for this, but I can't find any documentation on this subject.

Other questions:


Update:

It seems like the folks involved with the "Free Electrons" site have produced some nice presentations on this subject.

But maybe someone else has even more information on this subject?


Update:

It seems like Adam Shiemke's idea to go look at the MeeGo project may be the best tip so far.

It may be the best battery powered Embedded Linux project out there at this moment.

And Nokia is usually kind of good at this type of thing.


Update:

One has to be careful about Android since it has a "modified" Linux kernel in the bottom, and some of the things the folks at Google have done do not use baseline/normal Linux kernels. I think that some of their power management ideas could be troublesome to reuse for other projects.


Solution

  • I haven't actually done this, but I have experience with the two apart (Linux and embedded power management). There are two main Linux distributions that come to mind when thinking about power management, Android and MeeGo. MeeGo uses (as far as I can tell) an unmodified 2.6 kernel with some extras hanging on. I wasn't able to find a lot on exactly what their power management strategy is, although I suspect more will be coming out about it in the near future as the product approaches maturity.

    There is much more information available on Android, however. They run a fairly heavily modified 2.6 kernel. You can see a good bit on the different strategies implemented in http://elinux.org/Android_Power_Management (as well as kernel drama). Some other links:

    https://groups.google.com/group/android-kernel/browse_thread/thread/ee356c298276ad00/472613d15af746ea?lnk=raot&pli=1

    http://www.ok-labs.com/blog/entry/context-switching-in-context/

    I'm sure that you can find more links of this nature. Since both projects are open source, you can grab the kernel code, and probably get further information from people who actually know what they are talking about in forms and groups.

    At the driver level, you need to make sure that your drivers can properly handle suspend and shut devices off that are not in use. Most devices aimed at the mobile market offer very fine-grained support to turn individual components off, and to tweak clock settings (remember, power is proportional to clock^2).

    Hope this helps.