From what I have read so far the recommended toolchain to use is
CodeSourcery. However, it seems that all the tutorials are using
Angstrom and another toolchain such as OpenEmbed.
Typically the term "toolchain" refers to the cross compiler toolchain.
This is the collection of utilities required to compile software on one
system (the host) so that the generated binaries can be run on another
system (the target, re: BeagleBoard).
Angstrom and OpenEmbedded are build environments. They are designed to
allow developers to create custom distributions based on Linux and GNU
software (plus 3rd party utilities in many cases) that are specific to a
target system. A "target system" would be more like an Android-based
handheld device or a Qt-and-OpenGL based set top box. Angstrom and
OpenEmbedded are designed to allow very fine tuning of your
distribution, but you have to understand a bit about what your target
system really needs to make the best use of them.
Angstrom and OpenEmbedded are not used to build Ubuntu (well, at least
not that I know of). Ubuntu is a general purpose distribution. It can
be used for hardware platforms such as BeagleBoard but it requires a
different approach to creating the target system, much of which may
depend on post-installation configuration (whereas Angstrom and
OpenEmbedded are often best used in pre-compilation configuration).
So I am looking for a tutorial that will give me a crash course on
compiling using CodeSourcery. I would like to start with source files
that are ready to run on the BeagleBoard and then add and subtract
drivers and programs that I need.
You probably aren't going to compile on the BeagleBoard using
CodeSourcery. You compile on your Linux desktop. The typical scenario
is to compile on your desktop, copy to the SD card and boot.
Adding and subtracting drivers typically involves modifying the Linux
kernel configuration file, something you usually do using the Linux
kernel configuration system (make menuconfig within the Linux kernel
source tree). When using Angstrom or OpenEmbedded a typical work flow
would be to create your Linux kernel configuration using the Linux
kernel source code (outside of Angstrom or OpenEmbedded), then integrate
that configuration into a "recipe" for use with Angstrom or
OpenEmbedded. This integration very often relies on the addition of
custom patches for very specific hardware. There are many examples of
this in the linux tree of Angstrom.
Programs are another matter. Since you're using Ubuntu you would add and
subtract programs from the *running* system using Ubuntu's package
management system that points to an ARM-based application repository.
Alternatively, you can cross compile applications and then copy them to
the root file system manually, either before you package it for
placement on the SD card or after its on the SD card by booting the
system and copying the files using a network connection.
I have developed my own Hardware
which I am waiting to receive any day now. There are lots of features
that the beagleboard has that I have removed such as the DVI and
Ethernet and there are a few others that I have added.
So eventually I
want to be able to do everything I would need to do to customize the
OS to work with my hardware. Right now I'm am just trying to take baby
steps and work with known good source code and with the BeagleBoard
Rev C4 hardware.
You're approach is common and many users start with an Ubuntu,
Angstrom-built or similar distribution. However, without hard disks and
network connections and with the need to strip the distribution down
considerably you often find you spend less time focusing on the product
requirements. Angstrom has a web-based customization utility
(Narcissus) that permits users to create their own custom distribution
by selecting packages, letting Narcissus perform the build, and then
downloading the resulting image file for placement on the SD card.
Personally, I prefer to approach from the other direction: using
Buildroot to generate a minimal environment and then start adding
pieces. If for no other reason it gives me a better feeling that only
what I asked for is on there, though Narcissus also helps in this area.
Which approach you take is probably a religious argument more than a
technical one. Either will work. You just have to become familiar with
the steps involved with each.
Any guidance is greatly appreciated.
Not sure if that helps. Hope it does.