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