Difference between revisions of "Build Environment Ubuntu 9.04"
m |
Akohlsmith (Talk | contribs) (Add 9.10 blessing and SIGPIPE fix) |
||
Line 1: | Line 1: | ||
This is based on the set-up for Ubuntu 8.10 with file modifications as described [http://www.nabble.com/Ubuntu-8.10-and-Open-Embeded-td21136352.html on this thread]. gumstix-oe version is 318. | This is based on the set-up for Ubuntu 8.10 with file modifications as described [http://www.nabble.com/Ubuntu-8.10-and-Open-Embeded-td21136352.html on this thread]. gumstix-oe version is 318. | ||
+ | |||
+ | This HOWTO has also been tested and found to work with Ubuntu 9.10. | ||
== Setup Build Environment == | == Setup Build Environment == | ||
Line 28: | Line 30: | ||
sudo chmod 0775 /usr/share/sources | sudo chmod 0775 /usr/share/sources | ||
sudo chmod ug+s /usr/share/sources | sudo chmod ug+s /usr/share/sources | ||
+ | |||
+ | 3.5) Modify classes/base.bbclass to correct a common SIGPIPE error (fix is in OE trunk, but not yet in gumstix-oe). basically we are adding a small function called subprocess_setup() which removes the SIGPIPE handler and then modifying oe_unpack_file() to call the function instead of system(): | ||
+ | |||
+ | <nowiki>--- a/classes/base.bbclass | ||
+ | +++ b/classes/base.bbclass | ||
+ | @@ -728,9 +728,14 @@ | ||
+ | : | ||
+ | } | ||
+ | |||
+ | +def subprocess_setup(): | ||
+ | + import signal, subprocess | ||
+ | + # Python installs a SIGPIPE handler by default. This is usually not what | ||
+ | + # non-Python subprocesses expect. | ||
+ | + signal.signal(signal.SIGPIPE, signal.SIG_DFL) | ||
+ | |||
+ | def oe_unpack_file(file, data, url = None): | ||
+ | - import bb, os | ||
+ | + import bb, os, signal, subprocess | ||
+ | if not url: | ||
+ | url = "file://%s" % file | ||
+ | dots = file.split(".") | ||
+ | @@ -799,7 +804,7 @@ | ||
+ | |||
+ | cmd = "PATH=\"%s\" %s" % (bb.data.getVar('PATH', data, 1), cmd) | ||
+ | bb.note("Unpacking %s to %s/" % (base_path_out(file, data), base_path_out(os.getcwd(), data))) | ||
+ | - ret = os.system(cmd) | ||
+ | + ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True) | ||
+ | |||
+ | os.chdir(save_cwd) | ||
+ | </nowiki> | ||
+ | |||
+ | (source kergoth on #oe on irc.freenode.net. [http://gitorious.org/gumstix-oe/mainline/commit/f73c64e7295be1e1065f898b49f50a02e812161c original commit]) | ||
4) Downgrade to gcc-4.1 and g++-4.1 and change the links: | 4) Downgrade to gcc-4.1 and g++-4.1 and change the links: |
Revision as of 20:48, 5 November 2009
This is based on the set-up for Ubuntu 8.10 with file modifications as described on this thread. gumstix-oe version is 318.
This HOWTO has also been tested and found to work with Ubuntu 9.10.
Setup Build Environment
1) Get Ubuntu linux 9.04, and install it on your computer; you can install a vmware version of Ubuntu too, but it will be slow during the building process.
Reconfigure sh to point to bash, not dash:
sudo dpkg-reconfigure dash
Answer no when asked whether you want to install dash as /bin/sh.
2) Install (build-essential, help2man, diffstat, texi2html, texinfo, libncurses5-dev, cvs, gawk, python-dev, python-pysqlite2, python-psyco, ckermit, lrzsz, subversion) by using apt-get. i.e:
sudo apt-get update sudo apt-get install build-essential help2man diffstat texi2html texinfo libncurses5-dev cvs gawk sudo apt-get install python-dev python-pysqlite2 python-psyco ckermit lrzsz subversion
See Bitbake On Ubuntu for directions on how to setup Bitbake.
3) Download the source from svn, caching the source code
mkdir ~/gumstix cd ~/gumstix svn co https://gumstix.svn.sourceforge.net/svnroot/gumstix/trunk gumstix-oe cat gumstix-oe/extras/profile >> ~/.bashrc sudo groupadd oe sudo usermod -a -G oe YOUR_CURRENT_USERNAME sudo mkdir /usr/share/sources sudo chgrp oe /usr/share/sources sudo chmod 0775 /usr/share/sources sudo chmod ug+s /usr/share/sources
3.5) Modify classes/base.bbclass to correct a common SIGPIPE error (fix is in OE trunk, but not yet in gumstix-oe). basically we are adding a small function called subprocess_setup() which removes the SIGPIPE handler and then modifying oe_unpack_file() to call the function instead of system():
--- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -728,9 +728,14 @@ : } +def subprocess_setup(): + import signal, subprocess + # Python installs a SIGPIPE handler by default. This is usually not what + # non-Python subprocesses expect. + signal.signal(signal.SIGPIPE, signal.SIG_DFL) def oe_unpack_file(file, data, url = None): - import bb, os + import bb, os, signal, subprocess if not url: url = "file://%s" % file dots = file.split(".") @@ -799,7 +804,7 @@ cmd = "PATH=\"%s\" %s" % (bb.data.getVar('PATH', data, 1), cmd) bb.note("Unpacking %s to %s/" % (base_path_out(file, data), base_path_out(os.getcwd(), data))) - ret = os.system(cmd) + ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True) os.chdir(save_cwd)
(source kergoth on #oe on irc.freenode.net. original commit)
4) Downgrade to gcc-4.1 and g++-4.1 and change the links:
sudo aptitude install gcc-4.1 g++-4.1 sudo ln -sf /usr/bin/gcc-4.1 /usr/bin/gcc sudo ln -sf /usr/bin/g++-4.1 /usr/bin/g++
Check the links are correct using:
ls -l /usr/bin/gcc ls -l /usr/bin/g++
5) Log out and log in again.
6) Build the basic image, it will fail with an error in dbus:
bitbake gumstix-basic-image
Edit gumstix/gumstix-oe/tmp/work/i686-linux/dbus-native-1.0.1-r0/dbus-1.0.1/dbus/dbus-sysdeps-unix.c
Add this struct,
struct ucred {
unsigned int pid;
unsigned int uid;
unsigned int gid;
};
after the macros.
7) Build the basic image, it will fail with an error in sumversion:
bitbake gumstix-basic-image
Edit gumstix/gumstix-oe/tmp/work/gumstix-custom-verdex-angstrom-linux-gnueabi/gumstix-kernel-2.6.21-r1/linux-2.6.21/scripts/mod/sumversion.c
Add this line,
#include <limits.h>
after all of the other includes.
8) Build the basic image again. If it fails with an error in gconf-dbus, do the following:
a. download file http://download.gnome.org/sources/GConf-dbus/2.16/GConf-dbus-2.16.0.tar.gz
b. move and rename this file to:
/usr/share/sources/trunk_developer.imendio.com_.svn.gconf-dbus_606_.tar.gz
9) Build the basic image again, this time it should work:
bitbake gumstix-basic-image
10) If everything builds ok, it could be a good idea to modify the dbus-sysdeps-unix.c and sumversion.c files in their respective packages in /usr/share/sources as otherwise everytime you do a rebuild they will be wiped. Note that dbus-sysdeps-unix.c is found in package dbus-1.0.1.tar.gz, and sumversion.c is found in package linux-2.6.21.tar.bz2.