Building Bare-Metal ARM Systems with GNU
embedded.com
embedded.com
"As part of its ongoing commitment to maintaining and enhancing GCC compiler support for the ARM architecture, ARM is maintaining a GNU toolchain with a GCC source branch targeted at Embedded ARM Processors, namely Cortex-R/Cortex-M processor families, covering Cortex-R4, Cortex-R5, Cortex-M0, Cortex-M3, Cortex-M4, and Cortex-M0+. As part of this, ARM will, at regular intervals, release binaries pre-built and tested from the ARM embedded branch. The improvements will be freely available for integration into 3rd party toolchains, and for direct download by end-users.
ARM employees are maintaining this project. Contributing to this project should be via GCC trunk http://gcc.gnu.org and binutils trunk http://www.gnu.org/software/binutils/. This launchpad project is for communication and downloading. No code change is done in lp project."
Also! If you like building for ARM under gcc , you might get a kick out of my Virtual Development environment I created for it. It's intended for Cortex M4 CPUs, but probably works well for other ARM cores:
https://launchpad.net/~terry.guo/+archive/gcc-arm-embedded
And yes, this is super-easy:
Step1: Inside Ubuntu, open a terminal and input "sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded"
Step2: Continue to input "sudo apt-get update"
Step3: Continue to input to install toolchain "sudo apt-get install gcc-arm-none-eabi"
diydsp linked to https://launchpad.net/gcc-arm-embedded which covers Cortex-M and Cortex-R cores, but importantly doesn't mention ARM11 and Cortex-A cores used on the Raspberry Pi and BeagleBoard Black.
I suppose the latter aren't considered "embedded" in the sense that, hell, they run Linux, and so aren't covered by ARM's compiler support effort but by the community?
In the shorter-lived sense, "embedded" referred to low-power, limited functionality processors such as the ARM7/ARM9 CPUs in TFA. These setups often didn't have MMUs, would typically run a very bare-bones RTOS with soft- or hard- realtime support. Remember no MMU means no process isolation. If a task has a stack overrun, it just keeps going into an adjacent task's stack. If a pointer gets corrupted and the software starts writing who-knows-where in RAM, pray it dies early, hard, and reproducibly. The code size, ability to use third-party libraries, etc. were all greatly limited. Very much more the aesthetic of engineering a one-off custom mechanism, albeit in software vs. in the machine shop.
These days, the envelope of "embedded" CPUs has embraced vastly more powerful hardware, while still remaining low power. They have MMUs, they run real Linux (vs. ucLinux or a traditional RTOS) and are much easier to develop for. Think Arduino, Rasberry Pi, and on and on. This has been a huge access revolution for hackers, makers, and anyone who wants to just get down and prototype some ideas.
Embedded systems typically run on a microcontroller. It almost literally means something that reads an input from the physical world (EXTI, logic level or adc) and uses it to control something. Microprocessors typically implement a bus system and additional units like an MMU. We used to have uC with basic busses, but that was for different reasons (EPROM, LCD, ...)
These days the word embedded seems to mean "fits in a small box".
http://www.state-machine.com/arm/Building_bare-metal_ARM_wit...
It seems to have the full series.