Home

How to become a PTXdist Guru Based on the

image

Contents

1. 3 PTXdist User s Manual Jl Howdoesit Worki osa soe a sos a eae Soh em eee eae Bae a aO eee s 3 1 1 PTXdist s perception oftheworld 2 o e o 31 2 PIXdist s build process o a a ee ew 3 2 Firststeps with PTXAISt lt s r aeaa ee ee a a we 3 2 1 Extracting the Board Support Package o ooo 3 2 2 Selecting a Userland Configuration 2 3 2 3 Selecting a Hardware Platform o e e o 3 24 SelectingaToolchaim 2 260 622 eGa eo Bale a a oe ee g 3 2 5 Building the Root Filesystem Content o 326 WhetWeGotNoW cn ci 444 paspa o a a a a 3 2 7 Creating a Root Filesystem Image 0 ooo 3 2 8 Running all Parts in an emulated Environment QEMU 3 3 Adapting the OSELAS BSP Pengutronix Generic 2010 01 0 Project o o o 33 1 Workingwith Keong s soe se su 2528454 a Re ee ee 3 3 2 Adapting Platform Settings lt gt e ee a ee ee 3 3 3 Adapting Linux Kernel Settings o o o 3 3 4 Adapting Userland Settings lt lt oo 4 PTXdist Developer s Manual 44 PTXdist s directory hierarchy oa we ede a a w A A ati RuleFiles ssa 2444 44424064 iG ed 6 a ada aia Patel Series o cae dee eA aa a a ee we Ps 4 13 Runtime Configuration lt ss c s s sesa goi pala eee k nE we f
2. call install_copy foo 0 0 0755 FOO_DIR foo usr bin foo 42 f Pengutronix 5 PTXdist Reference Copy a file from the package build directory to the root filesystem and rename it call install_copy foo 0 0 0755 FOO_DIR foo usr bin bar Copy a file from the package install directory to the root filesystem call install_copy foo 0 0 0755 usr bin foo 5 1 5 install_alternative Usage call install_alternative lt package gt lt UID gt lt GID gt lt permission gt lt destination gt Installs given files or directories into e the project s platform versatilepb root e the project s platform versatilepb root debug e an ipkg packet in the project s platform versatilepb packages The base parameters and their meanings lt package gt Name of the IPKG the macro should work on lt UID gt User ID in a numerical value the file should use in target s root filesystem lt GID gt Group ID in a numerical value the file should use in target s root filesystem lt permission gt Permission in an octal value the file should use in target s root filesystem The parameter lt destination gt is meant as an absolute path and filename in target s root filesystem PTXdist searches for the source of this file in e the local project e PTXdist s install path If the file exists in the local project it will be used for the target root filesystem Ifthe local project doe
3. 8 f Pengutronix 6 Various Aspects of Daily Work 6 2 1 Dependencies to Shared Libraries Getting the missed shared library for example at runtime is something easily done The dynamic linker prints the missing library to the console To check at build time if all other dependencies are present is easy too The architecture specific readelf tool can help us here It comes with the OSELAS Toolchain and is called via arm v4t linux gnueabi readelf this example uses the one coming with the arm vat linux gnueabi toolchain To test the foo binary from our new package FOO we simply run arm v4t linux gnueabi readelf d platform versatilepb root usr bin foo grep NEEDED 0x00000001 NEEDED Shared library libm so 6 0x00000001 NEEDED Shared library libz so 1 0x00000001 NEEDED Shared library libc so 6 We now can check if all of the listed libraries are present in the root filesystem This works for shared libraries too It is also a way to check if various configurations of our package are working as expected e g disabling a feature should also remove the required dependency of this feature 6 2 2 Dependencies to other Resources Sometimes a binary fails to run due to missing files directories or device nodes Often the error message if any that the binary creates in this case is ambiguous Here the strace tool can help us namely to observe the binary at runtime strace shows all the system calls that the bin
4. configure This will check your system for required components PTXdist relies on If all required components are found the output ends with Ea checking whether usr bin patch will work yes configure creating config status config status creating Makefile config status creating scripts ptxdist_version sh config status creating rules ptxdist version in ptxdist version 2010 01 0 configured Using usr local for installation prefix Report bugs to ptxdist pengutronix de Without further arguments PTXdist is configured to be installed into usr local which is the standard location for user installed programs To change the installation path to anything non standard we use the prefix ar gument to the configure script The help option offers more information about what else can be changed for the installation process The installation paths are configured in a way that several PTXdist versions can be installed in parallel So if an old version of PTXdist is already installed there is no need to remove it One of the most important tasks for the configure script is to find out if all the programs PTXdist depends on are already present on the development host The script will stop with an error message in case something is missing If this happens the missing tools have to be installed from the distribution befor re running the configure script When the configure script is finished successfully we can now run
5. The configure scripts of various source archives provide additional parameters to enable or disable features or to configure them in a specific way We assume the configure script of our foo example refer to section 4 2 1 supports two additional parameters e enable debug Make the program more noisy It s disabled by default e with bar Also build the special executable bar Building this executable is also disabled by default We now want to forward these options to the configure script when it runs in the prepare stage To do so we must again open the rule file with our favourite editor and navigate to the prepare stage entry PTXdist uses the variable FOO_AUTOCONF as the list of parameters to be given to configure Currently this variable is defined to FOO_AUTOCONF CROSS_AUTOCONF_USR The variable CROSS_AUTOCONF _USR is predefined by PTXdist and contains all basic parameters to instruct configure to prepare for a cross compile environment To use the two additional mentioned configure parameters we supplement this expression as follows FOO_AUTOCONF CROSS_AUTOCONF_USR enable debug with bar Note We recommend to use this format with each parameter on a line of its own That is easier to read anda diff shows more exactly any change To do a fast check if this addition was successful we run ptxdist print FOO_AUTOCONF prefix usr sysconfdir etc host i586 unknown linux gnu build i686 host
6. Usage call touch Gives a feedback what build stage is just finished Thats why it should always be the last call for each stage For the package foo and the compile stage it will output finished target foo compile 5 1 3 Clean Usage call clean lt directory path gt Removes the given directory lt directory path gt 41 f Pengutronix 5 PTXdist Reference 5 1 4 install_copy Usage call install_copy lt package gt lt UID gt lt GID gt lt permission gt lt source gt lt destination gt Installs given file or directory into e the project s platform versatilepb root e the project s platform versatilepb root debug e an ipkg packet in the project s platform versatilepb packages Some of the parameters have fixed meanings lt package gt Name of the IPKG the macro should work on lt UID gt User ID in a numerical value the file should use in target s root filesystem lt GID gt Group ID in a numerical value the file should use in target s root filesystem lt permission gt Permission in an octal value the file should use in target s root filesystem The remaining parameters vary with the use case The lt source gt parameter can be e a directory path that should be created in target s root filesystem In this case the lt destination gt must be omitted The given path must always start with a and means the root of target s filesystem an absolute path to a file that shoul
7. So if we assume the binary tries to open a nonexisting file we can limit the output to all open system calls f Pengutronix a 6 Various Aspects of Daily Work strace e open usr bin foo open etc 1d so cache O_RDONLY 3 open lib libm 2 5 1 s0 O_RDONLY 3 open 1lib libz so 1 2 3 O_RDONLY 3 open lib libc so 6 O_RDONLY 3 seal open etc foo conf O_RDONLY 1 ENOENT No such file or directory The binary may fail due to a missing texttt etc foo conf This could be a hint on what is going wrong it might not be the final solution ptxsection Dowloading Packages from the Web Sometimes it makes sense to get all required source archives at once For example prior to a shipment we want to also include all source archives to free the user from downloading it by him herself Note If ptxdist is configured to share one source archive directory for all projects this setting should be switched off temporarily Then we enter the project directory and simply run begin ptxshell Lescapechar ptxdist get PTXdist will now download all source archives used in the project and store them to the project local src direc tory 6 3 Migration between Minor Releases 6 3 1 Simple Upgrade To migrate an existing project from within one minor release of the second main release to the next one e g 2 0 0 to 2 0 x we do the following steps my_bsp ptxdist force
8. 3 architecture_part version_part PPengutronix 13 Pengutronix 3 PTXdist User s Manual This chapter should give any newbie the information he she needs to be able to handle any embedded Linux projects based on PTXdist Also the advanced user may find new valueable information 3 1 How does it work PTXdist supports various aspects of the daily work to develop deploy and maintain an embedded Linux based project Project Handling Quality Management Development Deployment Toolchains Libraries Automated Automated Debugging Tools Testing Production IDE Eclipse Figure 3 1 Objectives in a project The most important part is the development For this project phase PTXdist provides features to ensure repro ducibility and verifiability 3 1 1 PTXdist s perception of the world PTXdist works project centric A PTXdist project contains all information and files to populate any kind of target system with all required software components e Specific configuration for Bootloader Kernel Userland root filesystem e Adapted files or generic ones for runtime configuration e Patches for all kind of components to fix bugs or improve features PPengutronix 14 Pengutronix 3 PTXdist User s Manual Some of these information or files are coming from the PTXdist base installation patches for example but also can be part of the project itself By this way PTXdist can be adapted to any
9. 4 2 4 on how to use PTXdist s features to simplify this task In this example we expect the best case Everything went fine even for cross compiling So we can continue with the next stage install ptxdist install foo make 1 Entering directory home jbe my_new_prj build target foo 1 1 0 make 2 Entering directory home jbe my_new_prj build target foo 1 1 0 make 3 Entering directory home jbe my_new_prj build target foo 1 1 0 test z usr bin bin mkdir p home jbe my_new_prj build target foo 1 1 0 usr bin usr bin install c foo home jbe my_new_prj build target foo 1 1 0 usr bin foo make 3 Leaving directory home jbe my_new_prj build target foo 1 1 0 make 2 Leaving directory home jbe my_new_prj build target foo 1 1 0 make 1 Leaving directory home jbe my_new_prj build target foo 1 1 0 finished target foo install finished target foo install post This install stage does not install anything to the target root filesystem It is mostly intended to install libraries that other programs should link against later on The last stage targetinstall is the one that defines the package s components to be forwarded to the target s root filesystem Due to the absence of a generic way this is the task of the developer So at this point of time we must run our favourite editor and modify our new rule file rules foo make The skeleton for the targetinstall stage looks
10. Pengutronix 26 26 26 26 27 Contents 42 Adding new Packages cc soc a e e a Oe ee ee Boe ew 27 423 Rule le Creado ina a oy Bed a a we 28 aaa Maket Work o cs cacce hb 22845 sa ee a a a ee eee 29 4 2 3 Advanced Rule Files o e 33 A traca sg Soca ale ees Se See ie be te See ee Ae Ee a 39 4 2 5 Creating Patches for a Package 2 2 eo 39 4 2 6 Modifying Autotoolized Packages oo ee 40 5 PTXdist Reference 41 5 1 Rule File Macro Reference ee 41 Dht PO ta a da a e ia 4 Ca AUD e Ses a do GPS es da aa o UE eee OSD we GE a 41 e GOON ao ar A A A E E a Fe ed 41 Saa MACY cd iG a ae A A ee ee ee a a 42 Boe mstallcaltemtalive 0 sia ean a ee eo ee ae E eg 43 SO SEAS os ce cee RA ROA a Oe wR eee A eee bee 43 52 Rule filelayout lt o drapie eed 644400 ie oben deat e See ee hoe 44 521 Defaultstage rules lt iora cor ee dm ee ee a 44 S22 SkippingaStege socorrer teed be ade ea PASE Ee PE 46 6 Various Aspects of Daily Work 47 6 1 Using an External Kernel Source Tree aooaa aa e 47 6 1 1 Cloning the Linux Kernel Source Tree o 47 02 Configuring PIAGISE uc o a e ada di a E a d e 47 6 1 3 Configuring the PTXdist Project lt lt oo e 47 Gad Work Flow oir a ea a A eS 48 6 2 Discovering Runtime Dependencies oo o e 48 6 2 1 Dependencies to Sha
11. Referto section 4 2 6 on how PTXdist can handle this special task Adding more Patches to a Package If we want to add more patches to an already patched package we can use nearly the same way as creating patches for the first time But if the patch series comes from the PTXdist main installation we do not have write permissions to these directories do NEVER work on the main installation directories NEVER NEVER NEVER Due to the search order in which PTXdist searches for patches for a specific package we can copy the global patch series to our local project directory Now we have the permissions to add more patches or modify the existing ones Also quilt is our friend here to manage the patch series If we think that our new patches are valuable also for others or they fix an error it could be a good idea to send these patches to PTXdist mainline 4 2 6 Modifying Autotoolized Packages Autotoolized packages are very picky when automatically generated files get patched The patch order is very important in this case and sometimes it even fails and nowbody knows why To improve a package s autotools based build system PTXdist comes with its own project local autotools to regenerate the autotools template files instead of patching them With this feature only the template files must be patched the required configure script and the Makefile in files are regenerated in the final stages of the prepare step This feature works like the r
12. T B gt TATAE z L foo tgz foo ipk le R C m N E sbinbar O bar tgz bar ipk TA er Waa TTTS C usr bin baz E baz tgz extract ES a A a E ve al PTXdist Figure 3 2 The build process ptxdist lt parameter gt To run different functions this command must be extended by parameters to define the function we want to run If we are unsure what parameter must be given to obtain a special function we run it with the parameter help ptxdist help This will output all possible parameters ans subcommands and their meaning As the list we see is very long let s explain the major parameters usually needed for daily usage menu This starts a dialog based frontend for those who do not like typing commands It will gain us access to the most common parameters to configure and build a PTXdist project menuconfig Starts the Kconfig based project configurator for the current selected userland configuration This menu will give us access to various userland components that the root filesystem of our target should consist of platformconfig Starts the Kconfig based platform configurator This menu lets us set up all target specific set tings Major parts are e Toolchain architecture and revision e boot loader e root filesystem image type e Linux kernel revision Note A PTXdist project can consist of more than one platform configuration at the same time kernelconfig Runs the standard Linux kernel Kconfig to c
13. a text based user interface by using the ncurses library to manipulate the screen content and should work on nearly all host systems For example running PTXdist s menuconfig subcommand in this way ptxdist menuconfig will show the following console output Figure 3 3 Main userland configuration menu 21 Jf Pengutronx 3 PTXdist User s Manual Navigate in Kconfig menu select search To navigate through the configuration tree we are using the arrow keys Up and down navigates vertically in the menu entries Right and left navigates between Select Exit and Help in the bottom part of our visual screen To enter one ofthe menus we navigate to this entry to highlight it and press the Enter key To leave it we select Exit and press the Enter key again There are shortcuts available instead of pressing the Enter key to entera menu we also can press alt s and to leave a menu alt e Also an ESC double hit leaves any menu we are in To select a menu entry we use the Space key This will toggle the selection Or to be more precise and faster we use the key y to select an entry and key n to deselect it To get help for a specific menu topic we navigate vertically to highlight it and horizontally to select the Help entry Then we can press Enter to see the help To search for specific keywords we press the key and enter a word Kconfig then lists all occurences of this word in all menus Meaning
14. along with their executables and libraries PTXdist provides default configuration files for the most common cases These files can be found in the generic etc directory and they are using the same names as the ones at runtime and their install directory on the target side will also be etc But some of these default configuration files are empty due to the absence of a common case The project must provide replacements of these files with a more useful content in every case where the empty default one does not meet the target s requirements PTXdist first searches the project local projectroot etc directory for a specific configuration file and falls back to use the default one if none exists locally A popular example is the configuration file etc fstab The default one coming with PTXdist works for the most common cases But if our project requires a special setup we can just copy the default one to the local projectroot etc fstab modify it and we are done The next time PTXdist builds the root filesystem it will use the local fstab instead of the global default one 4 2 Adding new Packages PTXdist provides a huge amount of applications sufficient for the most embedded use cases But there is still need for some fancy new packages This section describes the steps and the background on how to intergrate new packages into the project At first a summary about possible application types which PTXdist can handle PPengutron
15. always a good idea to start with a known to work kernel configuration So in this case we continue using the configs arm qgemu 3 kernelconfig file even for our new 2 6 32 kernel But due to the update to a more recent kernel revision we should check in the next step if the new kernel supports more or different features for our platform 3 3 3 Adapting Linux Kernel Settings In this section we want to show how to change some Linux kernel settings of our OSELAS BSP Pengutronix Generic 2010 01 0project First of all we run ptxdist menuconfig kernel This command will start the kernel s Kconfig For this example we want to enable USB host support in the kernel To do so we navigate to Device Drivers gt ARUSBASUPpOREA gt lt gt Support for Host side USB lt gt OHCI HCD support fPengutronn 23 Pengutronix 3 PTXdist User s Manual Note All the listed empty Jand lt gt above must be activated to get all submenu entries We leave the menu and save the new kernel configuration To start building a new kernel with the new configuration we again run ptxdist go This builds or re builds the kernel because we changed its settings Note If nothing was changed ptxdist go also will do nothing When PTXdist has finished its job the new bootable kernel can be found at platform versatilepb images linuximage To boot it again in the QEMU emulation the hard disk image must be re created with ptxdist i
16. drwxr xr x 5 jb users 4096 Jan 5 18 15 configs drwxr xr x 3 jb users 4096 Jan 18 15 documentation drwxr xr x 4 jb users 4096 Jan 18 15 patches drwxr xr x 5 jb users 4096 Jan 18 15 projectroot drwxr xr x 3 jb users 4096 Jan 18 15 protocols drwxr xr x 3 jb users 4096 Jan 18 15 rules aaa a wo PPengutronix 17 Pengutronix 3 PTXdist User s Manual Notes about some ofthe files and directories listed above ChangeLog Here you can read what has changed in this release Note This file does not always exist documentation If this BSP is one of our OSELAS BSPs this directory contains the Quickstart you are currenly reading in configs A multiplatform BSP contains configurations for more than one target This directory contains the re spective platform configuration files projectroot Contains files and configuration for the target s runtime A running GNU Linux system uses many text files for runtime configuration Most of the time the generic files from the PTXdist installation will fit the needs But if not customized files are located in this directory rules If something special is required to build the BSP for the target it is intended for then this directory contains these additional rules patches If some special patches are required to build the BSP for this target then this directory contains these patches on a per package basis tests Contains test scripts for automated target setup Next we will build the OSE
17. j qui mt spa jii ali fut aul ag OSELAS Support OSELAS Training OSELAS Development OSELAS Services How to become a PTXdist Guru Based on the OSELAS BSP Pengutronix Generic arm Pengutronix Pengutronix e K Peiner Stra e 6 8 31137 Hildesheim 49 0 51 21 20 6917 0 Fon 49 0 5121 20 69 17 55 55 Fax info pengutronix de 2010 Pengutronix Hildesheim Rev 1498 395 gt IUBd 1 UG Z JOPUOW INO uo 13135 pue 99H NJ Contents 1 Welcome to the Embedded World 1 1 First Steps inthe Embedded World o e 1 2 FromServertoEmbedded ee ee 13 Linti e Embedded Linux lt so s eg be de a Pe Be eh p Sb ka 2 Getting a working Environment 2 1 Download Software Components a a2 PTXdistinstallation o o o oe ea we ee ee ad a ee a 221 Wain Partsof PIXdist i e kde eas Ge eee eee ede ad eee bd 2223 Extracting the Sources ostro nomaa a de eae a ME a ee eS 237 UP MRTSOUIGHOS y sd as Ge ee A Mla Ge ae eee ete ete de we e aaa Conagua PT AUS se a GS Se ee Me ee ee E Zae TOAS fine bw e oder Bae OR ee Ses SF Bie bees bee 6 233 Using Existing Toolenains osos bk a eee Oo a ew 2332 BuildingaToolenaiti sxo sirde g e Be A ae a E 2 3 3 Building the OSELAS Toolchain for OSELAS BSP Pengutronix Generic 2010 01 0 234 Protecting the Tooletiain 0 05 sands ia e a Re e 2 3 5 Building Additional Toolchains o
18. like this Target Install 31 f Pengutronix 4 PTXdist Developer s Manual STATEDIR foo targetinstall call targetinfo call install_init foo call install_fixup foo PACKAGE foo call install_fixup foo PRIORITY optional call install_fixup foo VERSION FOO_VERSION call install_fixup foo SECTION base call install_fixup foo AUTHOR My Name lt me my org com gt call install_fixup foo DEPENDS call install_fixup foo DESCRIPTION missing call install_copy foo 0 0 0755 FOO_DIR foobar dev null call install_finish foo call touch The header of this stage defines some information IPKG needs The important part that we must modify is the call to the install_copy macro refer to section 5 1 for more details about this kind of macros This call instructs PTXdist to include the given file with PID UID and permissions into the IPKG which means to install this file to the target s root filesystem From the previous install stage we know this package installs an executable called foo to location usr bin We can do the same for our target by changing the install_copy line to call install_copy foo 0 0 0755 FOO_DIR foo usr bin foo To check it we just run ptxdist targetinstall foo install_init preparing for image creation install_init ARCH gt 1386 done install_init preinst not available install_
19. linux gnu enable debug with bar Or re build the package with the new settings ptxdist drop foo prepare ptxdist targetinstall foo Adding Dynamic Configure Parameters Sometimes it makes sense to add this kind of parameters on demand only especially a parameter like enable debug To let the user decide if this parameter is to be used or not we must add a menu entry So let s expand our menu Here is its current content SECTION fixme config FOO tristate prompt foo help FIXME j Pengutronix ad 4 PTXdist Developer s Manual We ll add two menu entries one for each optional parameter we want to add on demand to the configure pa rameters SECTION fixme config FOO tristate prompt foo help FIXME if FOO config FOO_DEBUG bool prompt add debug noise config FOO_BAR bool prompt build bar endif Note To extend the base name by a suboption name as a trailing component gives PTXdist the ability to detect a change in the package s settings to force its rebuild To make usage of the new menu entries we must check them in the rule file and add the correct parameters autoconf FOO_AUTOCONF CROSS_AUTOCONF_USR ifdef PTXCONF_FOO_DEBUG FOO_AUTOCONF enable debug else FOO_AUTOCONF disable debug endif ifdef PTXCONF_FOO_BAR FOO_AUTOCONF with bar else FOO_AUTOCONF without bar endif It is a good practice to add both settings
20. migrate 6 4 Migration between Major Releases 6 4 1 Basic Conversion To migrate an existing PTXdist 1 project to the new PTXdist 2 the following steps are to be done To convert a PTXdist 1 project into a PTXdist 2 project simply copy your old ptxconfig file into the files selected_ptxconfig and selected_platform After that run my_bsp ptxdist force platformconfig o f Pengutronix gt 6 Various Aspects of Daily Work to configure the platform specific part and check if everything is set up correctly and save these settings All in the platform unused symbols will now be discarded and the remaining required symbols and their values are saved to the selected_platform file Repeat the same step with my_bsp ptxdist force menuconfig In this case all for userland configuration unused symbols are discarded from the original ptxconfig file settings and the remaining are saved to the selected_ptxconfig file Check carefully if everything is set up correctly Now you have successfully separated platform and userland configuration This isthe main configuration ptxdist 2 uses in a single platform project 6 4 2 Adaption of Rules Files A few adaptions in the project local rules files are required to also migrate them to the new PTXdist infrastructure Variables The names of a few variables have changed e PTXCONF_HOST_PREFIX must be replaced by PTXCONF_SYSROOT_HOST e PTXCONF_ARCH must be replaced by PTXCONF_A
21. nearly every modern 32 bit processor available today x86 PowerPC ARM MIPS m68k cris Super H etc The kernel supplies a hardware abstrac tion layer which lets our brave embedded developer once again concentrate on his very special problem not on handling negligibilities like memory management But Linux is only half of the story Besides the kernel a Linux based embedded system consists of a userland a filesystem containing all the small tools which form a small Unix system Only the combination of the kernel and a Userland let s the developer run normal processes on his x86 development machine as well as on his embedded target 1 3 Linux Embedded Linux Whereas the mainstream developers were always able to use normal Linux distributions like SuSE RedHat Man drake or Debian as a base for their applications things are different for embedded systems Due to the restricted ressources these systems normally have distributions have to be small and should only contain those things that are needed for the application Today s mainstream distributions cannot be installed in less than 100 MiB without major loss of functionality Even Debian probably today the most customizable mainstream distribution cannot be shrunk below this mark without for example losing the packet management which is an essential feature of using a distribution at all Additionally source code for industrial systems has to be e auditable and e reproduca
22. network related tool the head of the menu file should look like SECTION networking We can grep through the other menu files from the PTXdist main installation rules directory to get an idea what section names are available rules find name in xargs grep SECTION acpid in SECTION shell_and_console alsa lib in SECTION system_libraries alsa utils in SECTION multimedia_sound apache2 in SECTION networking apache2_mod_python in SECTION networking Esta klibc module init tools in SECTION initramfs xkeyboard config in SECTION multimedia_xorg_data xorg app xev in SECTION multimedia_xorg_app xorg app xrandr in SECTION multimedia_xorg_app host eggdbus in SECTION hosttools_noprompt libssh2 in SECTION networking Porting a new package to PTXdist is finished now To check it right away we simply run these two commands ptxdist clean foo rm rf home jbe my_new_prj state foo rm rf home jbe my_new_prj packages foo_ rm rf home jbe my_new_prj build target foo 1 1 0 ptxdist targetinstall foo 4 2 3 Advanced Rule Files The previous example on how to create a rule file sometimes works as shown above But most of the time source archives are not that simple In this section we want to give the user a more detailed selection how the package will be built f Pengutronix 3 4 PTXdist Developer s Manual Adding Static Configure Parameters
23. now have a PTXdist 2010 01 0 directory so we can change into it cd ptxdist 2010 01 0 1s 1F total 532 rw r r 1 jb users 18361 Jan 6 14 50 COPYING rw r r 1 jb users 3865 Jan 6 14 50 CREDITS rw r r 1 jb users 115540 Jan 6 14 50 ChangeLog Walaa ha USERS 57 Jan 6 14 50 INSTALL rw r r 1 jb users 2228 Jan 6 14 50 Makefile in rw r r 1 jb users 4196 Jan 6 14 50 README rw r r 1 jb users 691 Jan 6 14 50 REVISION_POLICY rw r r 1 jb users 63019 Jan 6 14 50 TODO rwxr xr x 1 jb users 28 Jan 6 14 50 autogen sh drwxr xr x 2 jb users 4096 Jan 6 14 50 bin drwxr xr x 9 jb users 4096 Jan 6 14 50 config rwxr xr x 1 jb users 213205 Jan 6 16 29 configure 8 f Pengutronix 2 Getting a working Environment rw r r 1 jb users 12539 Jan 6 14 50 configure ac drwxr xr x 10 jb users 4096 Jan 6 14 50 generic drwxr xr x 162 jb users 4096 Jan 6 14 50 patches drwxr xr x 2 jb users 4096 Jan 6 14 50 platforms drwxr xr x 4 jb users 4096 Jan 6 14 50 plugins drwxr xr x 6 jb users 32768 Jan 6 14 50 rules drwxr xr x 8 jb users 4096 Jan 6 14 50 scripts drwxr xr x 2 jb users 4096 Jan 6 14 50 tests 2 2 3 Prerequisites Before PTXdist can be installed it has to be checked if all necessary programs are installed on the development host The configure script will stop if it discovers that something is missing The PTXdist installation is based on GNU autotools so the first thing to be done now is to configure the packet
24. platforms various userland configuration various collections 3 1 2 PTXdist s build process When PTXdist is building one part we call it a package of the whole project it is divided into up to six stages get The package will be obtained from its source downloaded from the web for example extract The package archive gets extracted and patched if a patch set for this package exists prepare Many packages can be configured in various ways If supported this stage does the configuration ina way defined in the menu project specific compile The package gets built install The package installs itself into a project local directory This step is important at least for libraries other packages may depend on targetinstall Relevant parts of the package will be used to build an IPKG archive and the root filesystem For each single package one so called rule file exists describing the steps to be done in each stage shown above refer section 5 2 for further details Due to the get stage PTXdist needs a working internet connection to download an archive currently not existing on the development host But there are ways to prevent PTXdist from doing so refer to section 2 2 4 3 2 First steps with PTXdist PTXdist works as a console command tool Everything we want PTXdist to do we have to enter as a command But it s always the same base command PPengutronix 15 Pengutronix 3 PTXdist User s Manual bin foo a
25. rule file definition targetinstall Stage Default Rule There is no default rule for a package s targetinstall state PTXdist has no idea what is required on the target at runtime This stage is up to the developer only Refer to section 5 1 for further info on how to select files to be included in the target s root filesystem 5 2 2 Skipping a Stage For the case that a specific stage should be skipped an empty rule must be provided STATEDIR package lt stage_to_skip gt call targetinfo call touch Replace the lt stage_to_skip gt by get extract prepare compile install or targetinstall 46 f Pengutronix 6 Various Aspects of Daily Work 6 1 Using an External Kernel Source Tree This application note describes how to use an external kernel source tree within a PTXdist project In this case the external kernel source tree is managed by GIT 6 1 1 Cloning the Linux Kernel Source Tree In this example we are using the officiall Linux kernel developmen tree jbe octopus git clone git git kernel org pub scm linux kernel git torvalds linux 2 6 E jbe octopus ls 1 Ea drwxr xr x 38 jbe ptx 4096 2009 03 17 10 21 myprj drwxr xr x 25 jbe ptx 4096 2009 03 17 10 42 linux 2 6 Ese 6 1 2 Configuring PTXdist To make PTXdist use of this kernel source tree we run jbe octopus ptxdist setup and navigate to Source Directories Prefix for kernel trees and enter the base path to the kernel sourc
26. run of PTXdist will add its output to this file If something fails this file can help to find the cause 3 2 7 Creating a Root Filesystem Image After we have built the root filesystem content we can make an image which can be flashed to the target system or copied on some kind of disk media To do so we just run ptxdist images PTXdist now extracts the content of priorly created ipk packages to a temporary directory and generates an image out of it PTXdist supports following image types e hd img contains bootloader kernel and root files in an ext2 partition Mostly used for X86 target systems e root jffs2 root files inside a jffs2 filesystem e uRamdisk a u boot loadable Ramdisk e initrd gz a traditional initrd RAM disk to be used as initrdramfs by the kernel e root ext2 root files inside an ext2 filesystem root squashfs root files inside a squashfs filesystem e root tgz root files inside a plain gzip compressed tar ball All these files can be found in platform versatilepb images 3 2 8 Running all Parts in an emulated Environment QEMU The OSELAS BSP Pengutronix Generic 2010 01 0 is prepared to give every user a chance to run the results ofthe previous steps even in the absense of real hardware All we need is a working QEMU on our development host Simply run configs arm qemu 3 run This will start QEMU in full system emulation mode and runs the previously built kernel which then uses the generated dis
27. their configuration sniplet for the config system Toolchains PTXdist does not come with a pre built binary toolchain Nevertheless PTXdist itself is able to build toolchains which are provided by the OSELAS Toolchain project More in deep information about the OSELAS Toolchain project can be found here http www pengutronix de oselas toolchain index_en html Board Support Package This is an optional component mostly shipped aside with a piece of hardware There are various BSP available some are generic some are intended for a specific hardware 2 2 2 Extracting the Sources To install PTXdist at least two archives have to be extracted ptxdist 2010 01 0 tgz The PTXdist software itself ptxdist 2010 01 0 patches tgz All patches against upstream software packets known as the patch repository ptxdist 2010 01 0 projects tgz Generic projects optional can be used as a starting point for self built projects The PTXdist and patches packets have to be extracted into some temporary directory in order to be built before the installation for example the local directory in the user s home If this directory does not exist we have to create it and change into it cd mkdir local cd local Next steps are to extract the archives tar zxf ptxdist 2010 01 0 tgz tar zxf ptxdist 2010 01 0 patches tgz and if required the generic projects tar zxf ptxdist 2010 01 0 projects tgz If everything goes well we
28. FOO_MAKE_ENV and FOO_MAKE_OPT must be set to forward the re quired settings to the package s buildsystem If the package cannot be built in parallel we can also add the FOO_MAKE_PAR NO YES is the default Note FOO is still the name of our example package It must be replaced by the real package name 8 f Pengutronix d 4 PTXdist Developer s Manual 4 2 4 Patching Packages There can be various reasons why a package must be patched e Package is broken for cross compile environments e Package is broken within a specific feature e Package is vulnerable and needs some fixes e oranything else PTXdist handles patching automatically After extracting the archive PTXdist checks for the existence of a patch directory with the same name as the package If our package s name is foo 1 1 0 PTXdist searches for patches in 1 platform configs arm qemu 3 patches foo 1 1 2 project patches foo 1 1 0 3 ptxdist lt ptxdist installation gt path patches foo 1 1 0 The patches from the first location found are used Note Due to this search order a PTXdist project can replace global patches from the PTXdist installation This can be useful if a project sticks to a specific PTXdist revision but fixes from a more recent revision of PTXdist should be used 4 2 5 Creating Patches for a Package PTXdist uses the utilities patch or quilt to work with patches or patch series We recommend quilt as it can manage patch series in a
29. LAS BSP Pengutronix Generic 2010 01 0 to show some of PTXdist s main features 3 2 2 Selecting a Userland Configuration First of all we have to select a userland configuration This step defines what kind of applications will be built for the hardware platform The OSELAS BSP Pengutronix Generic 2010 01 0 comes with a predefined configuration we select in the following step ptxdist select configs ptxconfig info selected ptxconfig configs ptxconfig 3 2 3 Selecting a Hardware Platform Before we can build this BSP we need to select one of the possible platforms to build for In this case we want to build for the Versatilepb ptxdist platform configs arm qemu 3 platformconfig info selected platformconfig configs arm qemu 3 platformconfig Note Ifyou have installed the OSELAS Toolchain at its default location PTXdist should already have detected the proper toolchain while selecting the platform In this case it will output found and using toolchain opt OSELAS Toolchain 1 99 3 arm v4t 1linux gnueabi gcc 4 3 2 glibc 2 8 binutils 2 18 kernel 2 6 27 sanitized bin Ifitfails you can continue to select the toolchain manually as mentioned in the next section Ifthis autodetection was successful we can omit the steps of the section and continue to build the BSP 18 f Pengutronix 3 PTXdist User s Manual 3 2 4 Selecting a Toolchain If not automatically detected the last step in selecting various co
30. MI based SoCs which can be programmed the good old non operating system way with reasonable effort it in fact is becoming more and more difficult On the other hand legacy I O interfaces like RS232 are in creasingly often replaced by modern plug and play aware communication channels USB FireWire IEEE1394 Ethernet amp friends are more and more directly being integrated into today s microcontroller hardware Whereas some of these interfaces can somehow be handled the old controller style way of writing software the devel oper following this way will not be able to address the security and performance issues which come up with the modern network accessible devices During the last years more and more of the small scale companies which developed little embedded operating systems have been pushed out of the market Nearly no small company is able to support all the different in terfaces communication stacks development tools and security issues out there New interfaces and variants like USB On the Go are developed faster than operating system developers can supply the software for them The result is a consolidation of the market today we see that besides niche products probably only the largest commercial embedded operating system suppliers will survive that development Only the largest commercial There is one exception when the same situation came up in the mainstream computer market at the beginning of the 1990ies pe
31. O_DEBUG bool prompt add debug noise config FOO_FOO bool prompt build foo config FOO_BAR bool prompt build bar endif Note There are other packages around that do not install everything by default If our new package needs something special we must take a look into the menu of the other package how to force the required components to be installed and add the corresponding selects to our own menu file In this case it does not help to enable the required parts in our project configuration because this has no effect on the build order Managing Non Autotool Packages Many packages are still coming with a plain Makefile The user has to adapt it to make it work in a cross compile environment as well PTXdist can also handle this kind of packages We only have to specifiy a special prepare and compile stage Such packages often have no special need for any kind of preparation We can omit this stage by defining this empty rule STATEDIR foo prepare call targetinfo call touch To compile the package we can use make s feature to overwrite variables used in the Makefile With this feature we can still use the original Makefile but with our own cross compile settings Most of the time the generic compile rule can be used only a few settings are required make will be called in this case with cd FOO_DIR amp amp FOO_MAKE_ENV MAKE FOO_MAKE_OPT So in the rule file only the two variables
32. RCH_STRING e IMAGEDIR must be replaced by PKGDIR Local Source Handling To retain the old behaviour of ptxdist 1 in handling local sources simply keep the lt packetname gt _SOURCE vari able empty in the corresponding local source rule file 6 4 3 PTXdist 1 Look and Feel To keep the PTXdist 1 feeling use the following rules e Omit the platform name e g keep this menu entry empty when running pxtdist platformconfig e Open the selected_platformconfig file with an editor and search for SYSROOT_TARGET SYSROOT_HOST and SYSROOT_CROSS Replace their default settings with For SYSROOT_TARGET PTXDIST_WORKSPACE local PTXCONF_ARCH_STRING For SYSROOT_HOST PTXDIST_WORKSPACE local host For SYSROOT_CROSS PTXDIST_WORKSPACE local cross With these settings you get the same directory structure in a ptxdist 2 project as in ptxdist 1 At least if you are using Busybox as your shell environment you must check carefully if all settings in the previous Busybox version are still present Each version of Busybox changes various used symbolnames so it could happen that some settings are lost during the transition f Pengutronix 6 Various Aspects of Daily Work 6 5 Software Installation and Upgrade Root filesystems for Linux are usually built as a flash image and pushed into the respective root medium How ever when working with Embedded Linux systems developers often have the need to e install new packages e remove p
33. ackages e update packages e add configuration Installation of new packages may for example happen if a developer works on a new piece of application code or ifa new library is being written for the embedded system Package updating may be a requirement even during the system s life cycle for example for updating a customer application in the field Conventional Linux distributions like Debian SuSE or Fedora use package systems like RPM or DEB to organize their software packages Unfortunately these methods require huge packet databases in the root system which is bad for space constrained embedded systems So what we need is a packet system that e offers installation removement of packages e has no big database but a very low overhead e allows packet management features like pre post scripts i e shutdown a web server then upgrade it and start it again ipkg is such a packet system and it is being used in ptxdist Originally developed for the IBM Itsy ipkg is mean while being used on all kinds of embedded Linux projects The concept of ipkg archives is based on the well known Debian packet management format ipkg archives are ar archives containing a tarball with the binary files for the target box plus management scripts which can be run on pre install post install pre rm and post rm So even if no ipkg management utilities are available developers can modify the archives with standard shell and console tools 6 5 1 ipk
34. ary or its shared libraries are performing strace is one of the target debugging tools which PTXdist provides in its Debug Tools menu After adding strace to the root filesystem we can use it and observe our foo binary strace usr bin foo execve usr bin foo usr bin foo x 41 vars 0 brk 0 0x8e4b000 access etc 1d so preload R_OK 1 ENOENT No such file or directory open etc 1d so cache O_RDONLY 3 fstat64 3 st_mode S_IFREG 0644 st_size 77488 0 mmap2 NULL 77488 PROT_READ MAP_PRIVATE 3 0 0xb7f87000 close 3 open 1ib 1ib libm 2 5 1 so O_RDONLY 3 read 3 177ELF 1 1 1 O O O O O O O O O 3 O 3 O 1 O O 0p O 000 512 512 mmap2 NULL 4096 PROT_READ PROT_WRITE MAP_PRIVATE MAP_ANONYMOUS 1 0 Oxb7f86000 fstat64 3 st_mode S_IFREG 0555 st_size 48272 mmap2 NULL 124824 PROT_READ PROT_EXEC MAP_PRIVATE MAP_DENYWRITE 3 0 Qxb7f67000 mmap2 0xb7f72000 4096 PROT_READ PROT_WRITE MAP_PRIVATE MAP_FIXED MAP_DENYWRITE 3 xb 0xb7f72000 mmap2 0xb7f73000 75672 PROT_READ PROT_WRITE MAP_PRIVATE MAP_FIXED MAP_ANONYMOUS 1 0 0xb7f73000 close 3 0 open 1lib libc so 6 O_RDONLY z3 read 3 M177ELFMINININONONONONONONONONONINONINONINONONON332X1 512 512 fstat64 3 st_mode S_IFREG 0755 st_size 1405859 0 Beeni Occasionally the output of strace can be very long and the interesting parts are lost
35. ating such a package will also on demand create a small autotools libtool based source template project to give the developer an easy point to start This template is prepared to build a single shared library src autoconf proglib This kind of package is built for the target It is intended for development as it does not handle a released archive but a plain source project instead Creating such a package will also on demand create a small autotools libtool based template project to give the developer an easy point to start This template is prepared to build a single shared library and a single executable program The program will be linked against the shared library 4 2 1 Rule File Creation To create such a new package we create a project local rules directory first Then run ptxdist newpacket lt package type gt If we omit the lt package type gt PTXdist will list all available package types In our first example we want to add a new target type archive package When running the ptxdist newpacket target command PTXdist asks a few questions about this package This information is the basic data PTXdist must know about the package ptxdist creating a new target package ptxdist enter packet name foo ptxdist enter version number 1 1 0 ptxdist enter URL of basedir http www foo com download src pexdist rentent SUntIX eerie tar gz ptxdist enter packet author My Name lt me my org co
36. ble Embedded developers usually want to know what s in their systems be it that they have to support their software for a long time span something like 10 15 years are usual product lifetimes in automation applications or that they have such a special scenario that they have to maintain their integrated source of their Userland themselves Entering PTXdist 6 f Pengutronix 2 Getting a working Environment 2 1 Download Software Components In order to follow this manual some software archives are needed There are several possibilities how to get these either as part of an evaluation board package or by downloading them from the Pengutronix web site The central place for OSELAS related documentation is http www oselas com This website provides all re quired packages and documentation at least for software components which are available to the public To build OSELAS BSP Pengutronix Generic 2010 01 0 the following archives have to be available on the devel opment host e ptxdist 2010 01 0 tgz e ptxdist 2010 01 0 patches tgz e OSELAS BSP Pengutronix Generic 2010 01 0 tar gz e OSELAS Toolchain 1 99 3 6 tar bz2 Ifthey are not available on the development system yet it is necessary to get them 2 2 PTXdist Installation The PTXdist build system can be used to create a root filesystem for embedded Linux devices In order to start development with PTXdist it is necessary to install the software on the development syst
37. ckage as an autotoolized package and runs STATEDIR package prepare call targetinfo call clean package _DIR config cache cd package _DIR package _SUBDIR amp amp package _PATH package _ENV configure package _AUTOCONF call touch If the package s rule file defines a package _CMAKE variable FOO_CMAKE for our foo example PTXdist treats this package as a cmake based package and runs STATEDIR package prepare call targetinfo call clean package _DIR config cache cd package _DIR 88 A package _PATH package _ENV cmake package _CMAKE call touch compile Stage Default Rule If the compile stage is omitted PTXdist runs instead STATEDIR package compile call targetinfo cd package _DIR 88 A f Pengutronix 45 5 PTXdist Reference package _PATH package _MAKE_ENV MAKE package _MAKE_OPT package _MAKE_PAR call touch Note package _MAKE_PAR can be defined to YES or NO to control if the package can be built in parallel install Stage Default Rule If the install stage is omitted PTXdist runs instead STATEDIR package install call targetinfo cd package _DIR 88 A package _PATH package _MAKE_ENV MAKE package _INSTALL_OPT call touch Note package _INSTALL_OPT is always defined to install if not otherwise specified This value can be replaced by a package s
38. d be copied to target s root filesystem To avoid fixed pathes all pack ages are providing the lt package gt _DIR variable So this parameter in our foo example package can be a FOO_DIR foo a minus sign PTXdist uses the lt destination gt parameter in this case to locate the file to copy from This only works if the package uses the default install stage Only in this case an additional folder in platform versatilepb packages will be created for the package and its files For our foo example package this directory is platform versatilepb packages foo 1 1 0 The lt destination gt parameter can be e omitted if a directory in target s root filesystem should be created For this case the directory to be created is in the lt source gt parameter e an absolute path and filename with its root in target s root filesysem It must start with a slash If also the lt source gt parameter was given the file can be renamed while copying If the lt source gt parameter was given as a minus sign the lt destination gt is also used to locate the source For our foo example package if we give lt destination gt as usr bin foo PTXdist copies the file platform versatilepb packages foo 1 1 0 usr bin foo Due to the complexity of this macro here are some usage examples Create a directory in the root filesystem call install_copy foo 0 0 0755 home user foo Copy a file from the package build directory to the root filesystem
39. e file provides PTXdist with the required steps to be done ona per package base e get extract prepare compile install targetinstall 5 2 1 Default stage rules As for most packages these steps can be done in a default way PTXdist provides generic rules for each package If a package s rule file does not provide a specific stage rule the default stage rule will be used instead Omitting one of the stage rules does not mean that PTXdist skips this stage In this case the default stage rule is used instead get Stage Default Rule Ifthe get stage is omitted PTXdist runs instead STATEDIR package get call targetinfo call touch j Pengutronix ms 5 PTXdist Reference Which means this step is skipped Ifthe package is an archive that must be downloaded from the web the following rule must exist in this case package _SOURCE call targetinfo call get package extract Stage Default Rule If the extract stage is omitted PTXdist runs instead STATEDIR package extract call targetinfo call clean package _DIR call extract package call patchin package call touch prepare Stage Default Rule If the prepare stage is omitted PTXdist runs a default stage rule depending on some variable settings Ifthe package s rule file defines a package _AUTOCONF variable FOO_AUTOCONF for our foo example PTXdist treats this pa
40. e g disable debug even if this is the default case Sometimes configure tries to guess something and the binary result might differ depending on the build order For example some kind of package would also build some X related tools if X libraries are found In this case it depends on the build order if the X related tools are built or not All the autocheck features are problematic here So if we do not want configure to guess its settings we must disable everything we do not want If some parts of a package are built on demand only they must also be installed on demand only Besides the prepare stage we also must modify our targetinstall stage Sas call install_copy foo 0 0 0755 FOO_DIR foo usr bin foo f Pengutronix ag 4 PTXdist Developer s Manual ifdef PTXCONF_FOO_BAR call install_copy foo 0 0 0755 FOO_DIR bar usr bin bar endif call install_finish foo call touch Now we can play with our new menu entries and check if they are working as expected ptxdist menuconfig ptxdist targetinstall foo Whenever we change a FOO related menu entry PTXdist should detect it and re build the package when a new build is started Managing External Compile Time Dependencies While running the prepare stage it could happen that it fails due to a missing external dependency For example Feel checking whether zlib exists failed In this example our new package depends on the comp
41. e runtime system with ipkg remove lt package name gt Upgrading a Package To upgrade a package first remove it s current contents from the runtime system In a second step install the contents of the new ipkg package ipkg list ipkg remove lt package name gt ipkg lt package name gt ipk f Pengutronix ae 7 Getting help Below is a list of locations where you can get help in case of trouble For questions how to do something special with PTXdist or general questions about Linux in the embedded world try these 7 1 Mailing Lists 7 1 1 About PTXdist in Particular This is an English language public mailing list for questions about PTXdist See http www pengutronix de mailinglists index_en html how to subscribe to this list If you want to search through the mailing list archive visit http www mail archive com and search for the list ptxdist Please note again that this mailing list is just related to the PTXdist as a software For questions regarding your specific BSP see the following items 7 1 2 About Embedded Linux in General This is a German language public mailing list for general questions about Linux in embedded environments See http www pengutronix de mailinglists index_de html how to subscribe to this list Note You can also send mails in English 7 2 News Groups 7 2 1 About Linux in Embedded Environments This is an English newsgroup for general questions about Linux in embedded envi
42. e tree into this menu entry omit the kernel source tree directory name itself The kernel source tree directory to be used in this base path will be setup on a per project base So it will be possible to place more than one kernel source tree in the base path 6 1 3 Configuring the PTXdist Project Now we can setup this kernel source tree to be used in our project PTXdist will handle it in the same way as a kernel part of the project Due to this we must setup Some kind of kernel version e Kernel configuration e Image type used on our target architecture e If we want to build modules Patches to be used or not f Pengutronix a 6 Various Aspects of Daily Work Let s setup these topics Assumption is here the directory myprj contains a valid PTXdist project We just add the kernel component to it jbe octopus cd myprj jbe octopus myprj ptxdist platformconfig We must enable the Linux kernel entry first to enable kernel building as part of the project After enabling this entry we must enter this entry and e Setting up the kernel version with the name of kernel source tree directory In our case shown above it would be linux 2 6 e Selecting the correct image type in the entry Image Type e Configuring the kernel within the menu entry patching amp configuration Ifno patches should be used on top of the selected kernel source tree we keep the patch series file entry empty As GIT should help us to cr
43. eate these patches for deployment it should be kept empty on default in this first step Select a name for the kernel configuration file and enter it into the kernel config file entry e As we want to use an existing kernel source tree we also must enable the Local kernel tree menu entry Now we can leave the menu and store the new setup The only still missing component is a valid kernel config file now We can use one of the default config files the Linux kernel supports as a starting point To do so we copy one to the location where PTXdist expects it in the current project In a multi platform project this location is the platform directory usally in configs lt platform directory gt We must store the file with a name selected in the platform setup menu kernel config file 6 1 4 Work Flow Now its up to ourself working on the GIT based kernel source tree and using PTXdist to include the kernel into the root filesystem To configure the kernel source tree we simply run jbe octopus myprj ptxdist kernelconfig To build the kernel jbe octopus myprj ptxdist targetinstall kernel To rebuild the kernel jbe octopus myprj ptxdist drop kernel targetinstall jbe octopus myprj ptxdist targetinstall kernel 6 2 Discovering Runtime Dependencies Often it happens an application on the target fails to run because one of its dependencies is not fulfilled This section should give some hints how to discover this dependencies
44. ections describe the ipkg features What s Installed on the System To get a list of installed packages use list_installed ipkg list_installed PUSVLOX ASES mialce 222 egcclibs A Imi gdbserver 6 4 Eika 228 0 Ellos 2 5 ipkg 0 99 163 ixp firmware 1 kernel modules 2 6 18 aA 26 27 me 426 1 memedit 0 7 neurses 9 9 jorerinerilis Wi pureftpd 1 0 21 readline 5 0 rootfs 1 0 0 strace 4 5 14 20061101 udev 088 Alio 1 2 3 Successfully terminated f Pengutronix e 6 Various Aspects of Daily Work Content of a Package To see what files are in an installed package use files ipkg files udev Package udev 106 is installed on root and has the following files etc init d udev sbin udevtrigger etc udev udev conf etc rc d S00_udev sbin udevd sbin udevsettle Successfully terminated Adding a Package Adding a new packet or replacing an already installed one is done by ipkg install lt package name gt ipk Note the trailing ipk This extension must be given if the package file is already part of the filesystem Otherwise ipkg tries to download it from the URL configured in etc ipkg conf Removing a Package To remove the contents of a package from the running system ensure that nothing from the package is currently in use Find out the precise packet name with ipkg list and remove it s contents from th
45. ed addresses and ports to access the proxy in the form lt protocol gt lt address gt lt port gt Source Archive Location Whenever PTXdist downloads source archives it stores these archives in a project local manner If we are working with more than one project every project would download its own required archives To share all source archives between all projects PTXdist can be configured to use only one archive directory for all projects it handles Nav igate to menu entry Source Directory and enter the path to the directory where PTXdist should store archives to share between projects Generic Project Location If we already installed the generic projects we should also configure PTXdist to know this location If we already did so we can use the command ptxdist projects to get a list of available projects and ptxdist clone to get a local working copy of a shared generic project Navigate to menu entry Project Searchpath and enter the path to projects that can be used in such a way Here we can configure more than one path each part can be delemited by a colon For example for PTXdist s generic projects and our own previous projects like this usr local lib ptxdist 2010 01 0 projects office my_projects ptxdist Leave the menu and store the configuration PTXdist is now ready for use 10 f Pengutronix 2 Getting a working Environment 2 3 Toolchains Before we can start building our first userland we need a cross
46. egular patching mechanism The only difference is the additional autogen sh file in the patch directory If it exists and has execution permissions it will be called after the package was patched while the extract stage is running Its content depends on developer needs for the most simple case the content can be bin bash aclocal ACLOCAL_FLAGS libtoolize force copy autoreconf force N installi warnings cross warnings syntax warnings obsolete warnings unsuppor ted Note This way also still not autotoolized package can be autotoolized We just have to add the common auto tool template files configure ac and Makefile am for example via a patch series to the package source and the autogen sh to the patch directory f Pengutronix a9 5 PTXdist Reference 5 1 Rule File Macro Reference Rules files in PTXdist are using macros to get things work Its highly recommended to use these macros instead to do something by ourself Using the macros is portable and such easier to maintain in the case a project should be upgraded to a more recent PTXdist version This chapter describes the predefined macros in PTXdist and their usage Note This list is not complete yet 5 1 1 targetinfo Usage call targetinfo Gives a feedback what build stage is just started Thats why it should always be the first call for each stage For the package foo and the compile stage it will output 5 1 2 touch
47. em This chapter provides information about how to install and configure PTXdist on the development host 2 2 1 Main Parts of PTXdist The most important software component which is necessary to build an OSELAS BSP board support package is the ptxdist tool So before starting any work we ll have to install PTXdist on the development host PTXdist consists of the following parts The ptxdist Program ptxdist is installed on the development host during the installation process ptxdist is called to trigger any action like building a software packet cleaning up the tree etc Usually the ptxdist program is used in a workspace directory which contains all project relevant files A Configuration System The config system is used to customize a configuration which contains information about which packages have to be built and which options are selected Patches Due to the fact that some upstream packages are not bug free especially with regard to cross compi lation it is often necessary to patch the original software PTXdist contains a mechanism to automatically apply patches to packages The patches are bundled into a separate archive Nevertheless they are nec essary to build a working system f Pengutronix i 2 Getting a working Environment Package Descriptions For each software component there is a recipe file specifying which actions have to be done to prepare and compile the software Additionally packages contain
48. engutronix 2 Getting a working Environment ptxdist platformconfig and navigate to architecture gt toolchain and check for specific toolchain vendor Clear this entry to disable the toolchain vendor check 2 3 2 Building a Toolchain PTXdist handles toolchain building as a simple project like all other projects too So we can download the OSELAS Toolchain bundle and build the required toolchain for the OSELAS BoardSupport Package A PTXdist project generally allows to build into some project defined directory all OSELAS Toolchain projects that come with PTXdist are configured to use the standard installation paths mentioned below All OSELAS Toolchain projects install their result into opt OSELAS Toolchain 1 99 3 Usually the opt directory is not world writeable So in order to build our OSELAS Toolchain into that directory we need to use a root account to change the permissions PTXdist detects this case and asks if we want to run sudo to do the job for us Alternatively we can enter mkdir opt OSELAS Toolchain 1 99 3 chown lt username gt opt OSELAS Toolchain 1 99 3 chmod atrwx opt OSELAS Toolchain 1 99 3 We recommend to keep this installation path as PTXdist expects the toolchains at opt Whenever we go to select a platform in a project PTXdist tries to find the right toolchain from data read from the platform configuration settings and a toolchain at opt that matches to these settings But that s for ou
49. g Usage in PTXdist PTXdist end users and packet developers don t have to care directly about ipkg Packages are being created during the targetinstall stage then put into the platform versatilepb packages directory After the targetinstall stage of a packet was done this directory contains the ipkg packet itself plus for most packages a directory with the file content The ipkg packets contain the binaries for the root filesystem as well as start stop scripts and meta data about the Unix filesystem permissions when PTXdist creates the root filesystem which is later flashed into the onboard flash of an embedded system it takes the information from the ipkg packets as the source in order to make sure that the image is consistent to what the packages contain Internally PTXdist always uses ipkg packets to store it s target data However the ipkg functionality is not always exposed to the target itself So in order to use packets navigate to Disk and File Utilities and enable ipkg In the ipkg sub menu make sure that the install etc ipkg conf switch is active This config file is necessary to make ipkg work at runtime system The ipkg tool can only be used in images created by ptxdist images It s not fully working within the platform versatilepb root subdirectory used as NFS root filesystem 52 f Pengutronix 6 Various Aspects of Daily Work 6 5 2 Packet Installation A common use case for ipkg packets is to push new
50. get it from the source up to what the target needs at runtime This information is provided by a rule file per package PTXdist collects all rule files in its rules directory Whenever PTXdist builds something all these rule files are scanned at once These rule files are global rule files valid for all projects PTXdist uses a mechanism to be able to add or replace specific rule files on a per project base If a rules directory exists in the current project its content is scanned too These project local rule files are used in addition to the global rule files or if they are using the same name as a global rule file replacing the global rule file The replacing mechanism can be used to extend or adapt packages for specific project requirements Or it can be used for bug fixing by backporting rule files from more recent PTXdist revisions to projects that are stuck to an older PTXdist revision for maintenance only 4 1 2 Patch Series There are many packages in the wild that are not cross build aware They fail compiling some files use wrong include paths or try to link against host libraries To be sucessful in the embedded world these types of failures must be fixed If required PTXdist provides such fixes per package They are organized in patch series and can be found in the patches directory within a subdirectory using the same name as the package itself PTXdist uses the utility patch or quilt to apply an existing patch series after e
51. init postinst not available install_init prerm not available install_init postrm not available install_fixup PACKAGE gt foo done install_fixup install_fixup install_fixup install_fixup install_fixup install_copy PRIORITY gt optional done VERSION gt 1 1 0 done SECTION G gt base done AUTHORG gt My Name lt me my org com gt done DESCRIPTION G gt missing done src home jbe my_new_prj build target foo 1 1 0 foo dst usr bin foo owner 0 group 0 permissions 0755 collecting license unknown done xpkg_finish f Pengutronix 32 4 PTXdist Developer s Manual xpkg_finish creating ipkg package done finished target foo targetinstall finished target foo targetinstall post After this command the target s root filesystem contains a file called usr bin foo owned by root its group is also root and everyone has execution permissions but only the user root has write permissions One last task of this port is still open A reasonable location for the new menu entry in PTXdist s menu hierarchy PTXdist arranges its menus on the meaning of each package Is ita network related tool Ora scripting language Ora graphical application Each of these global meanings have their own submenu where we can add our new entry to We just have to edit the head of our new menu file to add it to a specific global menu If our new package is a
52. ix 27 Pengutronix 4 PTXdist Developer s Manual host type This kind of package is builtto run on the build host Most ofthe time such a package is needed if another target relevant package needs to generate some data For example the glib package depends on its own to create some data But if it is compiled for the target it can t do so That s why a host glib package is required to provide these utilities runnable on the build host It sounds strange to build a host package even if on the build host such utilities are already installed But this way ensures that there are no dependencies regarding the build host system target type This kind of package is built for the target cross type This kind of package is built for the build host but creates architecture specific data for the target klibc type This kind of package is built against klibc to be part of an initramfs for the target src autoconf prog This kind of package is built for the target Itis intended for development as it does not handle a released archive but a plain source project instead Creating such a package will also on demand create a small autotools based source template project to give the developer an easy point to start This template is prepared to build a single executable program src autoconf lib This kind of package is built for the target It is intended for development as it does not handle a released archive but a plain source project instead Cre
53. k image to bring up a full Linux based system The running system uses a serial device for its communication QEMU forwards this emulated device to the current development host console So we can watch the starting kernel s output and log in on this system Note Log in as user root with no password just enter Leaving this emulated environment happens by entering the key sequence CTRL A X 3 3 Adapting the OSELAS BSP Pengutronix Generic 2010 01 0 Project Handling a fully prepared PTXdist project is easy But everything is fixed to the settings the developer selected We now want to adapt the OSELAS BSP Pengutronix Generic 2010 01 0 project in a few simple settings 20 f Pengutronix 3 PTXdist User s Manual 3 3 1 Working with Kconfig Whenever we modify our project PTXdist is using Kconfig to manipulate the settings Kconfig means kernel con figurator and was mainly developed to configure the Linux kernel itself But it is easy to adapt to use and so popular that more and more projects are using Kconfig for their purposes PTXdist is one of them What is Kconfig It is a user interface to select given resources in a convenient way The resources that we can select are given in simple text files It uses a powerful language in these text files to organize them in a hierarchical manner solves challenges like resource dependencies supports help and search features PTXdist uses all of these features Kconfig supports
54. kind of requirement Most users are fine with the information and files the PTXdist base installation provides Development of PTXdist is done in a way to find default settings most user can work with But advanced users can still adaptto their special needs As stated above a PTXdist project consists of all required parts some of these parts are separated by design PTXdist separates a platform configuration from userland configuration root filesystem So platforms can share a common userland configuration but use a specific kernel configuration in their own platform configuration Collecting various platforms into one single project should help to maintain such projects But some platforms do need special userland think about graphic non graphic platforms To be able to also collect this requirement into one single project so called collections are supported With this feature a user can configure a full featured main userland reduced via a collection by some components for a specific platform where it makes no sense to build and ship them PTXdist can handle the following project variations one hardware platform one userland configuration common case one hardware platform various userland configurations various hardware platforms one userland configuration common case various hardware platforms one userland configuration various collections various hardware platforms various userland configuration various hardware
55. lesystem Also we must find a reasonable location where to add our new menu entry to configure the package The generated skeleton starts to add the new menu entry in the main configure menu Running ptxdist menuconfig will show it on top of all other menus entries To be able to implement all the other required steps for adding a new package we first must enable the package for building fine tuning the menu can be the last step Lets start checking the get and extract stage calling them manually one after another ptxdist get foo 2009 12 21 10 54 45 http www foo com download src foo 1 1 tar gz Length 291190 284K Lapplication x gzip Saving to global_src foo 1 1 0 tar gz XXXXOGncZA e SS 1 20H a 190 170K s in 1 75s 2009 12 21 10 54 48 170 KB s global_src foo 1 1 0 tar gz saved 291190 291190 This command should start to download the source archive If it fails we should check our network connection and ifthe URL in use is correct ptxdist extract foo extract archive global_src foo 1 1 0 tar gz extract dest home jbe my_new_prj build target PATCHIN packet fo00 1 1 0 PATCHIN dir home jbe my_new_prj build target foo 1 1 0 PATCHIN no patches for foo 1 1 0 available Fixing up home jbe my_new_prj build target foo 1 1 0 configure finished target foo extract PPengutronix 29 Pengutronix 4 PTXdist Developer s Manual In this example we expect an autotoolized so
56. m gt What we have to answer e packet name As this kind of package handles a source archive the correct answer here is the basename of the archive s file name If its full name is foo 1 1 0 tar gz then foo is the basename to enter here 28 f Pengutronix 4 PTXdist Developer s Manual e version number Most source archives are using a release or version number in their file name If its full name is foo 1 1 0 tar gz then 1 1 0 is the version number to enter here e URL of basedir This URL tells PTXdist where to download the source archive from the web if not already done If the full URL to download the archive is http ww foo com download src foo 1 1 0 tar gz the basedir part http www foo com download src is to enter here e suffix Archives are using various formats for distribution PTXdist uses the suffix entry to select the match ing extraction tool If the archive s full name is foo 1 1 0 tar gz then tar gz is the suffix to enter here e packet author If we intend to contribute this new package to PTXdist mainline we should add our name here This name will be used in the copyright note of the rule file and will also be added to the generated ipkg 4 2 2 Make it Work Generating the rule file is only one of the required steps to get a new package The next steps to make it work are to check if all stages are working as expected and to select the required parts to get them installed in the target root fi
57. mages configs arm qemu 3 run The emulated system should now start with a 2 6 32 based kernel with USB support 3 3 4 Adapting Userland Settings After changing some platform and kernel settings we are now reaching the most interesting area Userland In the userland area we can enable and use all the applications and services PTXdist provides Many of them are working out of the box when enabled and executed on the target side Some need additional runtime configura tion but PTXdist comes with most common configurations for such packages In this simple example we want to add the missing head command to our target s shell First we run ptxdist menuconfig The additional command we want to enable is provided by the Busybox package So we navigate to Shell amp Console Tools gt busybox gt Coreutils gt head After activating the head entry we leave the menu and save the new configuration Once again a ptxdist go will build or re build the busybox package due to its configuration change And also once again after finishing its job the following commands let us test the new command ptxdist images configs arm qemu 3 run Log in on the emulated system and simply check with a PPengutronix 24 Pengutronix 3 PTXdist User s Manual ptx login root login xxx root login on ttyS0 root ptx head etc fstab etc fstab special filesystems proc p
58. make All program parts are being compiled and if there are no errors we can now install PTXdist into it s final location In order to write to usr local this step has to be performed as user root sudo make install enter password Esad f Pengutronix 2 2 Getting a working Environment If we don t have root access to the machine it is also possible to install PTXdist into some other directory with the prefix option We need to take care that the bin directory below the new installation dir is added to our PATH environment variable for example by exporting it in bashrc The installation is now done so the temporary folder may now be removed 8 Gel coool rm fr local 2 2 4 Configuring PTXdist When using PTXdist for the first time some setup properties have to be configured Two settings are the most important ones Where to store the source packages and if a proxy must be used to gain access to the world wide web Run PTXdist s setup ptxdist setup Due to PTXdist is working with sources only it needs various source archives from the world wide web If these archives are not present on our host PTXdist starts the wget command to download them on demand Proxy Setup To do so an internet access is required If this access is managed by a proxy wget command must be adviced to use it PTXdist can be configured to advice the wget command automatically Navigate to entry Proxies and enter the requir
59. n configuration which is only required in special cases This pa rameter needs the path to a valid collection It will generate a soft link called selected_collection in the project s main directory This is an advanced feature rarely used go The mostly used command This will start to build everything to get all the project defined software parts Also used to rebuild a part after its configuration was changed images Used at the end of a build to create an image from all userland packages to deploy the target its flash for example or its hard disk setup Mostly run once per PTXdist revision to set up global paths and the PTXdist behavior All these commands depending on various files a PTXdist based project provides So running the commands make only sense in directorys that contains a PTXdist based project Otherwise PTXdist gets confused and con fuses the user with funny error messages To show the usage of some listed major subcommands we are using a generic PTXdist based project 3 2 1 Extracting the Board Support Package In order to work with a PTXdist based project we have to extract the archive first tar zxf OSELAS BSP Pengutronix Generic 2010 01 0 tar gz cd OSELAS BSP Pengutronix Generic 2010 01 0 PTXdist is project centric so now after changing into the new directory we have access to all valid components total 32 rw r r 1 jb users 252 Jan 5 18 18 ChangeLog rw r r 1 jb users 741 Jan 5 18 18 README
60. nel Which kernel revision and kernel configuration should be used e Bootloader Which bootloader if any should be built in the project e The kind of image to populate a root filesystem into the target system 22 f Pengutronix 3 PTXdist User s Manual The main building blocks in the board setup configuration menu are e Network Network settings for the target e Host Host setup to be able to reach the target system At this point it could be useful to walk to the whole menus and their submenus to get an idea about the amount of features and applications PTXdist currently supports 3 3 2 Adapting Platform Settings Some parts of the OSELAS BSP Pengutronix Generic 2010 01 0 project are platform specific in contrast to the userland configuration that could be shared between platforms We now want to change the used Linux kernel of our current arm qemu 3 platform It comes with a default linux 2 6 31 and we want to change it to a more recent linux 2 6 32 To do so we run ptxdist menuconfig platform In this Kconfig dialogue we navigate to the entry x Linux kernel gt 2 6 31 kernel version and replace the 2 6 31 value by the 2 6 32 value Now we leave the menu and save the new settings A Linux kernel needs a configuration for being built correctly The OSELAS BSP Pengutronix Generic 2010 01 0 project comes with a prepared configuration in the file configs arm qemu 3 kernelconfig for the 2 6 31 kernel It is
61. nfigurations is to select the toolchain to be used to build everything for the target ptxdist toolchain opt OSELAS Toolchain 1 99 3 arm v4t linux gnueabi gcc 4 3 2 glibc 2 8 binutils 2 18 kernel 2 6 27 sanitized bin 3 2 5 Building the Root Filesystem Content Now everything is prepared for PTXdist to compile the BSP Starting the engines is simply done with ptxdist go PTXdist does now automatically find out from the selected_ptxconfig and selected_platformconfig files which packages belong to the project and starts compiling their targetinstall stages that one that actually puts the com piled binaries into the root filesystem While doing this PTXdist finds out about all the dependencies between the packages and builds them in correct order 3 2 6 What we Got Now After building the project we find even more sub directories in our project platform versatilepb build cross Contains all packages sources compiled to run on the host and handle target architecture dependend things platform versatilepb build host Contains all packages sources compiled to run on the host and handle archi tecture independend things platform versatilepb build target Contains all package sources compiled for the target architecure platform versatilepb images Generated files for the target can be found here Kernel image and root filesystem image platform versatilepb packages Location for alle individual packages in ipk format platform ver
62. of visual feedbacks in Kconfig e Submenus to enter are marked with a trailing gt Note Some submenus are also marked with a leading bracket To enter them we first must select en able them x Entries with a list of selectable alternatives are also marked with a trailing gt e Entries we can select are marked with a leading empty bracket Entries that are already selected are marked with a leading filled bracket x Entries that are selected due to dependencies into other selected entries are marked with a leading e Some entries need a free text to enter they are marked with leading brackets and the free text in it Menus and submenus in Kconfig sectioning There are dozens of entries in the PTXdist configuring menus To handle them they are divided and separated into logical units The main building blocks in the userland configuration menu are e Host Options Some parts of the project are build host relevant only For example PTXdist can build the DDD debugger to debug applications running on the target e Root Filesystem Settings to arrange target s root filesystem and to select the main C runtime library e Applications Everything we like to run on your target The main building blocks in the platform configuration menu are e Architecture Basic settings like the main and sub architecture the target system uses the toolchain to be used to build everything and some other architecture dependent settings e Linux ker
63. ompt build bar endif Note Do not add these select statements to the correspondig menu entry They must belong to the main menu entry of the package to ensure that the calculation of the dependencies between the packages is done in a correct manner Managing External Runtime Dependencies Some packages are building all of their components and also installing them into the target s sysroot But only their targetinstall stage decides which parts are copied to the root filesystem So compiling and linking of our package will work because everything required is found in the target s sysroot In our example there is a hidden dependency to the math library 1ibm Our new package was built successfully because the linker was able to link our binaries against the libm from the toolchain But in this case the libm must also be available in the target s root filesystem to fulfil the runtime dependency We have to force PTXdist to install libm 1ibmis part of the glibc package but is not installed by default to keep the root filesystem small So it does not help to select the GLIBC symbol to get a libmat runtime The correct solution here is to add a select LIBC_Mto our menu file With all the additions above it now looks like SECTION fixme f Pengutronix at 4 PTXdist Developer s Manual config FOO tristate select ZLIB if FOO_FOO select LIBXML2 if FOO_BAR select LIBC_M prompt foo help FIXME if FOO config FO
64. onfigure the kernel for the current selected platform To run this feature the kernel must be already set up for this platform 16 f Pengutronix 3 PTXdist User s Manual menuconfig collection If multiple platforms are sharing one userland configuration collections can define a subset of all selected packages for specific platforms This is an advanced feature rarely used toolchain Sets upthe path to the toolchain used to compile the current selected platform Without an additional parameter PTXdist tries to guess the toolchain from platform settings To be successful PTXdist depends on the OSELAS Toolchains installed to the opt directory If PTXdist wasn t able to autodetect the toolchain an additional parameter can be given to provide the path to the compiler assembler linker and so on select Used to select the current userland configuration which is only required if there is no selected_ptxconfig in the project s main directory This parameter needs the path to a valid ptxconfig It will generate a soft link called selected_ptxconfig in the project s main directory platform Used to select the current platform configuration which is only required if there is no se lected_platformconfig in the project s main directory This parameter needs the path to a valid platformconfig It will generate a soft link called selected_platformconfig in the project s main di rectory collection Used to select the current collectio
65. ople started to develop an alternative to the large commercial operating systems Linux Linux did never start with a ready to use solution people had a problem searched for a solution but didn t find one Then they started to develop one themselves often several people did this f Pengutronix 5 1 Welcome to the Embedded World in parallel and in a huge community based evolution mechanism the best solutions found their way into the Linux kernel which over the time formed one of the most reliable and performant kernels available today This develop and evolute mechanism has shown its effectiveness over and over again in the server and desktop market of today 1 2 From Server to Embedded The fact that for most technical problems that might occur it may be possible to find somebody on the internet who has already worked on the same or another very similar problem was one of the major forces behind the success story of Embedded Linux Studies have shown that more than 70 ofthe embedded developers are not satisfied with a black box operating system they want to adapt it to their needs to their special hardware situation which most times is Just Different than anything available Embedded projects are even more variegated than desktop or server projects due to the fact that there exist so many different embedded processors with lots of peripherals out there Linux has evolved from an i386 only operating system to a kernel running on
66. r convenience only If we decide to install the toolchains at a different location we still can use the toolchain parameter to define the toolchain to be used ona per project base 2 3 3 Building the OSELAS Toolchain for OSELAS BSP Pengutronix Generic 2010 01 0 To compile and install an OSELAS Toolchain we have to extract the OSELAS Toolchain archive change into the new folder configure the compiler in question and start the build The required compiler to build the OSELAS BSP Pengutronix Generic 2010 01 0 board support package is arm v4t linux gnueabi_gcc 4 3 2_glibc 2 8_binutils 2 18_kernel 2 6 27 sanitized So the steps to build this toolchain are In order to build any of the OSELAS Toolchains the host must provide the tool fakeroot Other wise the message bash fakeroot command not found will occur and the build stops tar xf OSELAS Toolchain 1 99 3 6 tar bz2 cd OSELAS Toolchain 1 99 3 6 ptxdist select ptxconfigs arm v4t linux gnueabi_gcc 4 3 2_glibc 2 8_binutils 2 18_kernel 2 6 27 sanitized ptxconfig ptxdist go 12 j Pengutronix 2 Getting a working Environment At this stage we have to go to our boss and tell him that it s probably time to go home for the day Even on reasonably fast machines the time to build an OSELAS Toolchain is something like around 30 minutes up to a few hours Measured times on different machines e Single Pentium 2 5 GHz 2 GiB RAM about 2 hours e Turion ML 34 2 GiB RAM abo
67. red Libraries o ee 49 6 2 2 Dependencies to other Resources o e es 49 6 3 Migration between Minor Releases o o 50 6 31 Simple Vpgrade teo acta ama a a A Rad 50 6 4 Migration between Major Releases o o 50 6 41 BASIC CONVETSION s A a A ee ke a a 50 6 4 2 Adaption of Rules Files aa oaa cacao ocen erama aera aa 51 6 4 3 PTXdist 1 Look and Feel aaa a 51 6 5 Software Installation and Upgrade n soa osooso a 52 Osa ipkeUsapeinPTMdist ce e poria e a ee g 52 652 Packet Installation izo oi por ow i ee ee oe Re ow al a a a eR a a 53 6 5 3 Automatic Packet Download e cs oe cacet ae iaa oe o ee 53 654 The ipke Command s sos s simer ae aioa E m Wade we ee E RA a 53 7 Getting help 55 ze MEMES esa a ae ee dE a ae ae A 55 Fi About PTXdist in Particular 2 2 cor aos ee ge Ea e RA 55 71 2 About Embedded Linux in General e ee 55 Fa News GroOUPS 3 tacna kn a a we ee RA A AA A 55 7 2 1 About Linux in Embedded Environments aaas a aaa a 55 7 2 2 About General Unix Linux Questions a aoao a ee 55 73 Matin o mais ar we Pea A AE 56 74 Comme rcal Support in siy ac Roa we we oe OR a a ae E a 56 4 f Pengutronix 1 Welcome to the Embedded World 1 1 First Steps in the Embedded World Once upon in time programming embedded systems was easy all a developer needed when he wanted to start a new produc
68. ression library zlib PTXdist comes with a target zlib All we need to do in this case is to declare that our new package foo depends on zlib This kind of dependencies is managed in the menu file of our new package by simply adding the select ZLIB line After this addition our menu file looks like SECTION fixme config FOO tristate select ZLIB prompt foo help FIXME if FOO config FOO_DEBUG bool prompt add debug noise config FOO_BAR bool prompt build bar endif PTXdist now builds the zlib first and our new package thereafter 6 f Pengutronix 3 4 PTXdist Developer s Manual Managing External Compile Time Dependencies on Demand It is good practice to add only those dependecies that are really required for the current configuration of the package If the package provides the features foo and bar and its configure provides switches to enable disable them independently we can also add dependencies on demand Let s assume feature foo needs the compression library libz and bar needs the XML2 library libxml2 These libraries are only required at runtime if the correspondig feature is enabled To add these dependencies on demand the menu file looks like SECTION fixme config FOO tristate select ZLIB if FOO_FOO select LIBXML2 if FOO_BAR prompt foo help FIXME if FOO config FOO_DEBUG bool prompt add debug noise config FOO_FOO bool prompt build foo config FOO_BAR bool pr
69. roc proc defaults 00 debugfs sys kernel debug debugfs defaults noauto 00 devpts dev pts devpts defaults 00 none tmp tmpfs defaults mode 1777 uid 0 gid 0 0 0 none sys sysfs defaults 00 We are done now These simple examples should give the users a quick feeling how things are working in PTXdist and how to modify them Adapting this generic BSP to a different platform with nearly the same features as our reference platforms is possible with this knowledge But most of the time a user needs more detailed adaptions to be able to fit all requirements of the new platform At this point oftime we are no longer ordinary users of PTXdist we become developers now So right now its time to read the PTXdist Developer s Manual f Pengutronix 25 4 PTXdist Developer s Manual This chapter will show all or most of the details of how PTXdist works e where are the files stored that PTXdist uses when building packages e how patching works e where is PTXdist fetching a package s runtime configuration files from e how to control a package s build stages e how to add new packages 4 1 PTXdist s directory hierarchy Note Referenced directories are meant relative to the PTXdist main installation location if not otherwise stated If not configured differently this main path is usr local lib ptxdist 2010 01 0 4 1 1 Rule Files When building a single package PTXdist needs the information on how to handle the package i e on how to
70. ronments comp os linux embedded 7 2 2 About General Unix Linux Questions This is a German newsgroup for general questions about Unix Linux programming de comp os unix programming f Pengutronix 55 7 Getting help 7 3 Chat IRC About PTXdist in particular irc freenode net 6667 Create a connection to the irc freenode net 6667 server and enter the chatroom ptxdist This is an English room to answer questions about PTXdist Best time to meet somebody there is at European daytime 7 4 Commercial Support You can order immediate support through customer specific mailing lists by telephone or also on site Ask our sales representative for a price quotation for your special requirements Contact us at Pengutronix Peiner Str 6 8 31137 Hildesheim Germany Phone 49 5121 20 6917 0 Fax 49 51 21 20 69 17 55 55 or by electronic mail sales pengutronix de 6 f Pengutronix 5
71. s not contain this file the generic file from the PTXdist installation directory will be used If our lt destination gt is etc foo conf PTXdist checks first if projectroot etc foo conf exists Else it uses the file lt ptxdist install path gt generic etc foo conf instead In a multiplatform project PTXdist checks first for the file projectroot etc foo conf lt platform name gt and then for projectroot etc foo conf and falls back to the generic one if noone of these files exist 5 1 6 install_link Usage call install_link lt package gt lt point to gt lt where gt Installs a symbolic link into e the project s platform versatilepb root f Pengutronix ae 5 PTXdist Reference e the project s platform versatilepb root debug e an ipkg packet in the project s platform versatilepb packages The parameters and their meanings lt package gt Name of the IPKG the macro should work on lt pointto gt Path and name the link should point to Note This macro rejects absolute paths If needed use relative paths instead lt where gt Path and name of the symbolic link A few usage examples Create a symbolic link as usr lib libfoo so pointing to libfoo so 1 1 0 in the same directory call install_link foo libfoo so 1 1 0 usr lib libfoo so Create a symbolic link as usr bin foo pointing to bin bar call install_link foo bin bar usr bin foo 5 2 Rule file layout Each rul
72. satilepb sysroot target Contains everything target architecture dependend libraries header files and so on platform versatilepb sysroot cross Contains everything that is host specific but must handle target architec ture data platform versatilepb sysroot host Contains everything that is only host specific platform versatilepb root Target s root filesystem image This directory can be mounted as an NFS root for example Note Due to only root can create device nodes and the build system must be run as anon root user there is no device node present in this image At least dev console dev null and dev zero should exist Create them as user root manually in order to use this directory as an NFS root platform versatilepb root debug Target s root filesystem image The difference to root is all programs and libraries in this directory still have their debug information present This directory is intended to be used as system root for a debugger To be used by the debugger you should setup your debugger with set solib absolute prefix lt path to workspace gt root debug PPengutronix 19 Pengutronix 3 PTXdist User s Manual platform versatilepb state Building every package is divided onto stages And stages of one package can de pend on stages of other packages In order to handle this correctly this directory contains timestamp files about finished stages This are the generated files platform versatilepb logfile Every
73. software to an already deployed target There must be a communication channel to transfer the packet itself to the embedded system i e by using FTP or a secure connection via SFTP or SSH so it has to be made sure that such a service is installed and configured on the target It is necessary that enough free space is available in order to store the packet itself A good rule of thumb is to have twice the size of the installed package while the packet is being installed the archive as well as it s contents must fit into the system storage This may be a problem on space constrained systems If the packet was transferred it is necessary to have remote shell access to the box either via telnet or if security is an issue by using SSH It is also possible to automate this process by using an intelligent update mechanism The shell is being used to start the necessary commands If the packet was installed the ipkg archive can be removed again 6 5 3 Automatic Packet Download It is also possible to let the embedded system download ipkg packets automatically from a network source with out pushing the packets from the outside In order to do so a valid URL must be written into the etc ipkg conf file In this case one of the wget implementations in PTXdist must be selected either the one in busybox Shell amp Console Tools BusyBox Networking Utilities or the native implementation Networking Tools 6 5 4 The ipkg Command The following s
74. t was a good toolchain consisting of e acompiler e maybe an assembler e probably an EPROM burning device and things could start After some more or less short time every register of the CPU was known a variety of library routines had been developed and our brave developer was able to do his project with the more and more well known system The controllers had legacy interfaces like RS232 i2c or SPI which connected them to the outside world and the main difference between the controllers available on the market was the number of GPIO pins UARTS and memory ressources Things have changed Hardware manufacturers have weakened the border between deeply embedded micro controllers headless devices with just a few pins and very limited computing power and full blown micropro cessors System structures became much more complicated where our good old controllers have had just some interrupts with some small interrupt service routines we today need complicated generic interrupt infrastruc tures suitable for generic software frameworks Where we ve had some linearly mapped flash ROM and some data RAM we today have multi stage pipeline architectures memory management units virtual address spaces on chip memory caches and other complicated units which is not exactly what the embedded system developer wants program every other day Entering embedded operating systems Although there are still some processors out there like the popular ARM7TD
75. these components might be already part of PTXdist In this case we just have to add this dependency into the menu file and we are done But if PTXdist cannot fulfill this dependency we also must add it as a separate package first If the prepare stage has finished successfully the next step is to compile the package ptxdist compile foo make 1 Entering directory home jbe my_new_prj build target foo 1 1 0 make all recursive make 2 Entering directory home jbe my_new_prj build target foo 1 1 0 make 3 Entering directory home jbe my_new_prj build target foo 1 1 0 f Pengutronix a 4 PTXdist Developer s Manual make 3 Leaving directory home jbe my_new_prj build target foo 1 1 0 make 2 Leaving directory home jbe my_new_prj build target foo 1 1 0 make 1 Leaving directory home jbe my_new_prj build target foo 1 1 0 finished target foo compile At this stage things can fail The build system is not cross compile aware it tries to execute just created target binaries for example The package depends on external components libraries for example not detected by configure e Sources are ignoring the endianess of some architectures or using header files from the build host system from usr include for example The linker uses libraries from the build host system from usr 1ib for example by accident In all of these cases we must patch the sources to make them work Refer to section
76. toolchain On Linux toolchains are no monolithic beasts Most parts of what we need to cross compile code for the embedded target comes from the GNU Compiler Collection gcc The gcc packet includes the compiler frontend gcc plus several backend tools cc1 g Id etc which actually perform the different stages of the compile process gcc does not contain the assembler so we also need the GNU Binutils package which provides lowlevel stuff Cross compilers and tools are usually named like the corresponding host tool but with a prefix the GNU target For example the cross compilers for ARM and powerpc may look like e arm softfloat linux gnu gcc e powerpc unknown 1inux gnu gcc With these compiler frontends we can convert e g a C program into binary code for specific machines So for example if a C program is to be compiled natively it works like this gcc test c o test To build the same binary for the ARM architecture we have to use the cross compiler instead of the native one arm softfloat linux gnu gcc test c o test Also part of what we consider to be the toolchain is the runtime library libc dynamic linker All programs running on the embedded system are linked against the libc which also offers the interface from user space functions to the kernel The compiler and libc are very tightly coupled components the second stage compiler which is used to build normal user space code is being built against the libc i
77. tself For example ifthe target does not contain a hardware floating point unit but the toolchain generates floating point code it will fail This is also the case when the toolchain builds code for i686 CPUs whereas the target is i586 So in order to make things working consistently it is necessary that the runtime libc is identical with the libc the compiler was built against PTXdist doesn t contain a pre built binary toolchain Remember that it s not a distribution but a development tool But it can be used to build a toolchain for our target Building the toolchain usually has only to be done once It may be a good idea to do that over night because it may take several hours depending on the target architecture and development host power 2 3 1 Using Existing Toolchains If a toolchain is already installed which is known to be working the toolchain building step with PTXdist may be omitted The OSELAS BoardSupport Packages shipped for PTXdist have been tested with the OSE LAS Toolchains built with the same PTXdist version So if an external toolchain is being used which isn t known to be stable a target may fail Note that not all compiler versions and combi nations work properly in a cross environment Every OSELAS BoardSupport Package checks for its OSELAS Toolchain it s tested against so using a different toolchain vendor requires an additional step Open the OSELAS BoardSupport Package menu with 11 f P
78. urce package E g to prepare the build the archive comes with a configure script This is the default case for PTXdist So there is no need to modify the rule file and we can simply run ptxdist prepare foo checking build system type 1686 host linux gnu checking host system type 1586 unknown linux gnu checking whether to enable maintainer specific portions of Makefiles no checking for a BSD compatible install usr bin install c checking whether build environment is sane yes checking for a thread safe mkdir p bin mkdir p checking for gawk gawk checking whether make sets MAKE yes checking for i586 unknown linux gnu strip i586 unknown linux gnu strip checking for 1586 unknown 1inux gnu gcc 1586 unknown linux gnu gcc checking for C compiler default output file name a out configure creating config status config status creating Makefile config status creating ppa_protocol Makefile config status creating config h config status executing depfiles commands finished target foo prepare At this stage things can fail e The configure script is not cross compile aware e The package depends on external components libraries for example If the configure script is not cross compile aware we are out of luck We must patch the source archive in this case to make it work Refer to section 4 2 6 on how to use PTXdist s features to simplify this task If the package depends on expternal components
79. ut 1 hour 30 minutes Dual Athlon 2 1 GHz 2 GiB RAM about 1 hour 20 minutes Dual Quad Core Pentium 1 8 GHz 8 GiB RAM about 25 minutes Another possibility is to read the next chapters of this manual to find out how to start a new project When the OSELAS Toolchain project build is finished PTXdist is ready for prime time and we can continue with our first project 2 3 4 Protecting the Toolchain All toolchain components are built with regular user permissions In order to avoid accidential changes in the toolchain the files should be set to read only permissions after the installation has finished successfully It is also possible to set the file ownership to root This is an important step for reliability so it is highly recommended 2 3 5 Building Additional Toolchains The OSELAS Toolchain 1 99 3 6 bundle comes with various predefined toolchains Refer the ptxconfigs folder for other definitions To build additional toolchains we only have to clean our current toolchain project removing the current selected_ptxconfig link and creating a new one ptxdist clean rm selected_ptxconfig ptxdist select ptxconfigs any_other_toolchain_def ptxconfig ptxdist go All toolchains will be installed side by side architecture dependent into directory opt OSELAS Toolchain 1 99 3 architecture_part Different toolchains for the same architecture will be installed side by side version dependent into directory opt OSELAS Toolchain 1 99
80. very easy way For this manual we assume quilt is installed on the build host Creating a Patch Series for a Package To create a patch series for the first time we can run the following steps We are still using our foo 1 1 0 example package here We create a special directory for the patch series in the local project directory mkdir p patches foo 1 1 0 PTXdist expects a series file in the patch directory Otherwise it fails Due to the fact that we do not have any patch yet we ll start with an empty series file touch patches foo 1 1 0 series Next is to extract the package if already done we must remove it first ptxdist extract foo This will extract the archive and create a symbolic link in the build directory pointing to our local patch directory Working this way will ensure that we do not lose our created patches if we enter ptxdist clean foo by accident In our case the patches are still present in patches foo 1 1 0 and can be used the next time we extract the package again f Pengutronix 2 4 PTXdist Developer s Manual All we have to do now is to do the modification we need to make the package work We change into the build directory and use quilt to create new patches add files to respective patches modify these files and refresh the patches to save our changes We recommend this way when modifying source files But this way is improper when an autotools based buildsys tem itself needs modifications
81. xtracting the archive So every patch series contains a set of patches and one series file to define the order in which the patches must be applied Note Patches can be compressed 26 f Pengutronix 4 PTXdist Developer s Manual Besides the patches directory at the main installation location PTXdist searches two additional locations for a patch series for the package in question One location is the project s currently used platform directory If the currently used platform is located in configs arm qemu 3 PTXdist searches in configs arm qemu 3 patches lt package name gt If no patch series was found in the platform directory the next location PTXdist it searches for a patch series is the main project directory in patches lt package name gt If both project local locations do not provide a patch series for the specific package PTXdist falls back to the patches directory at its main installation location This search order can be used to use specific patch series for specific cases e platfom specific e project specific e common case e bug fixing The bug fixing case is used in accordance to a replacement of a rule file If this was done due to a backport and the more recent PTXdist revision does not only exchange the rule file but also the patch series this mechanism ensures that both relevant parts can be updated in the project 4 1 3 Runtime Configuration Many packages are using runtime configuration files

Download Pdf Manuals

image

Related Search

Related Contents

  FUR10DL  Systèmes HemoCue Glucose 201 RT et 201 DM RT  Descargar Manual de Instalación  English User Manual  Radiowecker  BT RH104 Acabado Poliuretano HB  HP LaserJet P3010 Series Printers User Guide  Chicago Electric 91938 User's Manual  Notice ()  

Copyright © All rights reserved.
Failed to retrieve file