From 4999f788740b5cb2c4490c86e44ab5eac7b3dfe0 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 15 Oct 2010 15:14:06 +0100 Subject: [PATCH] documentation/pokt-ref-manual: Update with Yocto branding Signed-off-by: Richard Purdie --- documentation/poky-ref-manual/Makefile | 2 +- documentation/poky-ref-manual/development.xml | 406 +++++++++++------- .../figures/cropped-yocto-project-bw.png | Bin 0 -> 5453 bytes .../figures/yocto-project-transp.png | Bin 0 -> 8626 bytes .../poky-ref-manual/introduction.xml | 262 ++--------- .../poky-ref-manual/poky-ref-manual.xml | 13 +- documentation/poky-ref-manual/style.css | 9 +- .../poky-ref-manual/white-on-black-yp.png | Bin 0 -> 9584 bytes documentation/template/yocto-project-qs.png | Bin 0 -> 17829 bytes 9 files changed, 281 insertions(+), 411 deletions(-) create mode 100755 documentation/poky-ref-manual/figures/cropped-yocto-project-bw.png create mode 100755 documentation/poky-ref-manual/figures/yocto-project-transp.png create mode 100755 documentation/poky-ref-manual/white-on-black-yp.png create mode 100644 documentation/template/yocto-project-qs.png diff --git a/documentation/poky-ref-manual/Makefile b/documentation/poky-ref-manual/Makefile index 22913e1554..dfd44efd30 100644 --- a/documentation/poky-ref-manual/Makefile +++ b/documentation/poky-ref-manual/Makefile @@ -23,7 +23,7 @@ html: xsltproc $(XSLTOPTS) -o bsp-guide.html $(XSL_XHTML_URI) bsp-guide.xml tarball: html - tar -cvzf poky-ref-manual.tgz poky-ref-manual.html style.css screenshots/ss-sato.png poky-beaver.png poky-ref-manual.png + tar -cvzf poky-ref-manual.tgz poky-ref-manual.html style.css figures/yocto-project-transp.png validate: xmllint --postvalid --xinclude --noout poky-ref-manual.xml diff --git a/documentation/poky-ref-manual/development.xml b/documentation/poky-ref-manual/development.xml index 921943c155..60fb984e44 100644 --- a/documentation/poky-ref-manual/development.xml +++ b/documentation/poky-ref-manual/development.xml @@ -41,181 +41,253 @@ -
- Developing externally using the Anjuta plugin - +
+ Using the Eclipse and Anjuta Plug-ins - An Anjuta IDE plugin exists to make developing software within the Poky framework - easier for the application developer. It presents a graphical IDE from which the - developer can cross compile an application then deploy and execute the output in a QEMU - emulation session. It also supports cross debugging and profiling. - - - - To use the plugin, a toolchain and SDK built by Poky is required along with Anjuta it's development - headers and the Anjuta plugin. The Poky Anjuta plugin is available to download as a tarball at the - OpenedHand labs page or - directly from the Poky Git repository located at git://git.pokylinux.org/anjuta-poky; a web interface - to the repository can be accessed at . - - - See the README file contained in the project for more information on dependencies and building - the plugin. If you want to disable remote gdb debugging, please pass --diable-gdb-integration - switch when doing configure. + Yocto Project supports both Anjuta and Eclipse IDE plug-ins to make developing software + easier for the application developer. The plug-ins provide capability + extensions to the graphical IDE allowing for cross compilation, + deployment and execution of the output in a QEMU emulation session. + Support of these plug-ins also supports cross debugging and + profiling. Additionally, the Eclipse plug-in provides a suite of tools + that allows the developer to perform remote profiling, tracing, collection of + power data, collection of latency data and collection of performance data. -
- Setting up the Anjuta plugin +
+ The Eclipse Plug-in + + To use the Eclipse plug-in, a toolchain and SDK built by Poky is required along with + the Eclipse Framework (Helios 3.6). + To install the plug-in you need to be in the Eclipse IDE and select + the following menu: + + Help -> Install New Software + + Specify the target URL as http://yocto./download (real link needed). + + + If you want to download the source code for the plug-in you can find it in the Poky + git repository, which has a web interface, and is located at + . + + +
+ Installing and Setting up the Eclipse IDE + + If you don't have the Eclipse IDE (Helios 3.6) on your system you need to + download and install it from . + Choose the Eclipse Classic, which contains the Eclipse Platform, Java Development + Tools (JDT), and the Plug-in Development Environment. + + + NOTE: Due to the Java Virtual Machine's garbage collection (GC) process the + permanent generation space (PermGen) is not cleaned up. This space is used + to store meta-data descriptions of classes. The default value is set too small + and it could trigger an out of memory error like the following: + + Java.lang.OutOfMemoryError: PermGen space + + This error causes the applications to hang. + + + To fix this issue you can use the -vmargs + option when you start Eclipse to increase the size of the permenant generation space: + + Eclipse -vmargs -XX:PermSize=256M + + + + The Eclipse plug-in depends several Eclipse projects plug-ins: + Eclipse C/C++ Development Tools (CDT), Autotools support for CDT (Incubation) and Target + Management (RSE). + + + After installing Eclipse and bringing up the IDE for the first + time you need to be sure the following four sites are available by adding them. + + + CDT - http://download.eclipse.org/tools/cdt/releases/helios + Helios - http://download.eclipse.org/releases/helios + Target Management + 3.2 Updates - http://download.eclipse.org/dsdp/tm/updates/3.2 + The Eclipse Project Updates - + http://download.eclipse.org/eclipse/updates/3.6 + + + Once these sites are available do the following: + + Use the "Work with:" drop down list and + select "All Available Sites--" + For CDT and Autotools support: Expand the + "Programming Languages" list and select "Autotools support for CDT + (Incubation)" and "C/C++ Development Tools". Click "Next" and complete + the update. + For RSE support: Select "TM and + RSE Main Features". Click "Next" and complete the update. + + +
- Extract the tarball for the toolchain into / as root. The - toolchain will be installed into - /opt/poky. +
+ Installing the Yocto Plug-in + + Once you have the Eclipse IDE installed and configure you need to install the + Yocto plug-in. You do this similar to installing the Eclipse plug-ins in the + previous section. + + + Do the following to install the Yocto plug-in into the Eclipse IDE: + + Select the "Help -> Install New Software" item. + In the "Work with:" area click "Add..." and enter the URL for + the Yocto plug-in (we need to supply this URL). + Finish out the installation of the update similar to any other + Eclipse plug-in. + + +
+ +
+ Configuring Yocto Eclipse plug-in + + To configure the Yocto Eclipse plug-in you need to select the mode and then the + architecture with which you will be working. Start by selecting "Preferences" + from the "Window" menu and then selecting "Yocto SDK". + + + If you normally will use an installed Yocto + SDK (under /opt/poky) select “SDK Root Mode”. Otherwise, if your crosstool chain + and sysroot are within your poky tree, select “Poky Tree Mode”. + If you are in SDK Root Mode you will need to provide your poky tree path, for + example, $<Poky_tree>/build/. + + + Now you need to select the architecture. + Use the drop down list and select the architecture that you’ll be primarily + working against. + For target option, select your typical target QEMU vs External HW. If you + choose QEMU, you’ll need to specify your QEMU kernel file with full path and the + rootfs mount point. Yocto QEMU boots off user mode NFS, Please refer to QEMU + section for how to set it up. (Section TBD) + + + Save all your settings and they become your defaults for every new Yocto project + created using the Eclipse IDE. + +
- To use the plugin, first open or create an existing - project. If creating a new project the "C GTK+" project type - will allow itself to be cross-compiled. However you should be - aware that this uses glade for the UI. +
+ Using the Yocto Eclipse Plug-in + + As an example, this section shows you how to cross-compile a Yocto C autotools + based project, deploy it into QEMU, and then run the debugger against it. + You need to configure the project, trigger autogen.sh, build + the image, start QEMU, and then debug. + + + Creating a Yocto Autotools Based Project Using a Template: + Get to the Wizard selection by selecting the File -> New -> Project + menu. Expand "C/C++" and select "C Project". Click "Next" and select a template + to start with, for example "Hello World ANSI C Project". Complete the steps + to create a new Yocto autotools based project using this template. + Specify Specific Toolchain Configurations: By default the project + uses the Yocto preferences settings as defined using the procedure in + the previous section. + If there are any specific setup requirements for the newly created project + you need to reconfigure the Yocto plug-in through the menu selection + Project -> Invoke Yocto Tools -> Reconfigure Yocto. Use this dialogue + to specify specific toolchain and QEMU setups for the project. + Building the Project: Trigger autogen.sh through + Project -> Reconfigure Project. Then build the project using + Project -> Build. + Starting QEMU: Use the Run -> External Tools menu and see if there is + a QEMU instance for the desired target. If there is click on the instance + to start QEMU. If your target is not there then click "External Tools + Configuration". You should find an instance of QEMU for your architecture + under the entry under "Program". After the boot completes you are ready to + deploy the image into QEMU. + Debugging: To bring up your remote debugging configuration in the + right-hand window highlight your project in “Project Explorer”, select + the Run -> Debug Configurations menu item and expand “C/C++ Remote Application”. + Next, select projectname_ gdb_target-poky-linux. + You need to be sure that there is an + entry for the remote target you want to deploy and cross debug with. If there + is no entry then click "New..." to bring up the wizard. Using the wizard + select TCF and enter the IP address of you remote target in the + “Host name:” field. Back in the remote debug configure window, + you need to specify the absolute path for the program on the remote target + in the “Remote Absolute File Path for C/C++ Application” field. By default, + the program deploys into the remote target. If you don't want this then check + “Skip download to target path”. Finally, click "Debug” to start the remote + debugging session. + +
- To activate the plugin go to - EditPreferences, - then choose General from the left hand side. Choose the - Installed plugins tab, scroll down to Poky - SDK and check the - box. The plugin is now activated but first it must be - configured. +
+ Using Yocto Eclipse plug-in Remote Tools Suite + + Remote tools let you do things like perform system profiling, kernel tracing, + examine power consumption, and so forth. To see and access the remote tools use the + Window -> YoctoTools menu. + + + Once you pick a tool you need to configure it for the remote target. Every tool + needs to have the connection configured. You have to select an existing TCF-based + RSE connection to the remote target. If one does not exist you need to create one + by clicking "New" + + + Here are some specifics about the remote tools: + + Oprofile: Selecting this tool causes the oprofile-server on the remote + target to launch on the local host machine. To use the oprofile the oprofile-viewer + must be installed on the local host machine and the oprofile-server must be + installed on the remote target. + lttng: Selecting this tool runs ustrace on the remote target, transfers + the output data back to the local host machine and uses lttv-gui to graphically + display the output. To use this tool the lttv-gui must be installed on the + local host machine. See + for information on how to use lttng to trace an + application. + + For "Application" you must supply the absolute path name to the application to + be traced by user mode lttng. For example, typing /path/to/foo" + triggers usttrace /path/to/foo on the + remote target to trace the program /path/to/foo. + + + "Argument" is passed to "usttrace" running on the remote target. + + + powertop: Selecting this tool runs powertop on the + remote target machine and displays the result in a new view called "powertop". + + "Time to gather data(sec):" is the time passed in seconds before data is + gathered from the remote target for analysis. + + + "show pids in wakeups list:" corresponds to the -p + argument passed to powertop + + + latencytop and perf: The latencytop identifies + system latency, while perf monitors the system's performance + counter registers. Selecting either of these tools causes an RSE + terminal view to appear in which you can run the tools. Both tools refresh the + entire screen to display results while they run. + + +
-
- Configuring the Anjuta plugin - - The configuration options for the SDK can be found by choosing - the Poky SDK icon from the left hand side. The following options - need to be set: - - - - SDK root: If we use external toolchain, we need to set SDK root. - this is the root directory of the SDK's sysroot. For an i586 SDK this will be /opt/poky/. - This directory will contain directories named like "bin", - "include", "var", etc. under your selected target architecture subdirectory - /opt/poky/sysroot/i586-poky-linux/. Needed cross compile tools are under - /opt/poky/sysroot/i586-pokysdk-linux/ - - - Poky root: If we have local poky build tree, we need to set the Poky root. - this is the root directory of the poky build tree, if you build your i586 target architecture - under the subdirectory of build_x86 within your poky tree, the Poky root directory should be - ${Poky_tree}/build_x86/. - - - Target Architecture: this is the cross compile - triplet, e.g. "i586-poky-linux". This target triplet is the prefix extracted from - the set up script file name. For examle, "i586-poky-linux" is extracted from set up script file - /opt/poky/environment-setup-i586-poky-linux - - - Kernel: use the file chooser to select the kernel - to use with QEMU - - Root filesystem: use the file chooser to select - the root filesystem directory, this is the directory where you use "poky-extract-sdk" command to - extract the poky-image-sdk tarball. - - - -
- -
- Using the Anjuta plugin - - As an example, cross-compiling a project, deploying it into - QEMU and running a debugger against it and then doing a system - wide profile. - - Choose BuildRun - Configure or - BuildRun - Autogenerate to run "configure" - (or to run "autogen") for the project. This passes command line - arguments to instruct it to cross-compile. - - Next do - BuildBuild - Project to build and compile the - project. If you have previously built the project in the same - tree without using the cross-compiler you may find that your - project fails to link. Simply do - BuildClean - Project to remove the old - binaries. You may then try building again. - - Next start QEMU by using - ToolsStart - QEMU, this will start QEMU and - will show any error messages in the message view. Once Poky has - fully booted within QEMU you may now deploy into it. - - Once built and QEMU is running, choose - ToolsDeploy, - this will install the package into a temporary directory and - then copy using rsync over SSH into the target. Progress and - messages will be shown in the message view. - - To debug a program installed into onto the target choose - ToolsDebug - remote. This prompts for the - local binary to debug and also the command line to run on the - target. The command line to run should include the full path to - the to binary installed in the target. This will start a - gdbserver over SSH on the target and also an instance of a - cross-gdb in a local terminal. This will be preloaded to connect - to the server and use the SDK root to find - symbols. This gdb will connect to the target and load in - various libraries and the target program. You should setup any - breakpoints or watchpoints now since you might not be able to - interrupt the execution later. You may stop - the debugger on the target using - ToolsStop - debugger. - - It is also possible to execute a command in the target over - SSH, the appropriate environment will be be set for the - execution. Choose - ToolsRun - remote to do this. This will open - a terminal with the SSH command inside. - - To do a system wide profile against the system running in - QEMU choose - ToolsProfile - remote. This will start up - OProfileUI with the appropriate parameters to connect to the - server running inside QEMU and will also supply the path to the - debug information necessary to get a useful profile. - +
+ External Development Using the Anjuta Plug-in + + (Note: We will stop Anjuta plug-in support after Yocto project 0.9 release. Its source + code can be downloaded from git respository listed below, and free for the community to + continue supporting it moving forward.) +
diff --git a/documentation/poky-ref-manual/figures/cropped-yocto-project-bw.png b/documentation/poky-ref-manual/figures/cropped-yocto-project-bw.png new file mode 100755 index 0000000000000000000000000000000000000000..561333b146b7d414832ab869aa3266d4bf5d158e GIT binary patch literal 5453 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 literal 0 HcmV?d00001 diff --git a/documentation/poky-ref-manual/introduction.xml b/documentation/poky-ref-manual/introduction.xml index 2683d01f22..301086a824 100644 --- a/documentation/poky-ref-manual/introduction.xml +++ b/documentation/poky-ref-manual/introduction.xml @@ -4,43 +4,39 @@ Introduction -
+
+ Welcome to Poky! + + + Poky is the the build tool in Yocto Project. + It is at the heart of Yocto Project. + You use Poky within Yocto Project to build the images (kernel software) for targeted hardware. + + + + Before jumping into Poky you should have an understanding of Yokto Project. + Be sure you are familiar with the information in the Yocto Project Quick Start. + You can find this documentation on the public Yocto Project Website. + +
+ +
What is Poky? - - Poky is an open source platform build tool. It is a complete - software development environment for the creation of Linux - devices. It aids the design, development, building, debugging, - simulation and testing of complete modern software stacks - using Linux, the X Window System and GNOME Mobile - based application frameworks. It is based on OpenEmbedded but has - been customised with a particular focus. - + Poky provides an open source Linux, X11, Matchbox, GTK+, Pimlico, Clutter, and other GNOME Mobile technologies based full platform build tool within Yocto Project. + It creates a focused, stable, subset of OpenEmbedded that can be easily and reliably built and developed upon. + Poky fully supports a wide range of x86 ARM, MIPS and PowerPC hardware and device virtulisation. - Poky was setup to: - - - - Provide an open source Linux, X11, Matchbox, GTK+, Pimlico, Clutter, and other GNOME Mobile technologies based full platform build and development tool. - - - Create a focused, stable, subset of OpenEmbedded that can be easily and reliably built and developed upon. - - - Fully support a wide range of x86, ARM, MIPS, PowerPC hardware and device virtulisation - - - Poky is primarily a platform builder which generates filesystem images based on open source software such as the Kdrive X server, the Matchbox window manager, the GTK+ toolkit and the D-Bus message bus system. Images for many kinds of devices can be generated, however the standard example - machines target QEMU full system emulation(x86, ARM, MIPS and PowerPC) and the ARM based - Sharp Zaurus series of devices. Poky's ability to boot inside a QEMU + machines target QEMU full system emulation(x86, ARM, MIPS and PowerPC) and + real reference boards for each of these architectures. + Poky's ability to boot inside a QEMU emulator makes it particularly suitable as a test platform for development of embedded software. @@ -76,222 +72,32 @@
Documentation Overview - - The handbook is split into sections covering different aspects of Poky. - The 'Using Poky' section gives an overview - of the components that make up Poky followed by information about using and - debugging the Poky build system. The 'Extending Poky' section - gives information about how to extend and customise Poky along with advice - on how to manage these changes. - The 'Board Support Packages (BSP) - Developers Guide' section - gives information about how to develop BSP such as the common layout, the - software hardware configuration options etc. - The 'Platform Development with Poky' - section gives information about interaction between Poky and target - hardware for common platform development tasks such as software development, - debugging and profiling. The rest of the manual - consists of several reference sections each giving details on a specific - section of Poky functionality. + The Poky User Guide is split into sections covering different aspects of Poky. + The 'Using Poky' section gives an overview of the components that make up Poky followed by information about using Poky and debugging images created in Yocto Project. + The 'Extending Poky' section gives information about how to extend and customise Poky along with advice on how to manage these changes. + The 'Platform Development with Poky' section gives information about interaction between Poky and target hardware for common platform development tasks such as software development, debugging and profiling. + The rest of the manual consists of several reference sections each giving details on a specific section of Poky functionality. This manual applies to Poky Release 3.3 (Green). -
System Requirements - We recommend Debian-based distributions, in particular a recent Ubuntu release (10.04 or newer), as the host system for Poky. Nothing in Poky is - distribution specific and - other distributions will most likely work as long as the appropriate - prerequisites are installed - we know of Poky being used successfully on Redhat, - SUSE, Gentoo and Slackware host systems. + distribution specific and other distributions will most likely work as long + as the appropriate prerequisites are installed - we know of Poky being used + successfully on Redhat, SUSE, Gentoo and Slackware host systems. + For information on what you need to develop images using Yocto Project and Poky + you should see the Yocto Project Quick Start on the public + Yocto Project Website. - - On a Debian-based system, you need the following packages installed: - - - - build-essential - - - python (version 2.6 or later) - - - diffstat - - - texinfo - - - texi2html - - - cvs - - - subversion - - - wget - - - gawk - - - help2man - - - chrpath - - - mercurial - - - Furthermore if you wish to run an emulated Poky image using QEMU (as in the quickstart below) you will need the following packages installed: - - - libgl1-mesa-dev - - - libglu1-mesa-dev - - - libsdl1.2-dev - - - bochsbios (only to run qemux86 images) - - - - - Debian users can add debian.o-hand.com to their APT sources (See - - for instructions on doing this) and then run - "apt-get install qemu poky-depends poky-scripts" which will - automatically install all these dependencies. Virtualisation images with - Poky and all dependencies can also easily be built if required. - - - - Poky can use a system provided QEMU or build its own depending on how it's - configured. See the options in local.conf for more details. - -
- -
- Quick Start - -
- Building and Running an Image - - - If you want to try Poky, you can do so in a few commands. The example below - checks out the Poky source code, sets up a build environment, builds an - image and then runs that image under the QEMU emulator in x86 system emulation mode: - - - - -$ wget http://pokylinux.org/releases/poky-green-3.3.tar.bz2 -$ tar xjvf poky-green-3.3.tar.bz2 -$ cd green-3.3/ -$ source poky-init-build-env -$ bitbake poky-image-sato -$ bitbake qemu-native -$ runqemu qemux86 - - - - - - This process will need Internet access, about 20 GB of disk space - available, and you should expect the build to take about 4 - 5 hours since - it is building an entire Linux system from source including the toolchain! - - - - - To build for other machines see the MACHINE variable in build/conf/local.conf. - This file contains other useful configuration information and the default version - has examples of common setup needs and is worth - reading. To take advantage of multiple processor cores to speed up builds for example, set the - BB_NUMBER_THREADS - and PARALLEL_MAKE variables. - - The images/kernels built by Poky are placed in the tmp/deploy/images - directory. - - - - You could also run "poky-qemu zImage-qemuarm.bin poky-image-sato-qemuarm.ext2" - within the images directory if you have the poky-scripts Debian package - installed from debian.o-hand.com. This allows the QEMU images to be used standalone - outside the Poky build environment. - - - To setup networking within QEMU see the - QEMU/USB networking with IP masquerading section. - - -
-
- Downloading and Using Prebuilt Images - - - Prebuilt images from Poky are also available if you just want to run the system - under QEMU. To use these you need to: - - - - - - Add debian.o-hand.com to your APT sources (See - for instructions on doing this) - - - - Install patched QEMU and poky-scripts: - - -$ apt-get install qemu poky-scripts - - - - - - - Download a Poky QEMU release kernel (*zImage*qemu*.bin) and compressed - filesystem image (poky-image-*-qemu*.ext2.bz2) which - you'll need to decompress with 'bzip2 -d'. These are available from the - last release - or from the autobuilder. - - - - Start the image: - - -$ poky-qemu <kernel> <image> - - - - - - - A patched version of QEMU is required at present. A suitable version is available from - , it can be built - by poky (bitbake qemu-native) or can be downloaded/built as part of the toolchain/SDK tarballs. - - -
diff --git a/documentation/poky-ref-manual/poky-ref-manual.xml b/documentation/poky-ref-manual/poky-ref-manual.xml index 952b5d602f..a6f095c9ca 100644 --- a/documentation/poky-ref-manual/poky-ref-manual.xml +++ b/documentation/poky-ref-manual/poky-ref-manual.xml @@ -6,17 +6,10 @@ xmlns="http://docbook.org/ns/docbook" > - - - - - - - Poky Reference Manual - A Guide and Reference to Poky + A Guide and Reference to Poky + diff --git a/documentation/poky-ref-manual/style.css b/documentation/poky-ref-manual/style.css index b5019bbee6..cb2db8b273 100644 --- a/documentation/poky-ref-manual/style.css +++ b/documentation/poky-ref-manual/style.css @@ -118,14 +118,13 @@ h6 { background-color: transparent; background-repeat: no-repeat; padding-top: 256px; - background-image: url("poky-beaver.png"); - background-position: right top; - float: right; + background-image: url("white-on-black-50.png"); + background-position: top; margin-top: -256px; padding-right: 50px; margin-left: 50px; - text-align: right; - width: 200px; + text-align: center; + width: 600px; } h3.author { diff --git a/documentation/poky-ref-manual/white-on-black-yp.png b/documentation/poky-ref-manual/white-on-black-yp.png new file mode 100755 index 0000000000000000000000000000000000000000..81f801d0e72048af2118b4df6b6dca33c684d04e GIT binary patch literal 9584 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
    1^t<{b`ctsvb0ZlUMU=UX9H^iqW` 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 b|JAQe&iR@5e*y3y76t}SS3j3^P6