Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Programming IT Technology

Linux Kernel 2.4 Or 2.6 In Embedded System? 178

snikulin writes "My 6-year-old embedded software happily runs on kernel v2.4 on an XScale CPU. The software gets a bunch (tens of megabytes) of data from an FPGA over a PCI-X bus and pushes it out over GigE to data-processing equipment. The tool chain is based on the somewhat outdated gcc v2.95. Now, for certain technical reasons we want to jump from the ARM-based custom board to an Atom-based COM Express module. This implies that I'll need to re-create a Linux RAM disk from scratch along with the tool chain. The functionality of the software will be essentially the same. My question: is it worth it to jump to kernel 2.6, or better to stick with the old and proven 2.4? What will I gain and what will I lose if I stay at 2.4 (besides the modern gcc compiler and the other related dev tools)?"
This discussion has been archived. No new comments can be posted.

Linux Kernel 2.4 Or 2.6 In Embedded System?

Comments Filter:
  • testing? (Score:5, Informative)

    by robvangelder ( 472838 ) on Sunday January 04, 2009 @09:14AM (#26319481)

    if you're migrating, no doubt you're performing tests to ensure your product is still fit.
    once you have your test plan ready, determining fitness against either kernel should be straight-forward.

    • Re:testing? (Score:5, Insightful)

      by joaommp ( 685612 ) on Sunday January 04, 2009 @11:52AM (#26320289) Homepage Journal

      actually, why was this modded flamebait? despite the fact that it doesn't give a direct answer to the question (99.9% of posts don't even give any answer, direct or indirect to the questions), the post actually makes sense and is relevant. With a test plan there is the possibility to find incompatibilities that don't pop out at first sight and that may force the guy to stick to the older kernel and, thus, voiding the 'is it worth it'-question with an 'is it possible'-question.

    • Re:testing? (Score:5, Insightful)

      by DuckDodgers ( 541817 ) <keeper_of_the_wo ... inus threevowels> on Sunday January 04, 2009 @01:52PM (#26321223)
      Your solution requires the post submitter to do all of the work to create his solution for both kernels, and then compare them.

      If someone asked whether to build a reasonably complex website in Python or PHP would you recommend that they build both and then performance test them? That's a lot of extra work.

      In both the original post submitter's case and the hypothetical one I suggested, it would be much easier to gather as much information you reasonably can about both solutions and then make an educated guess as to the best option. I'm not sure Slashdot is the best place for his information gathering, but I understand what he is doing.
      • Re: (Score:2, Insightful)

        by Anonymous Coward

        His solution does not require the post submitter to do any work other than to draw up a test plan.

        Even before doing any coding at all, the test plan itself may reveal whether it's worth it / possible to migrate to 2.6.

  • Why Linux? (Score:5, Informative)

    by TheRaven64 ( 641858 ) on Sunday January 04, 2009 @09:15AM (#26319489) Journal
    2.4 is horrible to work with. It's missing so many features you expect from a POSIXy system that you constantly have to find work-arounds. Having a 2.4 kernel on the cluster during my PhD was enormous pain - I'd write code on FreeBSD, copy it to the cluster, and find half the features were missing. 2.6 is a lot better from a feature-standpoint, but is much heavier and isn't really suited to embedded systems anymore. If you're building the image yourself, why not go with FreeBSD or OpenBSD and get the best of both worlds - FreeBSD if you lean more towards features, OpenBSD if you want a smaller footprint?
    • For example?

      • Re:Why Linux? (Score:5, Informative)

        by TheRaven64 ( 641858 ) on Sunday January 04, 2009 @09:46AM (#26319621) Journal
        I'm assuming you're asking for examples of things that don't work correctly (or at all) in 2.4. If so, off the top of my head (it's been a couple of years since I used a 2.4 kernel):
        • Lots of newer POSIX IPC (SysV IPC works okay).
        • Asynchronous I/O (all of the aio_* family and lio_listio).
        • Several bits of POSIX threads.
        • Most of the realtime extensions, such as queued signal delivery.
        • Some mmap() flags (I think - not sure about this one).

        All of these work on FreeBSD 6 or 7 (aio is in a module that isn't loaded by default on 6, not sure about 7), and most of them work on Linux 2.6.

        • Re:Why Linux? (Score:5, Interesting)

          by miknix ( 1047580 ) on Sunday January 04, 2009 @10:42AM (#26319899) Homepage

          Exactly, I would not say it better.

          As a member of the gentoo embedded team I would recommend the use of crossdev to generate the toolchain.
          By emerging crossdev-wrappers and setting up some gentooish cross-compiler environment, it is possible to cross-compile (by simply emerging them) a lot of packages on portage.
          Emerge will take care of most things leaving the most ugly cross-compile errors for you.

          http://www.gentoo.org/proj/en/base/embedded/cross-development.xml [gentoo.org]

          Regarding the guide, don't use the xmerge script. Just emerge crossdev-wrappers instead.
          Feel free to join #gentoo-embedded on irc.freenode.net

          Happy xcompiling.

    • Re: (Score:3, Insightful)

      by Anonymous Coward

      Or just simply NetBSD, as it's cross-compilation toolchain will save you tons of headaches when you will have to compile and test your new ramdisk.

      IMHO, build.sh is just the way to go.

      • Re: (Score:3, Informative)

        Or just simply NetBSD [....] IMHO, build.sh is just the way to go.

        Finally! I think it's amazing that we're discussing embedded systems, Linux, BSD... yet ignoring NetBSD, which is the flavor that most caters to embedded systems!

        build.sh [netbsd.org] is a great example of one of those unheralded "little things". If I'm on my Mac OS X laptop and want to build a NetBSD ARM kernel or distribution for my embedded single board computer, I don't have to go fussing around with finding and downloading cross-compiling too
    • Re:Why Linux? (Score:5, Insightful)

      by DrDitto ( 962751 ) on Sunday January 04, 2009 @10:31AM (#26319845)
      2.6 is a lot better from a feature-standpoint, but is much heavier and isn't really suited to embedded systems anymore.

      Lets see-- Android runs Linux 2.6.25. My Linksys NSLU2 is currently running OpenWRT with a Linux 2.6.26 kernel. Both are embedded devices with far less processing capability than an Atom-based device.
      • Re:Why Linux? (Score:5, Insightful)

        by molarmass192 ( 608071 ) on Sunday January 04, 2009 @11:50AM (#26320281) Homepage Journal
        I was thinking the same thing. Yes, 2.6 has a bigger codebase, but if you compile only the modules you need, instead of everything plus the kitchen sink, it's really no bigger in binary form (maybe +5%). In return, I find it to be noticeably more responsive given the same hardware.
        • Re: (Score:3, Informative)

          by Anonymous Coward

          I've trimmed-down linux systems before and it was more work than my current method: start with an OpenBSD base, which is usually small enough for most purposes. Installing only the 'base' and 'etc' components results in a pretty damn tiny footprint and yet a full-featured Unix OS (and a quite stable and secure one at that).

          Also, you end up with an actually supported OS that you can update every 6 months without a lot of patching and hacking around a custom forked/branched tree. I don't have time for that

      • OpenWRT dev trunk is rather stable, now supports 2.6.27 and 2.6.28 (change a few vars in the makefiles). The toolchain setup is automated and works well. I had no trouble setting up on modern Ubuntu 8.10 x64 host. A lot of embedded dev seems to be inflexible about hosting platform - the makefiles of OpenWRT work well.

        Runs well on 8MB of RAM with 4MB flash to boot from.

        Supports a variety of target platforms, even x86. Decent package manager, and always looking for additional options.

      • I was wondering who was going to point out that Atom really isn't a very good solution for projects that aren't stuck with ia32 as their development architecture. Arm of some sort is far better for these types of applications. Better power usage, and better optimizations for things that actually matter for mobile or otherwise embedded systems.

        As cool as it is, there isn't really a good reason for most people to in stall a full Linux system on an embedded system. Most of the time they just need a few relevan

        • First, the posters device environment sounds like it has a fixed power source based on that it mediates data between an FPGA and data processing equipment. With that said, a few hundred milliamps of current isn't going to matter to anyone.

          Also, I don't think anyone mentioned anything about putting a full Linux system on an embedded system. It's likely nothing more than what is minimally required, i.e. kernel, ramdisk with some basic utilities and libraries(TFTP, dhcpcd, glibc) and the client apps.

          The schedu

        • Compared to some of the more powerful ARMs (e.g. OMAP3) the Atom is still a lot more powerful. For stuff I was looking at (mostly integer) the Atom was almost 10 times faster. You get two execution threads with hyperthreading which also helps a lot.
      • True, and my NSLU2 sure isn't running 2.4 either. That said, the NSLU2 isn't really a tiny embedded device. 32 megs of RAM and a 266MHz processor is hardly cutting edge; but it is luxury by classic "embedded" standards.
  • by dotancohen ( 1015143 ) on Sunday January 04, 2009 @09:16AM (#26319497) Homepage

    ...then go with the newer kernel. 2.6 has _lots_ of improvements above 2.4. The security aspects may be of less interest in your application, but the performance probably won't be. I've always believed that it is better to regret having done something than to regret having not done it.

    • by ta bu shi da yu ( 687699 ) on Sunday January 04, 2009 @09:21AM (#26319517) Homepage

      I always hate it when people talk about improved performance in general. I'm curious about what specific features of the 2.6 kernel you feel he would benefit from?

      • Re: (Score:2, Funny)

        by Anonymous Coward

        the higher number.

      • by ThePhilips ( 752041 ) on Sunday January 04, 2009 @10:17AM (#26319773) Homepage Journal

        No clue what gp meant.

        From all I heard (I was in embedded business only in 2.2/2.4 times) that 2.6 integrated some number of patches from embedded folks and generally can be customized to run on smaller number of resources. Also, the improved I/O (much lower latencies) and scheduler (interactivity; soft-real-time) would benefit in embedded too. 2.4 has number of problem related to memory management, when virtual memory subsystem can easily grab half of available RAM - only for supporting virtual memory. 2.6 solved the problem for most architectures.

        Generally, many embedded folks moved to 2.6 already - mainly due to support for more new OTS hardware. 2.4 has this support only through vendor patches (e.g. I used in past BlueCat and MontaVista patches).

        In my experience changing kernel on embedded system is quite easy task. Using development system within couple of days you can come up with suitable minimal .config (one needs development system since on target embedded systems might not have sufficient resources to run vanilla kernel). Generally it would either work or not. Normally it works.

        Also note that H/W vendors started being more active in 2.6 times. In 2.4 times best shot at Linux driver was some crude port from e.g. LynxOS or VxWorks. From all I know, 2.6 now supports more PowerPC system than did patch from MontaVista for 2.4 I used three years ago.

        Last, but not least, if you are looking at new modules, many hardware vendors supply Linux compatibility information. 2 years ago finding module with "Linux compatibility" chapter in documentation wasn't a problem at all.

      • by Enleth ( 947766 ) <enleth@enleth.com> on Sunday January 04, 2009 @10:29AM (#26319827) Homepage

        Much better power management, in many different aspects, which can be important if this particular embedded platform is meant to be battery-powered or used in an unfriendly thermal environment (yes, power efficiency is also a kind of performance metric, just per watt of consumed and emitted power, not per unit of time).

        There's more power management support in the drivers, lots of ACPI fixes and improvements, and, most importantly for a platform like Atom (or any x86-based platform in general, when heat and power are a problem), the tickless idle mode, which enables very real and measurable power saving and reduction of generated heat by letting the processor actually do nothing (technically, drop to C3 and further power states) when, well, doing nothing, instead of processing useless interrupts and idling at the normal working power level.

      • I always hate it when people talk about improved performance in general. I'm curious about what specific features of the 2.6 kernel you feel he would benefit from?

        I have no idea. I was BSing through the teeth. I love these Linux articles where one could snag a +5 Informative by throwing some buzzwords in the right places. Hell, I even had a typo in the subject!

      • Your question feels a bit of strange question to ask as surely anyone who has looked would notice a huge difference between the latest 2.6 (2.6.28) and the latest 2.4 (2.4.37).

        Preemptible kernel [lwn.net] (so lower latencies are possible)
        Far more devices supported (both in terms of architectures and additional add on devices e.g. SATA support [lwn.net])
        Better scheduler (initially made O(1) scales better under load [lwn.net] and then fairer with CFS [kernelnewbies.org])
        Task Control Groups [kernelnewbies.org]
        Better support for threads (schedules them in a more intelligent fashi

        • Sadly for you the original poster has already admitted to bullshitting.

          But thanks for the info, very informative.

    • I've always believed that it is better to regret having done something than to regret having not done it.

      You are not quoting the Butthole Surfers, are you? Intro to "Sweat Loaf", from Locust Abortion Technician? Unfortunately, the iTunes 30 seconds intro preview are not enough for this song, you will have to sample it elsewhere.

      • > I've always believed that it is better to regret having done something than to regret having not done it.

        Let's apply a bit of logic.
        "something" will end up being, good, or substantially neutral.
        If it ends up being good, regretting having done it makes no sense.

        If it ends up being bad, worse becomes better than good. "I regret having lost my wallet, i'd rather regret having it still in my pocket".
        Bullshit.

        If it ends up being neutral, doing it or not doing it is the same, so you essentially prefer regret

      • You are not quoting the Butthole Surfers, are you? Intro to "Sweat Loaf", from Locust Abortion Technician?

        I do have the album Independent Worm Saloon but I've never heard anything else out of them. I'll look at that, thanks!

  • Move on (Score:5, Insightful)

    by markus_baertschi ( 259069 ) <markus@mELIOTarkus.org minus poet> on Sunday January 04, 2009 @09:19AM (#26319505)

    I'd move on. Not for any particular feature, but to stay closer to the mainstream for the next years. The 2.4 kernel, not for any technical reason, becomes increasingly exotic as people move on to 2.6.

    You'll have to maintain your existing 2.4 skills for another decade when all others have moved.

    Markus

    • Re:Move on (Score:5, Insightful)

      by morgan_greywolf ( 835522 ) on Sunday January 04, 2009 @10:01AM (#26319687) Homepage Journal

      OTOH, the code is 6 years old, and from what I gather reading the post, it's stable and mature. OTOH, my guess is that if the article poster has written his code in a fairly portable way, it will compile without too much modification on GCC 3.x or 4.x and will run under the newer versions on glibc on a 2.6 kernel.

      On the gripping hand, keep in mind that for embedded applications that memory is usually at a premium and the memory footprint of 2.4 is significantly smaller than the 2.6 kernel. Keep in mind that lots of embedded applications are still using a 2.4 kernel and some embedded applications even continue to use MS-DOS or FreeDOS.

      I guess if I were making this decision, I'd try to compile and run my code on newer Linux distro in a sandbox to see how much work it would take to make it compile and run in the new environment. Then I'd see how much bigger a custom-built 2.6 kernel is than the existing 2.4 kernel, optimizing the kernel configuration for size and memory consumption, of course.

      That work should take no longer than a couple of days.

      If it doesn't work out, you can go back to your existing 2.4 configuration. *shrug*

      What do you have to lose?

      • keep in mind that for embedded applications that memory is usually at a premium and the memory footprint of 2.4 is significantly smaller than the 2.6 kernel

        True, but because poster mentions he wants to move from ARM to Atom, that also implies he is moving to a more modern SBC. Therefore I would guess that his amount of available memory is also at least quadrupling (for the same or lesser costs).

  • by Ruie ( 30480 ) on Sunday January 04, 2009 @09:19AM (#26319507) Homepage

    My question: is it worth it to jump to kernel 2.6, or better to stick with the old and proven 2.4?

    Old and proven on a different hardware. Chances are your new hardware will have some issues (if only caused by you misunderstanding something) and then it would help to have the latest kernel that more people are using.

    Also, Atom is a newer processor, perhaps with PCI Express in the chipset - does 2.4 support that ?

  • 2.6 (Score:5, Informative)

    by JamesP ( 688957 ) on Sunday January 04, 2009 @09:24AM (#26319537)

    I had the same question asked for an embedded project 3 years ago. And it was very clear cut then

    2.6 you get (off the top of my head)

    -Modern drivers (including USB/Network/etc)
    -Various tick rates and tickless
    -More support
    -Several other improvements

    So really don't bother w/ 2.4

  • by rolfwind ( 528248 ) on Sunday January 04, 2009 @09:24AM (#26319541)

    http://www.linuxdevices.com/articles/AT7751365763.html [linuxdevices.com]

    Without knowing your exact parameters though, it's hard to debate any specific advantages.

    • Oh yeah. The article mentions the Just Say No: No Keyboard, No Monitor, No Wires. That was really bothersome in 2.4 times that kernel couldn't be used without video and keyboard.

      Framebuffer in 2.6 is really cool, compared to old 2.4 times when it was doing some weird things without possibility to change the hardcoded behavior. We had the fun with 2.4 when due to driver problems, embedded system was mixing up LCD screens: touch screen was actually showing Linux console. [N.B. reaction of manager who firs

  • iptables and more? (Score:4, Insightful)

    by pipatron ( 966506 ) <pipatron@gmail.com> on Sunday January 04, 2009 @09:24AM (#26319543) Homepage

    Well, I don't have that much experience with 2.4, and how much is 'backported' from 2.6, but IIRC you can use better IP filtering tools in 2.6. And are all drivers for various hardware written to work with 2.4 as well?

    It doesn't sound like you use linux hardly for anything else than for using the drivers for the NIC, so if your system works now, then there's probably no explicit reason to change. What I would worry about though, are your future needs. Even if you don't need to upgrade now, it might just be the perfect time to do it.

  • GCC 4 & linux 2.6 (Score:4, Informative)

    by basiles ( 626992 ) <basile@starynke[ ]ch.net ['vit' in gap]> on Sunday January 04, 2009 @09:35AM (#26319591) Homepage
    I suggest both a GCC 4 compiler (probably gcc-4.2 or 4.3) and a Linux 2.6 kernel (perhaps at least 2.6.25) with a fairly recent (ie 2.6 or 2.7) GNU libc Indeed, all this perhaps uses a bit more RAM, but you'll have more RAM than before, and it bring a lot of important functionalities & improvements (including bug fixes). If you need a specialized HTTP server, consider GNU libmicrohttpd Regard & Happy New Year 2009
  • by Anonymous Coward on Sunday January 04, 2009 @09:49AM (#26319633)

    Since first 2.6 release, most of the developer force is gone from 2.4. Although officially they "support" 2.4, expect the support to be practically nonexistent when you bump into problems. No one should have even considered using 2.4 for the last couple years now. It is simply too risky.

  • by cfriedt ( 1189527 ) on Sunday January 04, 2009 @09:51AM (#26319643)

    If you foresee needing to periodically update the firmware to along with a library or app, then I would say a definitive YES - use the 2.6 kernel (assuming your device is supported).

    It might also be the case that the board you would like to use is not supported in the 2.4 kernel if it's new enough - kernel developers usually don't want to waste time backporting their code if they can avoid it.

    Which introduces the most important issue - backporting is a PITA!! To make a long story short, if you need to track a library or app, such as an embedded JRE, or a hardware interface that requires a kernel module inserted, playing catchup and needing to backport at the same time is an awful game of one-step-forward two-steps-back. Avoid it at all costs. Backporting is not always guaranteed to work!

    The 2.4 kernel has a slightly faster boot time, while the 2.6 kernel has so many improvements that it's hard to shy away from. Do yourself a favour and go with a stable 2.6 kernel.

  • by Kjella ( 173770 ) on Sunday January 04, 2009 @09:52AM (#26319647) Homepage

    If you're doing embedded systems in mass market volume, it's a matter of hardware requirements and cost per unit. Then potentially staying with the 2.4 kernel may be a good choice. If what you're making is a small volume custom setup, I'd go with whatever is getting the most use and the most testing now, which is definately the 2.6 kernel.

    • Re: (Score:3, Informative)

      by ThePhilips ( 752041 )

      What you are talking about???

      2.6 supports more hardware that 2.4 - especially embedded hardware. Several architectures in 2.6 (ARM, PPC) went through restructuring to allow easily add another board/module support.

      And more importantly - for "mass market" - with 2.6 you also get much much better support from hardware vendors. In 2.4 times market was only heating up. Now, in 2.6 times, the embedded Linux market is full swing. You would be hard pressed to find H/W vendor who doesn't support Linux now - b

  • by Thomas Charron ( 1485 ) <twaffle@gmai l . com> on Sunday January 04, 2009 @09:57AM (#26319665) Homepage

    The largest benny for an embedded system with 2.6 is timing, really. The kernel is now, for the most part, 'almost' totally preemptable, bring sort real time to the kernel. Additionally, using RTAI Fusion, you can get hard real time. RTAI extensions have phased out support for the 2.4 kernel.

    But one would have to ask, I suppose. If your just replacing a legacy component with the same thing, why change the code?

    • Re: (Score:3, Insightful)

      by NekoXP ( 67564 )

      Linux kernel preemption is about as far from real-time as you can get. It's not even in the same ballpark.

      RTAI extensions do it right; it's real, real-time, although still not basically only in the parking lot outside the same ballpark. Which is as close as you need to be to HEAR the game anyway.

      I don't think the guy is particularly looking for real-time support here. Pulling data over PCI-X then pushing it over a Gigabit LAN doesn't seem like it needs more than driver support. The Atom will no doubt be fas

      • I'm thinking your right, he may not need it. That's why I was saying he may not need to really change much at all.

        Personally, I'd use whatever kernel the board support kit suggests. If there is no BSP, then whatever the version that the patches for the given ARM core is supporting. Aka, I wouldn't personally use anything not in the mainline kernel. However, this may not be possible, depending on the processor. Not all ARM processors are created equal, as each vendor can ad many things to the processor

        • by NekoXP ( 67564 )

          If he's moving to Intel Atom the best place to be will be the kernel that had the support for the chip when it came out.

          Running 2.4.x kernels on Intel Atom - before decent ACPI support, before the power management support for these chips, before a hell of a lot of modern chipset support especially for Intel 945 and PCI Express hit some level of maturity - is bound to be an absolute nightmare.

          • From the original post, the device he's communicating WITH is an Atom. The target processor to collect the data is an ARM.

            • by NekoXP ( 67564 )

              From the original post, he has an XScale board running 2.4 and wants to drop the "ARM-based custom board" (which is what an XScale would be) to move to Atom, and thinks he will need to generate a new toolchain and ramdisk etc. to do it.

              If he was running ARM again why would he need to update anything? The toolchain and userland would be identical unless he's moving to a wildly different ARM core, and if that was the case, why is he worrying about Atom in the first place?

              I don't think he really made it clear,

  • Go 2.6 (Score:5, Informative)

    by digitalhermit ( 113459 ) on Sunday January 04, 2009 @09:58AM (#26319669) Homepage

    Lots of the improvements to 2.6 have probably been added to 2.4, but many come "native" to 2.6 so no outside patches are required. For example, kernel pre-emption, better scheduler, etc.. There are other intangibles too such as development time, testing, new toolchain, etc.., but you're already moving to a new processor and you'd have to do that anyway.

    Sometime last year I was rebuilding some antique MIPS-based Linux from a 2.4 to a 2.6. Almost everything in the userspace was effortless (though much of it was based on Busybox); the main issue was related to some in-line assembler that took a while to figure out what it was doing. Once I did, I googled it and realized someone else had already solved a year or so ago.

    So in short, no real benefit to sticking with 2.4 IMHO.

    • Something that is an improvement in the server and/or desktop world may not be an improvement in the embedded world.

  • Constraints (Score:3, Interesting)

    by LS ( 57954 ) on Sunday January 04, 2009 @10:00AM (#26319679) Homepage

    Others in this thread will adequately cover the feature differences between 2.4 and 2.6, though it sounds like 2.4 already covers your needs when it comes to functionality. This makes your question more of a management one than an engineering one.

    With these types of decisions you need to look at what your constraints and requirements are, whether they be time, developer resources, product lifetime, estimated lifetime of leveraged technology (kernel 2.4 in this case), cash, etc. It sounds like you'll be doing the development yourself, but otherwise I can't tell what the rest of cycle looks like, so you need to clarify these things before making a decision.

    Those are major considerations, but it gets more subtle when you consider things like how much time you'll save with future updates due to better development tools and support with a new kernel, etc., so you need to estimate also whether the time you spend up front will be saved down the line.

    LS

  • What do you want? (Score:5, Interesting)

    by RedWizzard ( 192002 ) on Sunday January 04, 2009 @10:04AM (#26319699)
    So far all the positively moderated posts have advocated 2.6. Here's a slightly contrary view. You know 2.4. It seems to satisfy your needs. Why exactly are you considering change? Is there something 2.4 doesn't do that you want? I realise you might be asking in case there is some improvement that 2.6 may possibly provide that you've missed, but if the current setup does what you need then why would you even consider a change? My advice: stick with 2.4 unless 2.6 provides something additional that you definitely need.
  • There are some pretty compelling reasons to migrate, but looking at your specific application most of my favorite reasons don't apply. Since you're going to be changing your toolchain somewhat, the 2.6 migration isn't going to be that much more invasive. My reasons for wanting to change have mainly to do with filesystem improvements and USB improvements, which don't seem to have much traction for you. I'm assuming that you did your own hardware drivers for the PCI express data collection, so that shouldn't

  • New thread scheduler (Score:3, Informative)

    by Spy der Mann ( 805235 ) <`moc.liamg' `ta' `todhsals.nnamredyps'> on Sunday January 04, 2009 @10:30AM (#26319835) Homepage Journal

    If you want to minimize latency in your applications, chances are you'll like the new scheduler [wikipedia.org] implemented in 2.6.23 and following. In general, 2.6 has better support for realtime (low-latency) applications: http://www.ibm.com/developerworks/linux/library/l-real-time-linux/index.html [ibm.com]

  • by ErkDemon ( 1202789 ) on Sunday January 04, 2009 @10:35AM (#26319869) Homepage
    "My 6-year-old's embedded software happily runs on kernel v2.4 on an XScale CPU. ..."

    I thought, aaaah, he's built a robust linux PC for his kid. But isn't insisting that his kiddy's first PC has a bang-up-to-date GCC compiler a little extreme?

    Then I re-read it. Oops. Makes much more sense now. Not as cute, though.

  • by Anonymous Coward
    I constantly port the kernel and distributions for custom embedded designs for new and old hardware. It is really painful.

    To go to 2.6 you have to rewrite ALL your custom drivers and the board configuration files. Yes is nicer in 2.6 - but it still has to be done. Just like we did in 2.2, 2.4 and probably again for >= 2.8.

    It is a real pain that the kernel and apps change so rapidly. You regularly run into compatibility problems with:

    1. Host GCC supporting target tools
    2. Host Linux distribution support
  • by Waffle Iron ( 339739 ) on Sunday January 04, 2009 @10:59AM (#26319977)

    ... and go with the 2.5 kernel.

  • I'd go with 2.6. I doubt there are any features that will substantially change anything, it does get you a bit closer to "main street" though should you start adding new stuff.

  • 2.6.x has a slightly larger footprint. But as you're moving to a modern platform probably with quite enough RAM, I'd say that's not a problem.

    I wouldn't do it for the features others are recommending: You have your embedded app, which already runs on 2.4, it will still run on 2.4.

    However, you might encounter problems with support for peripherals on 2.4, so just going for 2.6 will be less painful.

    I recommend staying with what you have, unless prodded, like now, and then doing a catchup to the most recent stu

  • by slashbart ( 316113 ) on Sunday January 04, 2009 @11:53AM (#26320295) Homepage

    Hi

    We moved our project from 2.4 to 2.6 during development, because the maximum interrupt latency of 2.6 is so much better. We needed to handle UDP packets within 20 ms. max and occasionally on 2.4 we would have a 60 or more. Going to 2.6 solved our problems immediately, even with early versions.

    See this Linux Journal article for more details on our project http://m.linuxjournal.com/article/7190 [linuxjournal.com]

    Bart van Deenen

  • by nchip ( 28683 ) on Sunday January 04, 2009 @11:56AM (#26320319) Homepage

    or better to stick with the old and proven 2.4?

    Linux 2.4 might be "proven" on your old Xscale system, but I doubt anyone else has even _tried_ to use Linux 2.4 on something as new as Atom. Linux 2.4 will also lack support for any of the peripherals of your Atom com module.

    • Re: (Score:3, Informative)

      by wtarreau ( 324106 )

      Atom is just plain x86 with HT. Nothing fancy, nothing new. Drivers for rare hardware might cause problems though, but that's true with any kernel. I would have worried if the guy wanted to switch to an exotic architecture but that's definitely not the case here.

  • If it ain't broke, don't fix it.
  • I recently upgraded a piece of equipment running a Freescale 8270 that does something similar from 2.4 to 2.6.17 and the networking performance improvement was very significant. If you need better performance and lower latency, 2.6 is definitely the way to go. The old 2.4 kernel had been significantly hacked up as it was to improve performance which resulted in higher latency. The networking interrupts killed the performance unmodified. We now plan to upgrade two other CPUs from 2.4 to 2.6 after seeing
  • by jonored ( 862908 )

    I'd swap over to 2.6 if you're swapping to a COM Express module - I'd worry about support for PCIe and devices based on it in 2.4, and the whole point of COM Express over other board designs is to get PCIe and other differential signaling. Also, 2.6 runs snappy on 64MB ram and a 300MHz PII - I don't remember seeing any COM Express modules with worse specs than that, and /certainly/ not an Atom-based one. Unless you're doing something very peculiar, the ~3MB of a 2.6 kernel on disk shouldn't hurt either; the

  • by Svartalf ( 2997 ) on Sunday January 04, 2009 @02:17PM (#26321383) Homepage

    As someone facing a similar situation at his day job, 2.4 is painful in some regards. In my case, 2.6 allows me to do a non-standard initramfs (the stock is minimal and then you can load other initrd or initramfs images from the kernel options...) so that I can tapdance around the three differing hackish bootloaders they did in 2.4. This allows me to do major cleanups in what they did for doing NFS rootfs on the IXP2800 blades and on the X86 ones with minimal pain.

    Most of the people commenting on 2.6 being too big are thinking of the whole size with everything loaded up. Minimal kernels with just your drivers loaded and only your drivers in the module build, you end up with only about 5-10% increase in footprint in memory and store space, with the ability to provide modern device support for things. In the case of what you mention, you're moving to an Atom based machine board. Given that you're moving to a modern board, the odds of things being "nicely" supported is lower with the 2.4 kernel.

    Since you're manipulating large volumes of data over GigE, you're going to want to switch, probably even with the old ARM stuff if you can manage it. 2.6 provides much more responsive networking performance (so long as you do your network code right and don't dink with the scheduler (heh...let's just say I corrected a not so good idea there recently...)).

    You may have to port a few custom drivers over to 2.6, but in the end, it'll work better since the driver architecture is better in 2.6.

  • by wtarreau ( 324106 ) on Sunday January 04, 2009 @02:32PM (#26321519) Homepage

    Well, it's not wise to change both the hardware and the software at the same time. You think it will reduce your time to market but it might increase it instead due to the numerous changes that will have to happen in your toolchain before getting anything barely working again.

    From what I understand, you have a big experience in 2.4 and Xscale. 2.4 Also works on x86, so you'll not have to re-learn everything from scratch by just changing the architecture. All your toolchains, boot scripts, packaging scripts, etc... will still work as they did before. Then, only once you get familiar with your new architecture and the minor changes you might observe in the boot sequence, build process etc... it will be the right time to evaluate a migration to 2.6. Once you put your finger there, you'll quickly discover that you need to upgrade your gcc, glibc, replace modutils with module-init-tools, experiment with hotplug and sysfs, maybe switch to udev, etc... Step by step you'll notice a big number of changes, but you will be able to proceed one at a time, which is not possible if you change the soft at the same time as the hardware.

    Also there are other aspects to consider. 2.4 has been maintained for a very long time, and you're probably used to backport some mainline fixes to your own kernel from time to time. 2.6 is not maintained that long (avg 6 months), and changes so fast that you will not be able to backport fixes for many years. I'd strongly recommend to start with 2.6.27, because Adrian Bunk will maintain it for a long time, as he did with 2.6.16. Once 2.6.27 is not maintained anymore (in about 2 years) you'll have to decide whether you stick to 2.6.27 and try to backport fixes yourself or switch to 2.6.36 (just a guess).

    Also, 2.4 accepts almost no new hardware nowadays. If your new platform works well, that's fine, but how can you be sure that next year your GigE NIC will not change to something not supported anymore ?

    I would say that the only case where 2.4 would make sense for a long term starting from now is if you don't have the time to revalidate 2.6 or to wait for 2.6.27 to stabilize, and need to quickly release something which will sit at your customer's in a place where it cannot be upgraded. Something like "install and forget". But I don't feel like it's what you're looking for.

    So, to summarize :
          1) switch your architecture
          2) switch your kernel

    Whether an official release of your product exists between 1 and 2 is just a matter of your time constraints and customer demand.

    Last, to show you you're not alone, I'm too considering switching our products to 2.6, but next release will still be 2.4. Too many changes for a short-term release, and 2.6.27 not ready yet to reach years of uptime (but it's getting better though). 2.6.25 was particularly good but not maintained anymore.

    Hoping this helps,
    Willy

  • As in I'm in the middle of a similar project right now... If you have drivers, go for 2.6 and make it a recent 2.6, like 2.6.26. I was very afraid of kernel bloat when we were considering a move up from 2.4.18, but the hit wasn't as bad as I feared. As others have said, maybe 5 or 10%. That can be a lot depending on your runtime system. How do you save non-volatile variables? Flash? PXE boot? Custom bootloader that boots up with an NFS-mounted root partition? We have found the initramfs boot enviro

  • by dltaylor ( 7510 ) on Sunday January 04, 2009 @05:12PM (#26322753)

    I do embedded Linux and have done so on several generations of hardware and kernel.

    There are a lot of slightly incorrect comments here about the size of the 2.6 kernel vs. 2.4. Once you know what your target hardware platform will is, and which subsystems you need, you can tailor a kernel to be usably small by configuring out the parts that you don't need. Don't need USB, or video4linux? Leave it out. Don't use modules, unless you need to control the load order, set parameters, or want to be able to swap hardware platforms, since they take up space in two places (ram disk and kernel memory).

    One of the best reasons that I have for the 2.6 family is the new version of ram disk. You can almost trivially generate a run-time ram disk in the new cpio format, with a tweaked init that doesn't need to go to a disk for root, although some kind of non-volatile storage will certainly be needed.

    It will be harder and more expensive to find really small RAM DIMMs for the Atom. Get a size that will be manufactured for a while. Same thing with your non-volatile storage. On a current project using a commercial board (including a GUI, commercial multi-language font set, media player, and a kernel with modules so we can move to other hardware, as needed), we've got a 512MByte DIMM for the Intel chip set with room to spare.

    Another great reason for moving on is development. Have you tried to run a 2.4-based distribution on computers that you can buy today? It's doable, but painful. If you want to give your developers a (for example) Ubuntu 8.10 distro, which can be easily guested to freeze your build environment, they can run on the same kernel and libraries you do in the target for initial build and test.

  • I think the big deciding factor is: "Does the CPU you are going with have an MMU or not?"

    I will explain the reasoning:

    If you have an MMU, it esentially means you can use any kernel, distro, apps, etc. without really much thought involved. Therefore, you might as well use 2.6 for all the reasons aforementioned.

    If you do not have an MMU, it means you more than likely have to/are using uCLinux. uCLinux, is not just a kernel, it is a whole distro. This is largly due to the fact that MMY-less kernels canno

  • If your software does what it needs to do as well as you need it done, why introduce new variables unless you have to?

    There are a number of improvements in 2.6 (enumerated by others here) as well as drivers for newer hardware, but unless you actually need those features, the gain for you is zero.

    In any event, you're already going through the upheaval of a platform change, that's quite enough for one jump. Once you have everything validated on the new hardware, if you'd just like to move ahead, that is the t

  • I'm not sure why anyone would choose 2.4 over 2.6, except for cases of legacy support. There have been numerous security issues and improvements which Linus has decided not to backport into 2.4. The notion that 2.6 is too heavyweight for embedded systems is just bunk - it will run rather well on cpus as slow as 40 MHz.

    With 2.6, you're going to get the latest drivers, and a lot of important new technologies, especially with regard to things like wifi and USB. While I haven't looked at the Linux A/V arc

"If it ain't broke, don't fix it." - Bert Lantz

Working...