EBC Exercise 08 Installing Development Tools 3.8
Early in the class most of the exercises we will do will all run on the BeagleBoard. You'll be able to edit (gedit), compile (gcc) and run all on the Beagle. Later, when we start compiling the kernel [1] or the boot loader, (U-boot) you will need to cross compile on a Linux machine and copy the results to the Beagle.
The purpose of this exercise is to install all the tools needed for compiling on your host so they will be ready when you need them.
Instructions for building Ångström are given here; however there are a few changes you have to make. Here's what I did.
Contents
Install development environment
The step is to get the crosscompilers, etc. installed. Generally you do this install on your local copy of Linux. Some of these installs can take a long time (one took me 12 hours, slow download times), so you may want to install on a remote server that's always connected to the internet. If so, see the tips [[ | below]]
Get the setup scripts
First install git
by running the following on your host computer.
$ sudo apt-get install git-core
(Here is a nice git tutorial. Take a look at it if you want to understand the commands that follow. We'll explore it in more depth in a later exercise.)
Then run the following to load the meta data.
I have everything in a ~/BeagleBoard
, so here is how I setup things:
$ cd $ mkdir -p BeagleBoard $ cd BeagleBoard $ git clone git://git.angstrom-distribution.org/setup-scripts oe $ cd oe
(The git took 4.5 seconds.)
This creates a directory for open embedded (oe
) and gets the script to download Ångström. What files do you see?
Setting up for the BeagleBoard
Now let's setup local.conf
for our needs:
$ gedit conf/local.conf
Add the following to the end of the file.
MACHINE ?= "beagleboard"
Look at this block of lines:
# Make use of SMP and fast disks PARALLEL_MAKE = "-j2" BB_NUMBER_THREADS = "2"
Here you can tell it how many parallel threads to run. If you have several cores on your machine, make this number big. If you have only one core, you might be better performance setting it to 1. If you have no clue which value to pick, Gentoo users suggest 1 more than the number of cores in your computer. More details are here.
- PARALLEL_MAKE sets the number "gcc" threads (same as make -j4 at compile time
- BB_NUMBER_THREADS sets the number of bitbake threads, (one thread can be downloading, while another compiles)
To save you a lot of time, it is useful to disable locale generation for all but the one you need. Add this to local.conf
GLIBC_GENERATE_LOCALES = "en_US.UTF-8 en_GB.UTF-8 de_DE.UTF-8 fr_FR.UTF-8 pt_BR.UTF-8 es_ES.UTF-8 kn_IN.UTF-8 ml_IN.UTF-8 ta_IN.UTF-8"
Now run:
$ ./oebb.sh config beagleboard $ ./oebb.sh update
This will bring in all the tools you need. The config took about 3.5 minutes on my machine, update took about 1 minute.
Build a small program
Before the first time you run bitbake you need to do the following to set up the environmental variables:
$ source ~/.oe/environment-oecore
Take a look in the file and see what it is doing.
$ less ~/.oe/environment-oecore
To see if everything is ready, run the following
$ bitbake nano
nano is a small editor. We really don't need nano, but if it can be compiled we know we have everything in place. I get the following error when I run the bitbake:
Pseudo is not present but is required, building this first before the main build . . . ERROR: Poky's config sanity checker detected a potential misconfiguration. Either fix the cause of this error or at your own risk disable the checker (see sanity.conf). Following is the list of potential problems / advisories: Please install following missing utilities: C++ Compiler (g++),diffstat,texi2html,makeinfo,cvs,svn,chrpath ERROR: Execution of event handler 'check_sanity_eventhandler' failed
So, some programs are missing. Install them with:
$ sudo apt-get install g++ diffstat texi2html texinfo cvs subversion chrpath help2man diffstat texi2html cvs texinfo subversion gawk
This took just a few minutes.
Now run:
$ bitbake nano
This will take a while. Mine first said it has 77 tasks to do. Once those were done it had 1113 tasks.
Below is a table of the times from last year. Add your bitbake time to this year's table.
Processor | Settings | Run Time |
---|---|---|
8 Core virtual machine | PARALLEL_MAKE = "-j8" BB_NUMBER_THREADS = "8" |
2.5 hours |
Intel Core 2 Duo T7800, 2.60 GHz | PARALLEL_MAKE = "-j2" BB_NUMBER_THREADS = "2" |
1:55 |
Processor | Settings | Run Time |
---|---|---|
Dell E521 with AMD Athlon 64 dual-core | PARALLEL_MAKE = "-j4" BB_NUMBER_THREADS = "4" Psyco? Yes. |
1.5 hours |
Intel Core 2 Duo T7800, 2.60 GHz | PARALLEL_MAKE = "-j1" BB_NUMBER_THREADS = "1" Psyco? No. |
1:46 |
Intel Core 2 Duo T7800, 2.60 GHz | PARALLEL_MAKE = "-j4" BB_NUMBER_THREADS = "3" Psyco? Yes. Ubuntu 10.04 Running in VMWare Workstation 7.1.3 Under Windows 7 32-bit |
1:42 |
Once nano is done building you can find it with:
$ find . -name nano
Can you figure out which one is the nano that will run on your Beagle?
Download and Compile the Kernel
The next step is to download and compile the kernel.
We want to keep the kernel source code around so we can experiment with it. Do this:
$ gedit conf/local.conf
Find the line near the top that says INHERIT += " rm_work "
and comment it out. This will save the source code.
# INHERIT += " rm_work
Exit gedit and do the following:
$ source ~/.oe/environment-oecore $ cd ~/BeagleBoard/oe $ bitbake virtual/kernel
Mine says it has 1032 tasks to do. It took about XX hours to do them. Once done you should get a kernel that will work.
If you accidentally run bitbake without commenting out the above line, after it runs you can comment out the INHERIT line and then run
$ bitbake -c clean virtual/kernel $ bitbake -f -c compile virtual/kernel
This second run should take less time (one timing: first run took 3.5 hours; the recompiling took 25 minutes).
Download and Compile U-boot
While were' at it, let's get the boot loader we'll be using...
$ bitbake u-boot
I think this took a half hour or so.
Once installed you are ready for kernel work.
Installing on a Remove Machine
Installing the cross development tools and the kernel on a laptop is nice, but sometimes the downloads are too long for such a portable device. I've had a bitbake run some 12 hours. Another option is to use a remote machine. In my case our CSSE department has created a virtual machine with Ubuntu 10.4 installed on it.
To install on a remote machine are the same as above; However here's a couple of tips to make it easier.
First, ssh to the remote machine. Assume the machine is called csse and your login name is beagle.
local$ ssh -CX beagle@csse
You can leave the beagle@ off if you have the same login on both machine. The -C says to compress everything that's moved between the machines over the network. This is good for slow connections. The X says to pass the X11 display information to the remote machine. This way you can run graphical programs, such as gedit, on the remote machine and the graphics will display on your local machine (assuming you are running X11 on your local machine).
If you are sshing a lot check out the tip here about suspending ssh and the tip here about authorizing ssh so you don't have to enter your password every time.
Once logged on to the removed machine run
remote$ sudo apt-get install byobu
This installs byobu which is a program that lets you connect to the same shell from multiple machines. Once installed run
remote$ byobu
You'll see something like:
So what? Run a couple of commands, like ls or who, then hit F6. This will suspend your session. Now run byobu again. You'll be back in the same session. The session keeps running, even when you aren't connected.
Do you see the use?
- Fire up byobu
- Start a long bitbake
- Once you are sure it running OK, hit F6 and go home.
- From home fire up byobu and you'll see your bitbake (probably still running).
- You can F6 and check on it later.
Try opening another terminal and running byobu in both terminals. You'll see the same thing in both.
Run
$ man byobu
to see what it can do. Here's a list of shortcuts:
F2 - Create a new window F3 - Move to previous window F4 - Move to next window F5 - Reload profile F6 - Detach from this session F7 - Enter copy/scrollback mode F8 - Re-title a window F9 - Configuration Menu F12 - Lock this terminal Ctrl-a $ - show detailed status Ctrl-a R - Reload profile Ctrl-a ! - Toggle key bindings on and off Ctrl-a k - Kill the current window
But there is much more. Go and explore.