What's the world's most common computing platform? Hint: it's not the PC. ---------------------------------------------------------------------------- According to http://eetimes.eu/showArticle.jhtml?articleID=199702110 Arm shipped the processors in 250 million "smart phones" in 2006 (83% market share in that niche). According to ARM Inc. quarterly results for Q1 2007: http://media.corporate-ir.net/media_files/irol/19/197211/press/Q12007EarningsRelease.pdf In the first quarter of 2007, the licensees of ARM Inc. shipped 724 million ARM processors. In one quarter. (ARM Inc. collected $45 million in license fees, which is an average of 6.2 cents/processor.) In a May 23 2006 presentation to ARM investors, ARM Inc. estimated its 2006 market share at 80-90% of the cell phone market, but only 21% of the larger market. The embedded world is big, folks. Drew highlighted five key growth areas for ARM between now and 2010... [The first four are] set-top-box, high-definition television and DVD systems, solid-state and hard disk drive storage, automotive electronics and 32-bit microcontrollers. In these areas in 2006, ARM had market shares of 14, 20, 5 and 13 percent respectively... They are also market sectors that will represent a total available annual market of nearly a billion cores or more each in 2010. The biggest annual market opportunities are likely to be automotive and 32-bit microcontrollers at 2.0 billion and 1.9 billion cores each. ARM's fifth key target market is the smart phone, where it is already enjoying success. In this area the company shipped 250 million units in 2006 and has a market share of 83 percent, according to its own estimates. [But it's still a "key growth area" for ARM because it's growing so fast.] You want to know why Apple's doing the iPhone? The unit volume dwarfs the PC space, and the margins aren't bad either.. Want a list of the "ARCH=" values Linux supports? In the Linux source code, do: cd include ls -d asm-* | sed 's/asm-//g' alpha arm arm26 avr32 blackfin cris frv generic h8300 i386 ia64 m32r m68k m68knommu mips parisc powerpc ppc s390 sh sh64 sparc sparc64 um v850 x86_64 xtensa Ignore "generic", and um is User Mode Linux. The rest are target platforms that run Linux from kernel.org. Commercially significant platforms: The big four in the embedded space: x86/x86-64, arm, mips, ppc. Big iron: http://top500.org/stats/28/procfam/ Dominated by x86-64 (44.2%), x86 (24%), and PPC (18.2%). Historical interest (still money in supporting cobol, but most of us can safely ignore these, they peaked a while back): alpha, parisc, sparc, itanium Other interesting but less widespread: sh - Super Hitachi, used in auto industry. m32r - from a Japanese company called Renesas (Hitachi owns 55%, Mitsubishi Electric owns 45%). coldfire - Freescale (spun off of Motorola), modern version of 68k, nommu. blackfin - Analog Devices, another nommu chip. Fairly new. > > > Can you give me an advice what arch(es) is(are) suitable for > > > building and testing busybox for NOMMU arch. > > > > Well, I'm partial to arm myself, but I'm influenced by once having got > > armulator working.  In theory you can switch the MMU off in the Linux > > kernel for several architectures and then if you boot the result it > > doesn't matter if the hardware has a MMU or not, the kernel won't use it > > if it does. > > > > > At least which NOMMU arches > > > 1. Are supported by qemu 0.9.0 > > > 2. Have mostly working support in binutils and gcc > > > > QEMU doesn't specifically have NOMMU support for anything, with the > > possible exception of coldfire.  It's about the same way they don't > > explicitly have a way of disabling most floating point coprocessors. > > They just tell you "switch it off in the kernel". > > Yes, I realize that. I meant "which NOMMU arches supported by qemu", > not "which arches can be run under qemu with MMU forcibly disabled". Alas, none. > Example: i386 is supported by qemu, but it isn't NOMMU > (technically you can run i386 like NOMMU, but probably nobody > is actually trying to run Linux on it that way). > [me recalls Rick Hohensee, though...] I've heard of a couple people who did that. Apparently, if you're really low on memory (such as trying to run something in 4 megs of DRAM), nommu helps because you don't have page tables taking up space.  it can give you that extra 15% you need to make the whole thing fit. > Example 2: Linux is running in NOMMU mode on blackfin (well, because > there is no MMU, period), but not supported by qemu. qemu recently grew a coldfire target.  Paul Brook's working on it.  I don't think that has a mmu. Also, I've used armulator to emulate a nommu arm. > I ask "what CPU(s) are used in NOMMU mode in real life by Linux > embedded crowd and which also are supported by qemu". I know about blackfin, coldfire, and some nommu arm variants.  I also know that mips isn't really sold as a chip so much as a library you take to a fab that burns chips for you with lots of integrated peripherals.  (Mips is really going after the customizable system-on-chip market.) > I simply don't know CPU world that much beyond i386, and therefore > am asking you. I had to learn this myself over the past few years. Unfortunately my laptop died over the weekend so I'm on a temporary desktop system sorting through backups to see what files are where, so I haven't got immediate references to fling at you, but off the top of my head: The main Linux platforms are x86, x86-64, arm, mips, and powerPC.  I'll cover each in turn. There are several minor ones, the most notable of which are probably coldfire (a 68k derivative that's not quite compatible with the original), SH (Super Hitachi, which is used in japan and thus in the automotive industry, but not much outside it) and Itanium (which SGI and bits of HP still sell supercomputing clusters based on; don't ask me why).  Also blackfin, which is fairly new and I keep confusing it with Arm, but it isn't.  Mike Frysinger's day job involves fiddling with blackfin.  But none of those is really significant, they either have less than 1% of the market by volume, or they've only ever been used in about 3 products ever (admittedly high volume products, but not general purpose -- coldfire falls in that camp). There are lots of old historical chips (Alpha, PA-RISC, 68k) that have gone obsolete and fallen off the map.  Linux still supports them, but nobody really makes them or uses them in new products anymore.  These days there's really just five big ones: x86, x86-64, arm, mips, powerpc, and "everybody else".  (Although some of the "everybody else" can have some corporate muscle behind them, SH and Itanium come to mind here.  But the likelihood of a random new device using any of those is just about nonexistent.) In the embedded space there are three criteria: price, power consumption, and performance.  There's the classic price/performance ratio from the desktop world, but also power/performance.  You can sort of fudge it as "(price*power)/performance" but some applications care way more about price than power, and vice versa. The cell phone guys are some of the biggest power misers out there, because if you want 2 weeks standby from a cell phone battery, your standby power budget is 5 miliwatts.  That isn't much.  And then if you want 6 hours talk time...   The math is similarly brutal.  NOBODY cares more about power consumption than the cell phone industry. ARM owns over 80% of the cell phone market.  ARM has the best ratio of power consumption to performance, the best bang for the watt.  The entire basic ARM design is a grand total of about 43,000 transistors.  That's it.  It doesn't have the best absolute performance (the fastest one I heard of ran about about 600 mhz and that's over twice what they normally run at), but some of them have Digital Signal Processor (DSP) support chips (basically a coprocessor that's more general purpose than an FPU, sort of a very simple CPU with no I/O capabilities that works about like a Unix pipeline, stdin->process it->stdout) to handle graphics and sound coprocessing.  There are arm system-on-chip devices out there with a built-in 3D accelerator.  The Nokia N800 has one of these.  (And now you know why it was put out by a cell phone company. :) The handheld and cell phone markets are converging (roughly the same form factor, roughly the same hardware requirements, roughly the same niche of carrying a device with you at all times), and the Cell phone is going to win because it has internet access: it's easier to upgrade the hardware in a cell phone than it is for a handheld manufacturer to install transmission towers all over world.  So ARM owning the Cell phone market is IMPORTANT.  If you only care about one non-x86 platform, care about ARM. Apple's trying to take over this niche with the iPhone, to corner the market and achieve proprietary lock-in before any other players show up.  I believe that has an arm processor, and I know the iPods do. ARM is a british company that doesn't sell chips, they just sell designs for other people to fab.  Intel flirted with arm for years (and might still), doing the StrongARM (which made high performance ARM chips but sacrificed power consumption to get there, and thus wasn't all that successful) and the XScale (which struck a better balance), but they recently sold a large chunk of their ARM business to a company called Marvell.  Lots of other people fab ARM chips.  Note that the "architecture" number (armv3, v4, v5, v6, v7) is not the same as the model number (arm 9 or arm 1026ecj are model numbers).   Architecture is which instruction set it implements, model number is a specific circuitry layout implementing that architecture.  Yeah, this is confusing, and you can read about it at http://www.arm.com/products/CPUs/architecture.html Mostly I care about ARM architecture rather than model number.  v3 was the first modern ARM architecture, but nobody makes it anymore.  v4 is backwards compatible (v3 code will run on it), but code compiled for v4 runs faster on a v4.  Similarly, v4 code runs on v5 but if you recompile for v5 it goes about 25% faster on v5 hardware (and the all important power/peformance ratio is really helped by compiling for the most recent available target).  v6 and v7 are too new to say much about 'em, and not that widely used yet, but the recent XScale designs implement that so we'll see.  QEMU does ARMv5, and has patches for v6 and v7 that haven't been intigrated because Arm (the company) has the Code Sourcery guys locked up with NDAs and is STUPIDLY trying to sell its own emulators in competition with QEMU, and we have to wait for them to have their head handed to them by the market. I could talk about ARM all day but there are other architectures: Yes, x86 and x86-64 get used in the embedded space.  x86 shows up in the embedded space because it's the architecture in the PC so it's a default choice for some people.  It's CHEAP.  There are low power variants from VIA and AMD's geode and such, but attempts to get the power consumption down tend to kill performance.  x86-64 is replacing x86 on the desktop (neither Intel nor AMD manufacture desktop or laptop 32-bit chips anymore) and it's just x86 with about 10% more circuitry.  Once it's the new desktop chip, it'll start to show up in embedded stuff too just because it's there.  And we'll see somebody make a low-power version of it with sucky performance. :) PowerPC owns the gaming console market.  The xbox, Playstation, and WII/Gamecube are all PowerPC systems.  (Way back when some of the older consoles were mips, but that was a long time ago now.)  This means PowerPC has the unit volume and economies of scale to be cost competitive with x86/x86-64 at desktop performance levels.  It's the only chip that has, although when the 64-bit consolidation hit and Apple abandoned them they took a big hit and have been losing importance.  Eric and I wrote a paper about that: http://www.catb.org/~esr/writings/world-domination/world-domination-201.html As a result, PowerPC has been declining in significance for a couple years now.  It still has gaming consoles, and if Cell processor (a PowerPC with 8 slave DSPs glued onto it) had shipped about 2 years earlier it could have change the world, but it didn't.  In addition to Apple losing interest, Motorola (the big cell phone manufacturer) used to be big into the PowerPC as the successor to the 68k, but they spun off their chip fab division as a new company called Freescale a few years back, and ever since then Motorola itself has gone mostly ARM.  Freescale is still trying hard to flog PowerPC chips into the embedded space, but Freescale is also selling ARM now too.   There's a consortium (power.org) of vendors who have licensed the chip design to fab it themselves, but that consortium was announced before Apple abandoned the chip. The other big company behind PowerPC, historically, was IBM.  The chip was designed by an allicance between Apple-Motorola-IBM the way Itanium was done by a partnership of Intel and HP.  IBM is still very interested in PowerPC, and they make honking big mainframes out of it.  But the PowerPC variants they make mainframes out of are performance tweaked monsters that eat power, and are totally unsuited for use in the embedded space.  The game console people don't care that much about power (it plugs into the wall after all) beyond wanting a big heat sink rather than a cooling fan so the console isn't noisy and has fewer moving parts (although it's already got a DVD drive in it so they're not trying to ELIMINATE moving parts, either). Note: power consumption == heat dissipation.  It's a 1:1 ratio.  So many of the same concerns the embedded guys have due to conserving battery life and enormous unit volumes (a penny a part adds up when you make a million of them) also show up in the high-end computing clusters.  The Google cluster eats something like 500 watts per square foot, and then they have to spend as much again on air conditioning as they do on electricity.  They REALLY want power consumption to go down, and they want cheaper components if they're going to be buying thousands of them.  And they want them smaller so they can pack them in tighter in their expensive air conditioned rackmount space (where the embedded guys want them smaller and ligher so they're more portable and cheaper to make)...  Don't be surprised if you find yourself invited to a high performance supercomputing conference.  The high end and the low end gang up on the middle (the desktop). So ARM is incredibly successful and growing like mad, x86-64 is taking over from x86, and the future of PPC is uncertain but likely to survive, if diminished.  That leaves one other contender: MIPS. MIPS.  Why does anybody do mips?  Because you can license the design and turn it into a system on a chip.  Mips has reasonable power/performance (but not as good as arm).  The reason MIPS has a niche is that the ARM guys won't let you call your chip ARM if you remove some of the instructions or add incompatible new ones.  If it doesn't run ARM software, it's not ARM.  (The ARM guys even have an ABI spec, that's the EABI vs OABI you hear about which I can explain but in a different email, this is already too long.) The MIPS guys don't care what you do, license a mips core and redo half the instructions?  Fine.  The end result doesn't have to run any specific software in order to be called MIPS.  There's no compatability test or certification, and people who are fabbing their own chips like this because they can do anything they want with it.  This makes it INSANE to try to port software to generic mips, you wind up porting to a reference design or some such.  But it also means you find MIPS in the middle of other people's video cards, or a mips core used inside a network card, etc.  There's even a MIPS implementation you can load into an FPGA.  It's extremely customizable, and that's it's niche.  MIPS does let you query the thing to see what features   are available in a fairly granular manner (which ARM doesn't do, and can cause problems if you don't know things like the cache line size of the chip you're running on), but the downside is there's not as strong a standard about what consitutes mips. So you find lots of MIPS "system on a chip" (SOC) designs, and not as many mips standalone processors. I've attached the notes I made when I learned this.  It talks about individual processors within each family.  (Just as x86 had 386, 486, Pentium, Pentium II, Pentium II, Athlon, Opteron, etc...  These had their own.) They're notes to myself so they may not make much sense, but feel free to ask questions about anything you don't understand.  (It doesn't mean I know it either, but I might.) Rob ============= What are the major processor families Linux is used on in the embedded market?   Arm: Best power/performance ratio.   Mips: Customizable, FPGA version.   PowerPC: Pushed by IBM and Freescale(Motorola).   sh: Super-Hitachi.  Used in japan, especially in the automotive industry.   x86: Easy to prototype on desktop.   nommu (arm, coldfire): price to performance vs power to performance Arm: 34 instructions, 43,000 transisters.  SIMPLE design. PowerPC: 187 instructions (for 32-bit, +41 more for 64-bit) Other people's guides:   http://linuxdevices.com/articles/AT4313418436.html x86   via (samuel) - was cyrix   centaur winchip   Fun note: power consumption of P4 exceeds draw of Compact PCI bus.   x86 soc: system on a chip.   ha: http://www.amd.com/epd/index.html   geode: used to be cyrix, AMD bought it and killed it:     http://www.hpcwire.com/hpcwire/hpcwireWWW/04/0528/107738.html   ha: http://www.intel.com/design/support/faq/embed_proces/x86faq.htm   via   Is transmeta still around?   Little guys:     http://www.windowsfordevices.com/news/NS9332812610.html     http://www.zflinux.com/   Advantages: you can do development really easily, and you can get higher   performance x86 than any other processor.   Disadvantages: High power consumption.  Power/performance isn't that good.   Ask the One Laptop Per Child people. :) power   http://www-306.ibm.com/chips/techlib/techlib.nsf/productfamilies/PowerPC   Lots of wikipedia stuff.   Everything can run 7xx except 4xx and 8xx.  (Even 970, 74xx, 85xx)   three manufacturers:   amcc - bought 4xx line from IBM (405, 440)     405: http://www-306.ibm.com/chips/techlib/techlib.nsf/products/PowerPC_405_Embedded_Cores     440: http://www-306.ibm.com/chips/techlib/techlib.nsf/products/PowerPC_440_Embedded_Core     440gx includes floating point.     low power, medium performance.     Requires different toolchain from 7xx line.       Missing some 7xx instructions, can't run those binaries.     Widely used in embedded world.     http://www.amcc.com/Embedded/     4xx toolchain (for 405 family)     440 toolchain (optimized for 440)     4xx toolchain will run on 440, but slower.  440 toolchain may run on 405,     but _really_ slow.   ibm     4xx: IBM sold this to amcc.           http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/13010F4A79FC026C87256DFA004D30D0     7xx (750)       32 bit, plus floating point.       software compatible with freescale stuff.       Used in VME bus (vs compact pci) (sun used vme first)         http://webout.weizmann.ac.il/physics/services/edaq/introvme.htm       medium power, medium performance.       Getting long in the tooth.       A 7xx toolchain runs under most other PowerPCs.     74xx (7440, 7450)  -- This is "G4"        Also 32 bit, can run 7xx code.        Altivec extensions: Separate toolchain, different abi          IBM's version of mmx for the PPC.        High performance but high power.        Also used in VME     970        64 bit, but can also run 7xx code in 32 bit mode.        New altivec (also runs old altivec).        This is G5 (a marketing term that apple used).        New 64 bit toolchain.        Insane power consumption, very high performance.        Cross compile _from_ one of these suckers.   freescale - was motorola     601: joint motorola/IBM devlelopment.          aimed at desktop.          pure processor, needed support chips (memory controller, etc).          603: faster, actually worked.          http://arstechnica.com/articles/paedia/cpu/ppc-1.ars/1     8xx: Motorola's low-power line.          Needs own toolchain: Instructions removed from 601, won't run 7xx.          Almost an SoC          IBM's answer to this was the 4xx.          Power quicc 1 was a peripheral set wrapped around an 8xx core.          Developed as replacement to          821 - general purpose, PCI bus          860 - pure communications: hdlc, ethernet...          Still in use, but not common anymore.     Power quicc 2       ~603 core, plus peripheral set.       CPM - Communication Processor Module             General purpose DSP plus ROM, for I/O only.             Serial, Ethernet, HDLC, (in future, USB)...       8260, 8280 - run 7xx code.       8349 - newer core (603e), still runs 7xx code.     Power quicc 3 - 85xx       Can run 7xx binaries, different floating point unit          Disable hardware floating point, enable kernel emulation.          Or different toolchain (gcc doesn't support FPU, soft float).       8560 - e500 core, SPE Single Precision Engine.  Linux can't use it.              Can't use gcc toolchain's floating point unless you turn off              floating point in the kernel and do emulation.  Otherwise do a              soft-float toolchain.)              Order of magnitude faster to have the toolchain emulate floating              point than have the kernel do it.       8555 -       Lots more chip numbers than the above in these families.   Apple:     G4: 74xx     G5: the IBM PowerPC 970   Look up what G3, G4, and G5 are.  Apple's name for these processors when used   in desktops.  (Motorola never shipped a G5.)   bootloader: uboot most common.  Also pids, motorola bug, etc. arm   arm - arm.com, british company that sells designs, doesn't fab much.     nice thing about arm: minimum level of sanity, can't remove just anything     and still call it arm.   For userspace: armv3 toolchain should run on anything higher.   (v4 current low-end.)   For kernel: gotta tailor it to chip, can't autodetect cache line size and such.   Architecture version vs processor version     Architecture version:       Each architecture version sold to lots of manufacturers.   Architecture:       Older will run on newer       toolchain targeted at newer architecture is optimization.         Forwards but not backwards compatible.       v1, v2: old 26 bit stuff, long dead.       v3:         - now obsolete         - first 32, but still supported 26 bit.         - great power consumption, but slow.         - first 32 bit (from 26 bits).       v4:         - Huge difference from v3, much faster without increased power consumption.         -         - Most current arm chips are v4.         - Examples: DEC strongarm, 920t       v5         - Allowed to drop 26 bit stuff.         - Can clock much faster, but that increases voltage.           - Can scale voltage. More efficient than v4 when run at             v4 clock/volts, but not everybody bothers to scale voltage.         - new xscale stuff.         - 926t     Processor version:       Names are usually processor version, but understand features and       architecture to figure out which toolchain is best.       Refer to website.   Sold to many companies with fabs:       Intel (ixp1200, 1250, 1260, 2200, 2400: arm + Intel DSP)           ixp1200 original arm intel network processor                   found in compact pci a lot     freescale     cirrus logic     TI - bug David about this.   ARM integrated into mainline kernel well.  Start with mainline kernel and   build a version to run on any ARM, but runtime autodetect sucks, have to   build custom kernel for each processor.   bootloader: uboot (also redboot which can't build without ecos).   Arm xscale is most common current chip.  That's Intel's line, sequel to   strongarm (bought from DEC).  Strongarm was v4, xscale is v5.   Strongarm was high-performance arm, but sacrificed some power efficiency.   (cirrus logic had better power/performance at the time, but maxed around   70mhz while strongarm around 225.)  xscale new core designed to get power   efficiency back.  Designed to dynamically scale clock speed and voltage.   Lookup: which arm in zaurus?   Disadvantage of just having v4 toolchain for everything: v5 perform up to   25% faster with v5 toolchain.  v6 only works under EABI.   EABI can do thread local storage, new types of floating point hardware. mips   Older, r3000, r4000...  obsolete.   Two current categories: 32 and 64 bit.   mips32:     r1 - original spec     r2 - new spec (new instructions)   The linux kernel can figure out what you're running on, spec allows feature   detection.  One kernel can support 3-4 different processors.  But can't   take advantage of r2 stuff that way, requires different toolchain.   On exact implementations of mailine core, autodetect works well, but mips   doesn't require manufacturers to follow spec closely.  They have to diverge   fairly far before you can't call it mips anymore.   Mips stuff not in mainline kernel.  Mainline kernel more or less useless on   mips.   bootloader: yamon, used by mips itself.  Could port uboot to it as well. others:   88k   68k   coldfire (m68k subset)   sh - Super Hitachi, big in Japan and automotive industry historical:   alpha   sparc