The author of this guide is new to Openembedded, bitBake and cross compiling in general so please feel free to edit, update or correct. The guide was tested on the Overo Gumstix with an iRobot Create and a Hokuyo Urg Laser.

The author of this guide is new to Openembedded, bitBake and cross compiling in general so please feel free to edit, update or correct. The guide was tested on the Overo Gumstix with an iRobot Create and a Hokuyo Urg Laser.

-

Special thanks to Ash Charles, Geoffrey Biggs and Rich Mattes who helped me getting this working.

Special thanks to Ash Charles, Geoffrey Biggs and Rich Mattes who helped me getting this working.

+

== Purpose ==

+

This guide is intended for Player users who want to have the latest version of Player on their OpenEmbedded systems. This guide has been tested on the [http://www.beagleboard.org BeagleBoard] using the Angstrom distribution (which is based on OpenEmbedded), and on the [http://www.gumstix.net Gumstix Overo] using the OpenEmbedded distribution. The guide should apply to most any OpenEmbedded environment.

-

'''First you must set up your build environment.'''

+

== Setting up the build environment==

-

[http://www.gumstix.net/Setup-and-Programming/view/Overo-Setup-and-Programming/Setting-up-a-build-environment/111.html For the overo gumstix]

+

If you're using a Gumstix Overo, follow the directions at gumstix.net for setting up the [http://www.gumstix.net/Setup-and-Programming/view/Overo-Setup-and-Programming/Setting-up-a-build-environment/111.html Overo environment]

Beagleboard users should first refer to the [http://code.google.com/p/beagleboard/wiki/HowToGetAngstromRunning Getting Angstrom Running] guide to get the feel for how to get Angstrom running. To set up the build environment, refer to the [http://elinux.org/BeagleBoardAndOpenEmbeddedGit OpenEmbedded and Git] guide.

-

[http://bitbake.berlios.de/manual/ bitBake manual]

+

More information on OpenEmbedded can be found in the [http://docs.openembedded.org/usermanual/html/chapter_getting_oe.html Openembedded Manual]

+

For more information on the BitBake tool, view the [http://bitbake.berlios.de/manual/ BitBake manual] at Berlios.de.

[http://www.gumstix.net/User-How-To-s/view/Build-system-overview/Hello-world-tutorial/110.html Gumstix tutorial] (note slightly outdated and designed for the verdex, take note of the following changes:

+

*Ipkg is now opkg

+

*Directory structure is differerent

+

*packages is now recipes

+

*gumstix-oe is now overo-oe

+

*com.gumstix.collection and org.openembedded.snapshot have been combined into org.openembedded.dev

+

*arm5 is now arm7

-

'''If you want Gearbox with your player, you must install gearbox first [http://playerstage.sourceforge.net/wiki/Cross_Compile_Player_with_Gearbox here]

The following recipe will cross-compile player and package it. You will need to save it as a .bb file in your recipes directory, which you should have created from the setting up a build environment.

+

The following Makefile shows the principles of cross compiling player drivers (as plugins) outside OpenEmbedded / bitbake, but still make use of the generated toolchain for cross compiling to the Gumstix board. You will most likely have to modify the variables/paths to fit your particular system, but that is the easy part :)

+

<pre>

+

# ${OVEROTOP} is pointing to where you installed overo-oe / OpenEmbedded (probably ~/overo-oe/)

It is recommended to manually inspect the pkg-config flags for playercore (where the information going into PLAYER_INCLUDE_DIR came from). They can be found in playercore.pc, e.g. ${OVEROTOP}/tmp/work/armv7a-angstrom-linux-gnueabi/player-3.1.0-r0/package/usr/lib64/pkgconfig/playercore.pc for my build. Using "find ${OVEROTOP} -name 'playercore.pc'" should show you where it is located. An alternative could be to set the environment variable PKG_CONFIG_PATH to point to the pkgconfig directory e.g. export PKG_CONFIG_PATH=${OVEROTOP}/tmp/work/armv7a-angstrom-linux-gnueabi/player-3.1.0-r0/package/usr/lib64/pkgconfig and use `pkg-config --cflags playercore` to obtain the same information.

-

LICENSE = "GPL"

-

HOMEPAGE = "http://playerstage.sourceforge.net"

-

DEPENDS = ""

+

'''If you want Gearbox with your player, you must install Gearbox first [http://playerstage.sourceforge.net/wiki/Cross_Compile_Player_with_Gearbox here]

+

'''

+

+

==Player Recipe==

+

The following recipe will cross-compile player and package it. You will need to save it as a .bb file in your recipes directory, which you should have created from the setting up a build environment.

+

+

For the BeagleBoard, create a folder in openembedded/recipes directory of the buildroot, named "player". Then, save the following recipe into a file named "player.bb"

+

+

For the Gumstix, create a folder in the gumstix-oe/recipes/ directory, named "player". Then, save the following recipe into a file named "player.bb"

''DEPENDS = ""'' This recipe uses a very simple config of player that does not require any dependencies, if you wanted for example to add playerv, you would first turn the cMake variable for playerv to on( -DBUILD_UTILS_PLAYERV=ON) then you would add the relevant dependency (''DEPENDS = "gtk+"'') [http://docs.openembedded.org/usermanual/html/recipes_depenencies.html More]

+

-

+

-

+

-

''PR="r0"'' Just a revision bumper

+

-

+

-

+

-

''inherit pkgconfig'' Very important [http://docs.openembedded.org/usermanual/html/pkgconfig_class.html Explanation]

+

-

+

-

+

-

''do_configure()'' Task configures cMake. I could not find a disable all drivers command so instead had to manually disable every driver that I didn't want, which is why the do_configure task is so packed and big. If you want to add a driver or change some cMake configuration find the relevant command variable and change it ie ''-DBUILD_SHARED_LIBS=ON'' or ''-DENABLE_DRIVER_BLOBTRACKER=ON''

+

-

+

-

+

-

''do_compile()'' Task runs make

+

-

+

-

+

-

''do_install()'' Installs the targets to the ${D} (destination directory, which is a directory within your build environment)

+

+

</pre>

-

The ''FILES_${PN}'' line tells bitBake what files you want to be packaged

+

The recipe above has several important sections.

+

*''DEPENDS = "libtool jpeg guile"'' This recipe uses the given dependencies for building player. If you want to add playerv, you would first turn the cMake variable for playerv to on( -DBUILD_UTILS_PLAYERV=ON) then you would add the relevant dependency (''DEPENDS = "gtk+"''). Read more in the [http://docs.openembedded.org/usermanual/html/recipes_depenencies.html OpenEmbedded Manual]

+

*''PN'' Package Name. This name should reflect the name of the project being packaged.

+

*''PV'' Package Version. This is the version number of the project being built.

+

*''PR'' Package Revision number. Each time the package is rebuilt with the same PV (for example, a bugfix or security update), this revision is incremented.

*''do_configure()'' Run configuration. In Player's case, CMake is the configuration system. Many other projects use autotools, etc. The above cmake options disable all of the optional components of Player, and install the server with no client library or drivers included. To add a driver, utility, or other option, just find the relevant CMake variable and change it (i.e. ''-DBUILD_SHARED_LIBS=ON'' or ''-DENABLE_DRIVER_BLOBTRACKER=ON'')

+

*''do_compile()'' Runs "make." This is where BitBake compiles the project

+

*''do_install()'' Installs the targets to the ${D} (destination directory, which is a directory within your build environment)

+

*''FILES_${PN}'' Tells bitBake what files to package. If adding other utilities or clients, be sure to add the filenames to this section.

+

== Building Player ==

+

Once the recipe is in the proper place, run the command "bitbake player" after setting up your build environment. BitBake should fire up and attempt to compile Player and its dependancies. If everything goes well, BitBake will let you know with a message saying it completed successfully.

-

'''If you want to be able to check your cMake/Make/ logs, you must check your working directory, for me this was /home/<user>/overo-oe/tmp/work/armv7a-angstrom-linux-gnueabi/<recipe name>'''

+

== Checking the logs ==

+

If you want to confirm that CMake is working correctly, and that there are no build errors, you can check the build logs. Each step (do_compile, do_configure) creates its own logfile that you can review. On the gumstix, assuming you followed the directions to set up the buildroot in ~/overo-oe, you can find the log files in '''~/overo-oe/tmp/work/armv7a-angstrom-linux-gnueabi/<recipe name>/tmp/''' For the BeagleBoard, if you checked out the buildroot in ~/OE, you can find the logs in ~/OE/angstrom-dev/work/armv7a-angstrom-linux-gnueabi/<recipe name>/tmp/'''

+

== Installing the Packages ==

+

To install the packages, copy the .ipk files generated by the build process to your embedded machine (either via SSH or directly to the memory card). Then, use the opkg command on the embedded machine to install the .ipk file.

-

now install the package on you embedded machine

+

Alternately, you can add Player to a system image. For example, the BeagleBoard environment has several images like "x11-image" and "basic-image". These are essentially bitbake files, and can be found in openembedded/recipes/images/. You can add player to the IMAGE_INSTALL section, and run "bitbake <imagename>" to create a system image with Player included.

+

To add Gearbox support to Player (i.e. for the hokuyo_aist driver), follow the [[Cross Compile Player with Gearbox]] guide.

-

If you want to get gearbox with player hit [http://playerstage.sourceforge.net/wiki/Cross_Compile_Player_with_Gearbox continue]

+

[[Category:Documentation]]

+

[[Category:Tutorials]]

Latest revision as of 12:31, 26 December 2011

The following is a simple guide on how to cross compile player using bitBake and Openembedded(OE) tools.

The author of this guide is new to Openembedded, bitBake and cross compiling in general so please feel free to edit, update or correct. The guide was tested on the Overo Gumstix with an iRobot Create and a Hokuyo Urg Laser.

Special thanks to Ash Charles, Geoffrey Biggs and Rich Mattes who helped me getting this working.

Contents

Purpose

This guide is intended for Player users who want to have the latest version of Player on their OpenEmbedded systems. This guide has been tested on the BeagleBoard using the Angstrom distribution (which is based on OpenEmbedded), and on the Gumstix Overo using the OpenEmbedded distribution. The guide should apply to most any OpenEmbedded environment.

Setting up the build environment

If you're using a Gumstix Overo, follow the directions at gumstix.net for setting up the Overo environment

The following Makefile shows the principles of cross compiling player drivers (as plugins) outside OpenEmbedded / bitbake, but still make use of the generated toolchain for cross compiling to the Gumstix board. You will most likely have to modify the variables/paths to fit your particular system, but that is the easy part :)

It is recommended to manually inspect the pkg-config flags for playercore (where the information going into PLAYER_INCLUDE_DIR came from). They can be found in playercore.pc, e.g. ${OVEROTOP}/tmp/work/armv7a-angstrom-linux-gnueabi/player-3.1.0-r0/package/usr/lib64/pkgconfig/playercore.pc for my build. Using "find ${OVEROTOP} -name 'playercore.pc'" should show you where it is located. An alternative could be to set the environment variable PKG_CONFIG_PATH to point to the pkgconfig directory e.g. export PKG_CONFIG_PATH=${OVEROTOP}/tmp/work/armv7a-angstrom-linux-gnueabi/player-3.1.0-r0/package/usr/lib64/pkgconfig and use `pkg-config --cflags playercore` to obtain the same information.

If you want Gearbox with your player, you must install Gearbox first here

Player Recipe

The following recipe will cross-compile player and package it. You will need to save it as a .bb file in your recipes directory, which you should have created from the setting up a build environment.

For the BeagleBoard, create a folder in openembedded/recipes directory of the buildroot, named "player". Then, save the following recipe into a file named "player.bb"

For the Gumstix, create a folder in the gumstix-oe/recipes/ directory, named "player". Then, save the following recipe into a file named "player.bb"

DEPENDS = "libtool jpeg guile" This recipe uses the given dependencies for building player. If you want to add playerv, you would first turn the cMake variable for playerv to on( -DBUILD_UTILS_PLAYERV=ON) then you would add the relevant dependency (DEPENDS = "gtk+"). Read more in the OpenEmbedded Manual

PN Package Name. This name should reflect the name of the project being packaged.

PV Package Version. This is the version number of the project being built.

PR Package Revision number. Each time the package is rebuilt with the same PV (for example, a bugfix or security update), this revision is incremented.

do_configure() Run configuration. In Player's case, CMake is the configuration system. Many other projects use autotools, etc. The above cmake options disable all of the optional components of Player, and install the server with no client library or drivers included. To add a driver, utility, or other option, just find the relevant CMake variable and change it (i.e. -DBUILD_SHARED_LIBS=ON or -DENABLE_DRIVER_BLOBTRACKER=ON)

do_compile() Runs "make." This is where BitBake compiles the project

do_install() Installs the targets to the ${D} (destination directory, which is a directory within your build environment)

FILES_${PN} Tells bitBake what files to package. If adding other utilities or clients, be sure to add the filenames to this section.

Building Player

Once the recipe is in the proper place, run the command "bitbake player" after setting up your build environment. BitBake should fire up and attempt to compile Player and its dependancies. If everything goes well, BitBake will let you know with a message saying it completed successfully.

Checking the logs

If you want to confirm that CMake is working correctly, and that there are no build errors, you can check the build logs. Each step (do_compile, do_configure) creates its own logfile that you can review. On the gumstix, assuming you followed the directions to set up the buildroot in ~/overo-oe, you can find the log files in ~/overo-oe/tmp/work/armv7a-angstrom-linux-gnueabi/<recipe name>/tmp/ For the BeagleBoard, if you checked out the buildroot in ~/OE, you can find the logs in ~/OE/angstrom-dev/work/armv7a-angstrom-linux-gnueabi/<recipe name>/tmp/

Installing the Packages

To install the packages, copy the .ipk files generated by the build process to your embedded machine (either via SSH or directly to the memory card). Then, use the opkg command on the embedded machine to install the .ipk file.

Alternately, you can add Player to a system image. For example, the BeagleBoard environment has several images like "x11-image" and "basic-image". These are essentially bitbake files, and can be found in openembedded/recipes/images/. You can add player to the IMAGE_INSTALL section, and run "bitbake <imagename>" to create a system image with Player included.