Author Topic: Embedded Systems & Development [LEARNING]  (Read 5244 times)

AgentJJ

  • New to the forum
  • *
  • Posts: 38
  • Yup
Embedded Systems & Development [LEARNING]
« on: July 10, 2013, 03:18:12 AM »
Great Resources on learning embedded development & systems.

Takes you through the entire process of a generic OS on an embedded system.  Great for understanding development tools (compiler/assembler/linker/make) and diagrams of how embedded systems deal with memory and such.
http://www.transitmagazine.com/toc.html

Bare Metal Development on ARM.  Gets an OS up and running on ARM in less than 2 hours:
http://www.gnudd.com/wd/thos.pdf

Great overview of some simple basics of a GNU toolchain and ARM:
http://www.bravegnu.org/gnu-eprog/index.html

Linkers and Loaders.  Linkers were a HUGE aha moment for me.  On par with learning the call stack.  Deals more with x86 in this article, but fundamentals still apply.
http://www.linuxjournal.com/article/6463

Bootloader basics on ARM.  Covers how a typical bootloader might work on a particular system:
http://markdingst.blogspot.com/2012/06/make-own-bootloader-for-arm-cortex-m3.html

If you're starting out, here's a possible order of things to learn:
-Computer layout basics (CPU, Memory, Controllers, and I/O)
-Learn how to use a terminal. (I personally find using linux(ubuntu) much easier for learning this stuff)
-C programming.  Get a GOOD grip on pointers, data types and structures: http://www2.its.strath.ac.uk/courses/c/
-Assembly programming on ARM (grit your teeth and bare it.  Minimum is to be able to somewhat read and makeout what is going on): http://www.coranac.com/tonc/text/asm.htm
-GNU Toolchain.  Know the toolchain.  Love the toolchain.  Understand how a Makefile lays out a build of a program.  Understand the flow from C/Assembly through a compiler/assembler to object files (see below).  Get a good understanding of how object files are put together with the linker to form relocatable object files and executable object files. http://www.transitmagazine.com/lib0011.html
-Dig into the Magic Lantern repository.  Learn mercurial and how to pull the "repo".  Start to read the code starting from reboot.c.  Go line by line, making sure you understand each line (excruciatingly tedious at first if you're just beginning, but trust me.  It'll get much faster sooner than you think!)