bc10/Software
Summary †
The whole section is revised for explaining the installation process of Open Embedded Linux on bc10, including
X-Loader and U-Boot. The previous version was discussed only the configuration of OpenEmbedded, a Linux
framework for embedded systems. However, in new version, the installation process of the Angstrom Distribution
is described. (The Angstrom Distribution is treated as one of Linux distributions for embedded system since it
requires sufficient amount of knowledges of OpenEmbedded as well as embedded Linux and call it “OpenEmbedded Linux.")
(Caution)From November 2010, the built system, which is argued here, has been greatly modified. On stable/2009 branch,
the build process is unlikely completed. On Master branch, the build process can be finished, the directories of userland
and version of software can be different from the ones described here
For the details, please visit Building Angstrom.
How to create the Build Environment of OpenEmbedded for bc10 †
To follow the explanation listed at Building Angstrom on the Angstrom Distribution, configure the build environment
in Ubuntu 10.04.
Ubuntu 10.04 development environment †
- Configuration and addition of packages
As the default, dash is the shell script for Ubuntu. However, this causes unexpected errors when BitBake is executed since
bash is used in some parts of BitBake.
To use the command shown below, change the shell script of Ubuntu form dash to bash.
$ sudo dpkg-reconfigure dash
As execute the command, it will ask whether dash is installed into /bin/sh or not. and, select No as the answer. Then, bash
is chosen for shell script.
To follow the direction published at the Debian section of OEandYourDistro, install deb packages. The packages are mandatory
and necessary for build.
$ sudo apt-get install ssh
$ sudo apt-get install sed wget cvs subversion git-core \
coreutils unzip texi2html texinfo libsdl1.2-dev docbook-utils \
gawk python-pysqlite2 diffstat help2man make gcc build-essential g++ \
desktop-file-utils chrpath
$ sudo apt-get install libxml2-utils xmlto python-psyco docbook
As BitBake base-image is executed in Ubuntu 10.04, DATA-CAC Error occurs at expat-2.0.1.tar.gz. This error is due to
gzip 1.3.12. This gzip 1.3.12 is obsolete and needed to be updated. gzip 1.3.12 is replaced with gzip1.4.
Check up the version of gzip
$ gzip --version
gzip 1.3.12
As it is shown above, the version of gzip is 1.3.12, so it is going to be updated to 1.4. Obtain gzip1.4 from gnu.org,
and build and install it.
$ wget ftp://ftp.gnu.org/gnu/gzip/gzip-1.4.tar.gz
$ tar xvfz gzip-1.4.tar.gz
$ cd gzip-1.4
$ ./configure
$ make
$ sudo make install
After complete the installation, re-examine the version of gzip.
$ gzip --version
gzip 1.4
Build BitBake environment †
This explains how to set up the BitBake environment. This mostly follows the instructions published at Building Angstrom,
yet the instructions are slightly altered for bc10.
BitBake acts like make command as a tool, and it specifically manages kernel and packages for embedded Linux distributions.
Its package management system is called recipe. A recipe informs BitBake all steps of the installation of packages, and a recipe
maintains a meta data for the information, which is needed to install the packages. For the details, please look at "BitBake User Manual".
For building Angstrom (OpenEmbedded Linux), angstrom-setup -script is used for saving configuration scripts and the files,
which are created after executing scripts, and building.
Obtain angstrom-setup-script by git.
$ cd ~
$ git clone git://gitorious.org/angstrom/angstrom-setup-scripts.git
$ cd angstrom-setup-scripts
To run oebb.sh enter the name of the targeted machine. It will beagleboard to be exact.
$ ./oebb.sh config beagleboard
After executing, receive the message shown below.
There now is a sourceable script in ~/.oe/enviroment. You can do '.
~/.oe/environment' and run 'bitbake something' without using ./oebb.sh
as wrapper
Setup for beagleboard completed
Execute oebb.sh update, and download OE and BitBake files.
$ ./oebb.sh update
At the end of the execution, the error massage appears, but this is not affect the update process and build process.
fatal: git checkout: branch org.openembedded.dev already exists
(Caution) The build system of "stable/2009 branch" is greatly changed since November 2009, the build process is not likely completed on
stable/2009 branch. As applying Master branch, the build process is finished, but the directories of userland and version of software
are different from ones that originally argued here.
-stable/2009
To build the environment easily , the brach of OpenEmbedded is shifted from org.openembedded.dev to stable/2009.
Make sure that stable/2009 exists in angstrom-setup-scripts-/sources/openembedded/.
$ cd ~/angstrom-setup-scripts/sources/openembedded/
$ git branch -a
--
remotes/origin/shared/blackfin
remotes/origin/shared/xorg-7.4-update
remotes/origin/shr/import
remotes/origin/shr/merge
remotes/origin/shr/stable2009
remotes/origin/shr/testing2009
remotes/origin/shr/testing2010
remotes/origin/shr/unstable
--
$ git checkout origin/stable/2009 -b stable/2009
$ git pull
Execute git pull, and receive a message, which informs that update is not necessary.
Already up-to-date.
In local.conf, angstrom-2008.1 and beagleboard are listed at the sections of DISTRO and MACHINE, respectively.
$ cd ~/angstrom-setup-scripts/build/conf
$ vi local.conf
BB_NUMBER_THREADS = "2"
DISTRO = "angstrom-2008.1"
MACHINE ?= "beagleboard"
# Set TMPDIR instead of defaulting it to /tmp
TMPDIR = "/home/beat/angstrom-setup-scripts/build/tmp-angstrom_2008_1"
# Don't generate the mirror tarball for SCM repos, the snaps
hot is enough
BB_GENERATE_MIRROR_TARBALLS = "0"
- Setup the environment variable for BitBake
Read the file for the environment variable, ~/.oe/environment/, and complete the configuration of every PATH for
beagleboard.
$ . ~/.oe/environment
While BitBake is executed, a build error occurs at build of qemu-arm. Preventing this error, the value of vm/mmap_min_addr
is set to 0. Although wiki notes that value of 128 is acceptable, the error will be persist, and the error message shown below
appears as BitBake is executed.
$ MACHINE=beagleboard bitbake base-image
FATAL: Openembedded'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:
/proc/sys/vm/mmap_min_addr is not 0. This will cause problems with qemu so please fix the value (as root).
To fix this in later reboots, set vm.mmap_min_addr = 0 in /etc/sysctl.conf.
There are two ways to configure the value of mmap_min_addr is equal to 0. [SOLVED - update 2010] of wiki shows two different
methods ( a), b) ) to change the value of mmap_min_addr to 0. (In wiki, the value is set to be 128, but the error message will
appear as BitBake is executed.)
$ sudo -s
a)
# echo 0 > /proc/sys/vm/mmap_min_addr
# cat /proc/sys/vm/mmap_min_addr
0
b)
# sysctl -w vm.mmap_min_addr=0
Create Angstrom image (1) †
Execute BitBake †
- about bitbake base-image and bitbake console-image
base-image handles the same tasks as its predecessor, nano, and it installs kernel, busybox, and ipkg. Console-image is add
extra features to its previous version, task-base. The newly added features are packages for several peripherals, Bluetooth,
and WiFi.
The configuration of mmap_min_addr is completed, execute bitbake base-image.
$ MACHINE=beagleboard bitbake base-image
--
NOTE: Running task 2909 of 2910 (ID: 18, /home/beat/angstrom-setup-scripts/sources/openembedded/recipes/images/base-image.bb, do_rm_work)
NOTE: package base-image-1.0-r0: task do_rm_work: Started
NOTE: package base-image-1.0-r0: task do_rm_work: Succeeded
NOTE: Running task 2910 of 2910 (ID: 0, /home/beat/angstrom-setup-scripts
/sources/openembedded/recipes/images/base-image.bb, do_rm_work_all)
NOTE: package base-image-1.0-r0: task do_rm_work_all: Started
NOTE: package base-image-1.0-r0: task do_rm_work_all: Succeeded
NOTE: Tasks Summary: Attempted 2910 tasks of which 2822 didn't need to be rerun and 0 failed.
As messages displayed above appear, bitbake base-image is completed.
- Caution: In the middle of executing BitBake, the message described below occasionally shows up.
NOTE: Running task 2823 of 2910 (ID: 128, /home/beat/angstrom-setup-scripts
/sources/openembedded/recipes/mtd/mtd-utils-native_1.0.0+git.bb, do_setscene)
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
ERROR: TaskFailed event exception, aborting
ERROR: Build of /home/beat/angstrom-setup-scripts/sources/openembedded/recipes
/u-boot/u-boot_git.bb do_fetch failed
ERROR: Task 147 (/home/beat/angstrom-setup-scripts/sources/openembedded/recipes
/u-boot/u-boot_git.bb, do_fetch) failed with 256
NOTE: Task failed: Unknown fetch Error: [Errno 2] No such file or directory:
'/home/beat/angstrom-setup-scripts/sources/downloads/git_gitorious.org.u-
boot-omap3.mainline.git_d363f9cb0918a1b6b92e2e20d01543d0c4f53274.tar.gz'
NOTE: package u-boot2009.05+r30+gitrd363f9cb0918a1b6b92e2e20d01543d0c4f53274-r30:
task do_fetch: Failed
ERROR: TaskFailed event exception, aborting
NOTE: package mtd-utils-native-1.0.0+git-r8: task do_compile: Succeeded
ERROR: Build of /home/beat/angstrom-setup-scripts/sources/openembedded/recipes
/u-boot/u-boot_git.bb do_fetch failed
ERROR: Task 147 (/home/beat/angstrom-setup-scripts/sources/openembedded/recipes
/u-boot/u-boot_git.bb, do_fetch) failed with 256
BitBake fails to obtain files as during the creating process. The failure is treated as an error, and the process is ended.
To execute bitbake base-image again, it will start from obtaining the files.
After the build of bitbake base-image is completed, run bitbake console-image.
$ MACHINE=beagleboard bitbake cosole-image
NOTE: package console-image-1.0-r0: task do_rm_work: Started
NOTE: package console-image-1.0-r0: task do_rm_work: Succeeded
NOTE: Running task 2892 of 2892 (ID: 0, /home/beat/angstrom-setup-scripts
/sources/openembedded/recipes/images/console-image.bb, do_rm_work_all)
NOTE: package console-image-1.0-r0: task do_rm_work_all: Started
NOTE: package console-image-1.0-r0: task do_rm_work_all: Succeeded
NOTE: Tasks Summary: Attempted 2892 tasks of which 2854 didn't need to be rerun and 0 failed.
As these outputs, shown above appear, the build process of bitbake console-image is completed.
Created image files are stared under the directory, angstrom-setup-scripts/build/tmp-angstrom_2008_1/deploy/glibc/images/beagleboard .
beat@bc10-oedev:~/angstrom-setup-scripts/build/tmp-angstrom_2008_1/deploy/glibc
/images/beagleboard$ ls
Angstrom-base-image-glibc-ipk-2009.X-stable-beagleboard-testlab
Angstrom-base-image-glibc-ipk-2009.X-stable-beagleboard.rootfs.tar.bz2
Angstrom-console-image-glibc-ipk-2009.X-stable-beagleboard-testlab
Angstrom-console-image-glibc-ipk-2009.X-stable-beagleboard.rootfs.tar.bz2
base-image-beagleboard.tar.bz2
base-image-beagleboard.ubi
console-image-beagleboard.tar.bz2
console-image-beagleboard.ubi
modules-2.6.29-r46-beagleboard.tgz
u-boot-beagleboard-2009.05+r30+gitrd363f9cb0918a1b6b92e2e20d01543d0c4f53274-r30.bin
u-boot-beagleboard.bin
uImage-2.6.29-r46-beagleboard.bin
uImage-beagleboard.bin
ubinize.cfg
Configure environment variable †
The toolchain, which has been employed creating BitBake, is used for building X-Loader, U-Boot, and bc10-rowboat-kernel.
The toolchain which has been used for building angstrom stable/2009 is placed the locations shown below.
beat@bc10-oedev:~/angstrom-setup-scripts/build/tmp-angstrom_2008_1/cross/armv7a/bin$ ls
arm-angstrom-linux-gnueabi-addr2line arm-angstrom-linux-gnueabi-gccbug arm-angstrom-linux-gnueabi-modprobe
arm-angstrom-linux-gnueabi-ar arm-angstrom-linux-gnueabi-gcov arm-angstrom-linux-gnueabi-nm
arm-angstrom-linux-gnueabi-as arm-angstrom-linux-gnueabi-generate-modprobe.conf arm-angstrom-linux-gnueabi-objcopy
arm-angstrom-linux-gnueabi-c++ arm-angstrom-linux-gnueabi-gfortran arm-angstrom-linux-gnueabi-objdump
arm-angstrom-linux-gnueabi-c++filt arm-angstrom-linux-gnueabi-gprof arm-angstrom-linux-gnueabi-ranlib
arm-angstrom-linux-gnueabi-cpp arm-angstrom-linux-gnueabi-insmod arm-angstrom-linux-gnueabi-readelf
arm-angstrom-linux-gnueabi-depmod-2.6 arm-angstrom-linux-gnueabi-insmod.static arm-angstrom-linux-gnueabi-rmmod
arm-angstrom-linux-gnueabi-g++ arm-angstrom-linux-gnueabi-ld arm-angstrom-linux-gnueabi-size
arm-angstrom-linux-gnueabi-gcc arm-angstrom-linux-gnueabi-lsmod arm-angstrom-linux-gnueabi-strings
arm-angstrom-linux-gnueabi-gcc-4.3.1 arm-angstrom-linux-gnueabi-modinfo arm-angstrom-linux-gnueabi-strip
Configure the environment variable as it is described below.
$ export PATH=${HOME}/angstrom-setup-scripts/build/tmp-angstrom_2008_1/cross/armv7a/bin:${PATH}
$ export ARCH=arm
$ export CROSS_COMPILE=arm-angstrom-linux-gnueabi-
Build X-Loader †
Obatin X-Loader, which is specific to bc10, and execute the build.
$ cd ~/
$ git clone git://gitorious.org/~bc-dev/x-load-omap3/x-load-bc10.git x-load-bc10
$ cd x-load-bc10
$ git checkout -t -b bc10 origin/bc10
$ make omap3530bc10_config
$ make
After its build is completed, x-load.bin is created.
The format of x-load.bin does not fit into the configurations of OMAP BootROM. As x-load.bin is read into NAND Flash or SD
card without any modification, it does not work as a bootloader. Fixing this issue, x-load.bin is needed to be altered by
signGP. The executable file of signGP is downloaded form here.
signGP can be applied as it is defined below.
$ ./signGP x-load.bin
x-load.bin.ift is created after applying signGP.
Due to the specification of BootROM, x-load.bin.ift is saved as MLO when it is copied and saved in the root directory of
the SD card.
Place created image files in SD card (1) †
Some created files, which are required for booting bc10, are copied to a SD card. Read“Create bootable SD Card” section of bc10/booting,
create FAT32 and Linux partitions in the SD card.
(Hereafter FAT32 partition and Linux partition are named and called LAVBEL1 and LABEL2, respectively.)
As the intended OS, which is booted from U-Boot, is a Linux, this is how files should be placed and organized inside the SD card.
- FAT32 partition
- X-Loader
- U-Boot
- Linux kernel
- boot.scr
- Linux partition
FAT32 partition †
As X-Loader, the first bootloader, is placed on SD card, there are several restrictions on the method of placing it. Please follow the
instructions written below.
- After formatting FAT32 partition, x-loader is the first to be placed.
- It will be put on the top directory of FAT32 partition.
- Change the name from x-loader to MLO.
$ cd ~/bc10/x-load-bc10
$ cp x-load.bin.ift /media/LABEL1/MLO
This X-Loader is specifically designed for bc10, and it will not be modified in the farther sections.
Below the directory, angstrom-setup-scripts/build/temp-angstrom_2008_1/deploy/glibc/images/beagleboard, u-boot-beagleboard.bin
is created. u-boot-beagleboard.bin is changed as u-boot.bin''', and it is copied to FAT32 partition.
$ cd ~/angstrom-setup-scripts/build/tmp-angstrom_2008_1/deploy/glibc/images/beagleboard
$ cp u-boot-beagleboard.bin /media/LABEL1/u-boot.bin
Under the same directory, in which u-boot-beagleboard.bin is found, there is uImage-beagleboard.bin , and its name is
changed to uImage and copied to FAT32 partition.
$ cp uImage-beagleboard.bin /media/LABEL1/uImage
Create boot.scr, in the same way as it has been created in bc10/rowboat-eclair-dsp. This file creates the same contents as setenv
configures in the serial console of the u-boot's command prompt. This setting significantly reduces the time since it does not
require the configuration as each time X-Loader is booted. This is also configured for not changing memory mapping. To follow
the instructions, create boot.script.
$ cd ~
$ vi boot.script
if fatload mmc 0 84000000 uImage
then
echo ***** Kernel: /dev/mmcblk0p1/uImage.bin *****
fi
echo ***** RootFS: /dev/mmcblk0p2 *****
setenv bootargs 'mem=88M@0x80000000 mem=128M@0x88000000 androidboot.console=ttyS2 console=tty0 console=ttyS2,115200n8 root=/dev/mmcblk0p2 init=/init rootwait omapfb.video_mode=680x480MR-24@60'
bootm 84000000
This file is treated as a parameter, execute mkimage as it is shown below.
$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n ./boot.script -d ./boot.script ./boot.scr &> /dev/null
The created boot.scr and is copied into FAT32 of the SD card.
$ sudo cp boot.scr /media/LABEL1/
Linux partition †
These three files are copied into Linux partition.
- Angstrom-base-image-glibc-ipk-20009.X-stable-beagleboard.rootfs.tar.bz2
- Angstrom-console-image-glibc-ipk-2009.X-stable-beagleboard.rootfs.tar.bz2
- modules-2.6.29-r46-beagleboard.tgz
$ cd ~/angstrom-setup-scripts/build/tmp-angstrom_2008_1/deploy/glibc/images/beagleboard
$ sudo tar xvfj Angstrom-base-image-glibc-ipk-2009.X-stable-beagleboard.rootfs.tar.bz2 -C /media/LABEL2/
$ sudo tar xvfj Angstrom-console-image-glibc-ipk-2009.X-stable-beagleboard.rootfs.tar.bz2 -C /media/LABEL2/
$ sudo tar xvfz modules-2.6.29-r46-beagleboard.tgz -C /media/LABEL2/
This is the end of placing userland of Linux. This ends the first part of installing the image files to the SD card. Then, make sure that
Angstrom starts booting after the SD card is placed and power is turned on.
This is the boot log of this section. Please use it for reference.
Create Angstrom image (2) †
As the previous section has been successfully completed, build u-boot customized for bc10 and bc10-rowboat-kernel. As kernel is
replaced, u-boot is also changed.
u-boot build †
Download the source of bc10 specific u-boot, and build it.
$ cd ~/
$ git clone git://gitorious.org/bc10/u-boot-bc10.git u-boot-bc10
$ cd u-boot-bc10
$ git checkout -t -b build origin/build
$ make mrproper
$ make omap3_bc10_config
$ make
After the build is completed, u-boot.bin is created.
bc10-rowboat-kernel build †
$ git clone git://gitorious.org/~bc-dev/rowboat/bc10-rowboat-kernel.git bc10-rowboat-kernel
$ cd bc10-rowboat-kernel
$ git checkout -t -b bc10-2.6.32-build origin/bc10-2.6.32-build
$ make omap3_bc10_defconfig
$ make uImage
$ make modules
After ending the build process, uImage is created.
$ ls ~/bc10-rowboat-kernel/arch/arm/boot/
Image Makefile bootp compressed install.sh uImage zImage
modules build †
$ cd ~/bc10-rowboat-kernel/
$ mkdir mod_work
$ make ARCH=arm DEPMOD=echo INSTALL_MOD_PATH=mod_work modules_install
At the end of execution, DEPMOD is displayed. (Caution)
DEPMOD 2.6.32-bc10-gdfb6acc
$ arm-angstrom-linux-gnueabi-depmod-2.6 -A -b /home/beat/bc10-rowboat-kernel/mod_work -F ./System.map 2.6.32-bc10-gdfb6acc
$ tar cvfz modules-2.6.32-bc10-gdb6acc.gz -C mod_work lib
$ ln -s modules-2.6.32-bc10-gdb6acc.gz modules-2.6.32-bc10-gdb6acc.tgz
(Caution): Askernel config enables "Automatically append version information to the version string", the
last six digits of version information may be automatically changed. For instance, in 2.6.32-bc10-gxxxxxx,
the value of xxxxxx may be frequently changed.
$ git rev-parse -- verify HEAD
dfb6acc.....
Or, use a command to check the version.
$ make kernel release
2.6.32-bc10-gdfbacc
Place created image files in SD card (2) †
The SD card is re-mounted on the build machine.
(Assume that the location of mount is the same as the previous time.)
FAT32 partition †
Erase the previous u-boot.bin.
$ rm /media/LABEL1/u-boot.bin
$ cd ~/u-boot-bc10/
$ cp u-boot.bin /media/LABEL1/u-boot.bin
Also remove the old Linux kernel.
$ rm /media/LABEL1/uImage
$ cd ~/bc10-rowboat-kernel/arch/arm/boot/
$ cp uImage /media/LABEL1/uImage
Linux partition †
module is copied to Linux partition, freshly.
$ cd ~/bc10-rowboat-kernel/
$ sudo tar xvfz modules-2.6.32-bc10-gdb6acc.tgz -C /media/LABEL2/
This is the end of installation.
This is the boot log. Please use it for comparison.
Reference †
- Ubuntu 10.04 development environment
- bitbake environment build
Revision History †
2010/07/23 The article is initially listed. It discuss up to how to create OpenEmbedded build environment.
2010/10/07 The article is rewritten. The new article explains the whole process of installation of OpenEmbedded Linux.
2010/10/13 Add information of how to find the value of version.
2010/12/01 Fix a typo. At the fourth set of code from the top, change from dockbook to docbook, removing k.
2011/03/03 Add the information of change in the build system.