{{WarningMessage|text=The following information are valid for <b>DIVELK</b> version up to release <b>2.2.0</b>}}
= Introduction =
* build system (on development host)
== Diva DIVA Embedded Linux Kit: what is it? == [[File:Divelk_01.png|500px]]
Diva DIVA Embedded Linux Kit (DIVELK for short) provides all the necessary components required to set up the developing environment to:
* build the bootloader (U-Boot)
* build and run Linux operating system on DivaDIVA-based systems
* build Linux applications that will run on the target.
The kit is composed byof:* hardware platform composed by Diva DIVA system-on-module (SOM for short) and carrier board. Supported carrier boards are:** DivaEVBDIVAEVB-Litestandalone** SOMDIVAEVB-EVB Lite plugged on Dacu carrier board
* U-Boot bootloader sources
* Linux kernel sources
* Technical documentation such hardware manuals, mechanical drawings, reference schematics, application notes etc.
The documents related to the software issues help the user to quickly start configuring the bootloader and the operating system, by hiding most of the complexity of the underlying hardware. For more details about Diva DIVA hardware characteristics, please refer to the Diva DIVA Hardware Manual. An account for the reserved area of [http://www.dave.eu DAVE's website] is required to access the kit contents.
== Diva DIVA Embedded Linux Kit: what is not? ==
The kit is neither a complete Linux programming guide nor a Linux Reference Guide. Internet provides lots of information, tutorials and examples about writing applications and drivers for this operating system and how to work with it from the user's point of view (for example, type “Linux programming” in your favorite search engine). As the kit is heavily based on open-source community-maintained software projects, DIVELK does not provide exhaustive documentation for these software components but it points out where to find the information on the Internet or books. For example, for the U-Boot bootloader, the kit does not list all the commands it handles but provides the link to the on-line documentation and to the public mailing list used by its community.
== About this manual ==
This document describes how to run Linux on the DivaDIVA/DivaEVBDIVAEVB-Lite/Carrier-board systemand how to work with '''DIVELK version 2.0.0''' and above. For novice users who have no experience at all about embedded Linux systems, reading of [http://shop.oreilly.com/product/9780596002220.do Building Embedded Linux Systems By Karim Yaghmour] is strongly recommended. Practically speaking, the book covers all matters involved in developing software for such systems (from tool-chain organization to the most famous file systems running on top of MTD). It is not a reference guide, but it provides a complete and exhaustive overview that helps the developer save a lot of time in searching for such information on the Internet. For a brief but still exhaustive overview of the Linux and Embedded Linux world, please look at the Training and Docs sections of [http://free-electrons.com Free Electrons website].
== Support service ==
We are committed to making our products user-friendly and will help customers use our CPU modules in their systems. Technical support is delivered through email. Support requests can be sent to [mailto:support-divahelpdesk@dave.eu support-divahelpdesk@dave.eu]. Software upgrades are available in the restricted download area of '''DAVE web siteEmbedded Systems''' git server: http://www<code>git@git.dave.eu</reserved-area. code> An account is required to access this area (please contact [mailto:support-divahelpdesk@dave.eu support-divahelpdesk@dave.eu] for account requests).
Please refer to our Web site at http://www.dave.eu/dave-cpu-module-am335x-diva.html for the latest product documents, utilities, drivers, Product Change Notices, Board Support Packages, Application Notes, mechanical drawings and additional tools and software.
== Components ==
=== Diva DIVA SOM ===
[[File:Diva-400.png|300px]]
The heart of Diva DIVA SOM is Texas Instruments "Sitara" [http://www.ti.com/lsds/ti/arm/sitara_arm_cortex_a_processor/sitara_arm_cortex_a8/am335x_arm_cortex_a8/products.page?paramCriteria=no AM335x microprocessors]. From a software point of view, Texas Instruments supports this processor family through so-called Linux EZ AM Software Development Kit (EZSDK AMSDK for short). EZSDK AMSDK releases are published on a regular basis. For more details please refer to:
Diva DIVA Embedded Linux Kit, in turn, is directly derived from EZSDKAMSDK. Hence DIVELK documentation often refers to EZSDK AMSDK resources.
=== Carrier boards ===
DivaEVB==== DIVAEVB-Lite ==== DIVAEVB-Lite is an adapter board designed to evaluate the functions of Diva DIVA system-on-module.
[[File:Diva-evb-with-som.png|300px]]
For further information on the DIVAEVB-Lite, please refer to [[DivaEVB-Lite provides ]] The following figure shows the carrier board block diagram: [[File:Divaevb-bd.png|600px]] ==== Dacu ==== DIVAEVB-Lite can be plugged on the following Dacu carrier board to extend the set of available interfaces. [[File:Diva divaevb dacu.png|450px]] For further information on Dacu, please refer to:
* On board peripherals:[[Dacu]]** SPI NOR flash** 1x UART RS232 on DB9 connector** 1x Ethernet port on RJ45 connector** 1x USB 2.0 port on MiniAB connector** I/Os on expansion connectors** 12V power connector* Routed to J1 and J2 (140-pin) connectors:** 18-bit RGB LCD** 1x SD/MMC** 1x SPI** 2x UART** 2x I2C** JTAG** 2x USB** 1x McASP** Touch screen / AD signals[[Dacu_for_the_Diva_SOM]]
The following figure shows the carrier board block diagram:
# the root file system – this file system is mounted (which means "made available", "attached") by the kernel during the boot process on the root directory (“/”).
The typical developing environment for an Embedded Linux system is composed of a host machine and a target machine. The host is used by the developer to compile the code that will run on the target. In our case the target is obviously the Diva DIVA module, while the host is assumed to be a PC running the Linux operating system. The Linux kernel running on the target can mount the root file system from different physical media. During the software development, we strongly recommend using a directory exported via NFS by the host for this purpose (see the example configuration called [[Prodotti_-_Dave_-_Diva_(DDx)_-_doc_-_Software_ManualBooting_Linux_Kernel#Net_nfs Configuration_net_nfs | net_nfs]]). Please note that DIVELK u-boot and kernel source trees are derived from the official trees released by TI; these trees have been customized to add support for the DIVA SOM. For further information on AMSDK, please refer to [http://processors.wiki.ti.com/index.php/Sitara_SDK_5.06.00_Release_Notes Sitara SDK release notes].
==== DIVELK components ====
Dave ==== DIVELK software components ==== '''DAVE Embedded Systems''' adds to the latest EZSDK AMSDK from Texas Instruments the customization required to support the Diva DIVA platform. For this reason most of the documentation provided by TI remains valid for the DIVELK development kit. However, some customization is required, in particular at bootloader and linux kernel levels. [[Diva_Embedded_Linux_Kit_(DIVELK)#DIVELK_software_components | Please refer to this table how DIVELK releases are related to AMSDK releases]] === DIVELK Updates === {{ImportantMessage|text=It's recommended to use the latest available DIVELK version. Customer who want to update to the latest DIVELK release can send an email to [mailto:support-diva@dave.eu support-diva@dave.eu]. Please refer to [[Software_Manual_(Diva)#Release notes | Release notes]] for further information.}} ==== Updating git repositories ==== In DIVELK, the following source trees are clones of '''DAVE Embedded Systems''' public git repositories:
The following table shows how NELK releases are related to EZSDK releases.
|Supported carrier boardsYocto BSP|git@git.dave.eu:dave/diva/diva-bsp.git|Please refer to [[Software_Manual_(Diva)#Building the software components with Yocto | Building the software components with Yocto]]
|-
|U-Boot version
|
|-
|Linux version
|
|-
|Drivers
|
|-
|TI EZSDK
|5.0? (release date?)
|}
DIVELK contains all the required software This means that these components can be kept in sync and up to develop Linux application on the Diva platformdate with '''DAVE Embedded Systems''' repositories. ==== RSA key generation ====
* Virtualbox virtual machine image with pre-installed Ubuntu Linux and pre-configured basic Linux services (Tftp, NFS, ...) * Virtualbox disk containing source code and toolsPlease follow the procedure reported below to generate the RSA ssh key:** Bootloader (u-boot) source tree cloned from DAVE's public git repository ** Linux kernel source tree cloned from DAVE's public git repository** Pre-installed AM335x EZSDK with setup scripts, makefiles, example applications, ...** Toolchain
Please note that DIVELK u-boot * select your username (ad es. username@myhost.com)* start the DVDK and kernel source trees are derived from login into the official trees released by TI; these trees have been customized to add support for virtual machine* start a shell session* enter the Diva SOM.ssh subdirectory into your home directory: <code>cd ~/.ssh/</code>* launch the following command: <br><pre>ssh-keygen -t rsa -C "username@myhost.com" -f username@myhost.com</pre>* this command creates the files <code>~/.ssh/username@myhost.com</code> ('''private key''') and <code>~/.ssh/username@myhost.com.pub</code> ('''public key''')* edit your <code>~/.ssh/config</code> adding the following lines:
For further information on EZSDK, please refer to [http://processors<pre>Host git.dave.wikieu User git Hostname git.tidave.comeu PreferredAuthentications publickey IdentityFile ~/index.phpssh/Sitara_SDK_5.06.00_Release_Notes Sitara SDK release notes]username@myhost.com</pre>
Please send the public key file to one of the following email support addresses (depending on which SOM is included in your kit version) * [mailto:support-diva@dave.eu support-diva@dave.eu] with the request for the creation of a new public git account associated to your username. The support team will enable the account and send you a confirmation as soon as possible. == Release notes ==Synchronizing the repository ==== When the account is enabled, you can synchronize a source tree entering the repository directory and launching the <code>git fetch</code> command, like in the following example: <pre class="workstation-terminal">dvdk@dvdk-vm:~$ cd /home/dvdk/divelk/linux-am33x.git/dvdk@dvdk-vm:/home/dvdk/divelk/linux-am33x.git$ git fetch origin</pre> Please note that <code>git fetch</code> doesn't merge the commits on the current branch. To do that, you should run
* Release date: May 2013* Status: planned* EZSDK version: 5or replace the ''fetch-merge'' process with a single <code>git pull</code> command.0?Please note that the recommended method is the ''fetch-merge'' process.??.??* Supported carrier boardsFor further information on Git, please refer to [http: DivaEVB//git-Lite, Dacuscm.com/documentation Git Documentation].
=== Notes =Release notes ==
* First official releasePlease refer to [https://wiki.dave.eu/index.php/Diva_Embedded_Linux_Kit_(DIVELK)#Release_notes this page] for DIVELK Release Notes
= Developing environment =
[[File:Development env.png]]
The typical developing environment for an Embedded Linux system is composed of a host machine and a target machine. The host is used by the developer to (cross-)compile the code that is to run on the target. In our case the target is the Diva DIVA CPU module, while the host is assumed to be a PC running the Linux operating system, either in a physical installation or as a virtual machine. The bootloader running on the target can download the Linux kernel image through the network ([http://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol tftpTFTP]), as well as the u-boot binary images (useful when an update of the bootloader is required). Moreover, the Linux kernel running on the target is able to mount the root file system from different physical media, for example from a directory exported via [http://en.wikipedia.org/wiki/Network_File_System Network File System (NFS)] by the host. This strategy (kernel image and RFS retrieved from the network) saves time during the development phase, since no flash reprogramming or removable storage (SD, usb pen drives, external disks) is required to test new versions or updates of the software components.
== Software components ==
=== Kernel ===
Linux kernel for Sitara processors is maintained primarily by Texas Instruments, that constantly <strike>carries on a major effort to</strike> works in close cooperation with Linux community in order to push all the released drivers into mainstream kernel. Periodically TI releases the so-called Platform Support Product (PSP for short). PSP provides updated kernel sources.
Kernels released within DIVELK derive directly from PSP kernels.
For further information on Linux for TI processors, please refer to http://processors.wiki.ti.com/index.php/Category:Linux
==== Linux Device Tree ====
The Flattened Device Tree (FDT) is a data structure for describing the hardware in a system (for further information, please refer to http://elinux.org/Device_Tree). Device tree source code is stored into the arch/arm/boot/dts/ directory.
=== Target root file system ===
The Linux kernel running on the target needs to mount a root file system. Building a root file system from scratch is definitively a complex task because several well known directories must be created and populated with a lot of files that must follow some standard rules. Again we will use pre-packaged root file systems that make this task much easier.
=== Yocto ===
The Yocto Project, hosted by the Linux Foundation, provides open source, high-quality infrastructure and tools to help developers create their own custom Linux distributions for any hardware architecture and across multiple market segments. The Yocto Project is intended to simplify the work of the developers, providing a set of tools and components, including a highly configurable build system, that enables users to construct their own custom distributions, targeted for specific embedded devices. It is not, itself, a Linux distribution. Rather, it is capable of producing an image for a particular embedded device without dictating the composition of the Linux distribution actually built or the hardware architecture used. The software components for the DIVA platform can be built using Yocto and the source trees released with the DIVELK 2.0.0.
=== DVDK ===
Dave '''DAVE Embedded Systems''' Virtual Development Kit is a virtual machine, based on Oracle VirtualBox that allows developers to start using Dave's ''DAVE Embedded Systems'''' platform without wasting time in installing the development environment. The Virtual Machine comes with all the development tools and source code, pre-configured, and requires only a minimal setup by the end user (usually only to adapt network interface to the user environment).
DVDK can also be converted, easily, into a physical environment, for example to increase speed on slower machines.
Please refer to [http://wiki.dave.eu/index.php/Category:DVDK DVDK page on Dave '''DAVE Embedded Systems''' Developer's Wiki] for further information on DVDK. == DVDK installation == === DVDK features ===
* VirtualBox virtual machine (.OVA archive)* Based on Lubuntu 12.04 LTS (64-bit version)* Pre-installed VirtualBox Guest Additions* LXDE desktop environment* Boot disk with the distro and pre-configured basic Linux services:** TFTP: with base directory /srv/tftp/ (please refer to [[VirtualBox_Network_Configuration]])** NFS: configured through the /etc/exports file (please refer to [[VirtualBox_Network_Configuration]])* Secondary disk containing source code and tools:** Bootloader (u-boot) source tree cloned from DAVE Embedded Systems public git repository ** Linux kernel source tree cloned from DAVE Embedded Systems public git repository** External pre-built toolchain** Yocto bsp for DIVA* Pre-installed Yocto-based root file systems with setup scripts, makefiles, example applications, ...* Administrator account (dvdk) with autologin. Please note that the user account credentials are provided with the development kit (you can find them into the README file contained in the sw/dvdk folder of the kit distribution) == Quick start = DIVELK microSD Layout ===
=== DivaEVBThe microSD provided with DIVELK is used to store:* A bootable partition (mmcblk0p1, vfat) containing:** binary images (MLO, u-Lite ===boot and kernel images)** DIVELK documentation** DIVELK DVDK virtual machine image* DIVELK root file system partition (mmcblk0p2, ext3)
This section describes how DIVELK contains all the required software and documentation to quick start a DivaEVB-Lite system, provided that it is programmed according to DIVELK configurationdeveloping Linux application on the DIVA platform.
# connect === Importing the serial cable, provided with the board, to J6# connect this cable to PC COM port through a NULL-modem cable (not provided)# start your favourite terminal software on PC; communication parameters are:#* baud rate: 115200 Bps#* data bits: 8#* stop bits: 1#* parity: none# (optional) to connect the system to Ethernet LAN, please plug cable on connector J7# connect a 12Vcc power supply to J8Virtual Machine ===
Once power has been appliedDIVELK provides a virtual machine image as a .ova file, U-Boot bootloader will be executed and which is a virtual application exported in Open Virtualization Format (OVF). Please find below the following messages will be printed on serial console (please note that messages may vary instructions for different U-Boot releases)creating the Virtualbox virtual machine:
# Start the Oracle VM VirtualBox Manager <pre class=br><br>[[File: Screenshot-Oracle VM VirtualBox Manager.png|600px]]<br><br># Click on File and select "boardImport Virtual Application", then click on "Open Virtual Application": <br><br>[[File: import-ova-terminal"01.png|600px]]<br><br>U# Navigate your file system and select the .ova file provided with the DIVELK: <br><br>[[File: import-ova-Boot 201001b.06png|600px]]<br><br># Click "Next" and on the next window click on "Import" <br><br>[[File: import-dirty (May 29 2012 ova- 16:02:39) [nelk-0.9.0-minpng|600px]] <br><br>
TI8148=== Launching the Virtual Machine ===# Now that the virtual machine is ready, launch it by clicking on the start icon: <br><br>[[File:Divelk-GP rev 2dvdk-configuration.png|600px]]<br><br># VirtualBox will open three message windows like the following, you can click "Ok" to close them<br><br>[[File:VirtualBox Info.png]]<br><br># When the boot process is completed, you can login into the Ubuntu system with the credentials provided with the development kit (you can find them into the '''README''' file contained in the '''dvdk''' folder of the kit distribution)# Mount the sdk disk launching the sdk-mount.sh script contained into /home/dvdk directory as shown on the image below:<br><br>[[File:divelk-dvdk-sdk-mount.1png|600px]]<br><br>
ARM clk<pre>dvdk@dvdk:~$ sh sdk-mount.sh divelk[sudo] password for dvdk: 600MHzDDR clkdvdk@dvdk: 400MHz~$</pre>
DRAM: 512 MiB
Using default environment
Hit any key to stop autoboot: 0 8192 KiB AT45DB642D at 0:0 is now current device## Starting application at 0x81000000 ...==== Guest Additions Update ====
Once logged in, the system could suggest to update the [http://www.virtualbox.org/manual/ch04.html Virtualbox Guest Additions package]. You can follow the on-screen instructions to easily install the updated package.
TI8148# Check if your keyboard layout matches the Ubuntu keyboard settings. You can change the keyboard layout selecting System->Preferences-GP rev 2>Keyboard from the top panel menù.1# Configure the Virtual Machine network interface: [[VirtualBox_Network_Configuration]]# Start working with the development kit
ARM clk: 600MHzDDR clk: 400MHz== Working with DIVELK ==
I2C: readyDRAM: 512 MiBNAND: HW ECC Hamming Code selected1024 MiBMMC: OMAP SD/MMC: 0Net: Detected MACID:d4:94:a1:8e:68:24cpswHit any key to stop autoboot: 0 NAON#</pre>=== The build system ===
These messages are printed by U-BootA build system is a set of source trees, Makefiles, patches, configuration files, which has a serial console tools and scripts that allows basic interaction with makes it easy to generate all the components of a complete embedded Linux system.A build system, once properly set up, automates the configuration and cross-compilation processes, generating all the required targets (userspace packages (libraries, programs), the kernel, the bootloader and root filesystem images) depending on the configuration. Some well known build systems are the following:
At the end of its boot sequence, U-Boot prints <code style="board-terminal">DIVA#<* OpenEmbedded (http:/code> prompt and waits for user commands/wiki.openembedded.net/index.php/Main_Page)* Yocto (https://www.yoctoproject.org/)* Buildroot (http://buildroot.uclibc.org)
The default uTexas Instruments Arago distribution (http://arago-boot environment can be printed using the <code style="board-terminal">print<project.org/wiki/index.php/code> command:Main_Page) and therefore DIVELK 2.0.0 are based on Yocto.
<pre class="board-terminal">NAON#printbootcmd=run net_nfsbootdelay=3baudrateOverview of the installed components =115200autoload=yesverify=yesbootfile=naon/uImageramdisk_file=ramdisk.gzloadaddr=0x81000000spi_update_1st=sf probe 0:0; sf erase 0x0 0x20000; sf write ${loadaddr} 0x0 0x20000spi_update=sf probe 0:0; sf erase 0x20000 0x40000; sf write ${loadaddr} 0x20000 0x40000loadk=tftp ${loadaddr} ${bootfile}spi_updatek=sf probe 0:0; sf erase 0x80000 0x300000; sf write ${loadaddr} 0x80000 0x300000console=ttyO0addcons=setenv bootargs ${bootargs} console=${console},115200n8 earlyprintkaddmem=setenv bootargs ${bootargs} mem=${mem} vram=${vram} notifyk.vpssm3_sva=${notify_mem}addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gateway}:${netmask}:${hostname}:${ethdev}nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} panic=5net_nfs=run loadk nfsargs addip addcons addmem; bootm ${buf}nandargs=setenv bootargs root=/dev/mtdblock12 rw rootfstype=jffs2spi_nand=run nandargs addip addcons addmem; sf probe 0:0; sf read ${loadaddr} 0x80000 0x300000; bootm ${loadadd}mmcargs=setenv bootargs root=/dev/mmcblk0p1 rwspi_mmc=run mmcargs addip addcons addmem; sf probe 0:0; sf read ${loadaddr} 0x80000 0x300000; bootm ${loadaddr}ipaddr=192.168.0.77serverip=192.168.0.23netmask=255.255.255.0gateway=192.168.0.254hostname=naonrootpath=/home/shared/devel/dave/naon-DAA/sw/linux/sdk/rfs/nelkethdev=eth0mem=176Mvram=46Mnotify_mem=0xBF900000ethaddr=d4:94:a1:8e:68:24ethact=cpswspi_load_1st=tftp ${loadaddr} naon/u-boot.min.spiload=tftp ${loadaddr} naon/u-boot_new.binstdin=serialstdout=serialstderr=serial
Environment size: 1588Once the virtual machine is ready, the actual development kit can be found into the directory <code>/home/dvdk/65532 bytesdivelk</precode>: <br><br>[[File:Divelk-dvdk-divelk-content.png|600px]]<br><br>
== Build system ==The divelk directory contains the following subdirectories:
=== Introduction ===* yocto: the Yocto SDK installation directory (containing the cross-toolchain)* linux-am33x: the Linux source tree* u-boot-am33x: the U-Boot source tree* diva-bsp: the Yocto BSP for DIVA* rfs: DIVELK provides three root file systems:** diva-base: minimal root file system with basic packages (/home/dvdk/divelk/rfs/diva-base)** diva-matrix: full root file system with lots of packages and demo applications, useful during the development phase (/home/dvdk/divelk/rfs/diva-matrix)** diva-qt5: root file system with Qt5 libraries and examples (/home/dvdk/divelk/rfs/diva-qt5)* env.sh: a bash script containing the following lines:
A build system is a set of <pre>source trees, Makefiles, patches, configuration files, tools and scripts that makes it easy to generate all the components of a complete embedded Linux system~/divelk/yocto/sdk/diva-qt5/environment-setupexport LDFLAGS=-L${PKG_CONFIG_SYSROOT_DIR}/usr/lib/4. A build system, once properly set up, automates the configuration and cross7.3export CFLAGS=""export CPPFLAGS=""export CXXFLAGS=""export CPATH=""export ARCH=armexport CROSS_COMPILE=arm-compilation processes, generating all the required targets (userspace packages (libraries, programs), the kernel, the bootloader and root filesystem images) depending on the configuration. Some well known build systems are the following: linux-gnueabihf-</pre>
* Arago (httpUsing the following command, the environment shell variables required during the building procedure are set up://arago-project.org/wiki/index.php/Main_Page)* OpenEmbedded (http://wiki.openembedded.net/index.php/Main_Page)<pre>* Yocto (https:source ~/divelk/wwwenv.yoctoproject.org/)sh* Buildroot (http:<//buildroot.uclibc.org)pre>
=== Setting up the server environment ===
==== TFTP Server ====
One of the most useful features of a bootloader during development is the capability to download the Linux kernel from the network. This saves a lot of time because developer doesn't have to program the image in flash every time he/she modifies it. U-Boot implements the TFTP protocol (see the <code>tftp </code> command), so the host system must be configured to enable the TFTP service. Installation and configuration of a tftp TFTP server depends on the host Linux distribution. The default DVDK <code>tftp</code> installation has <code>/srv/tftp</code> as work directory. A subdirectory dedicated to the image files associated to the DIVELK (/srv/tftp/divelk) is available, but developers can add their custom subdirectories when required.
==== NFS Server ====
One of the most important components of a Linux system is the root file system. A good development root file system provides the developer with all the useful tools that can help him/her developers on his/her their work. Such a root file system can become very big in size, so it's hard to store it in flash memory. User could split the file system in different parts, mounting them from different media (flash, network, usb...). But the most convenient thing is to mount the whole root file system from the network, allowing the host system and the target to share the same files. In such a this way, the developer developers can quickly modify the root file system, even “on the fly” (meaning that the file system can be modified while the system is running).The most common way to setup a system like the one described is through NFS(Network File System). As for tftpTFTP, installation and configuration depends on the host linux Linux distribution. The default DVDK NFS installation is configured for sharing <code>/home/dvdk/divelk</code> directory and all the subdirectories. We recommend reading the [[VirtualBox_Network_Configuration]] page for additional details on the DVDK networking configuration and on how to enable NFS.
==== Pre-built toolchain ====
To start developing software for the Diva DIVA platform, users need a proper toolchain, which can be pre-built or built-from-scratch. Building a toolchain from scratch is not a trivial task (though using a recent build system is easier than in the past), so the recommended approach consists in using a pre-built toolchain, like the Sourcery G++ Lite 2009q1-203 for ARM GNU/Linux. To install it, user should simply download the installer from the http://www.codesourcery.com/sgpp/lite/arm/portal/release858 web page and run it.
At DIVELK provides the time of this writing several tool chains – free and commercial – are availableLinaro gnueabihf-4.7-2013. The Codesourcery 03 toolchain (Sourcery G++ Lite 2009q1-203 for ARM GNU/Linux (http://wwwGCC version is 4.codesourcery7.com/sgpp/lite/arm/portal/release858)3) will be the default choice and all the compiling examples will be based on it.
==== Pre-built root file system ====
For more information on the Linux filesystem, please refer to [http://www.freeos.com/articles/3102/ The Linux filesystem explained]
DIVELK provides a pre-built root file systemsystems, that can be used during the evaluation/development phase, since it provides a sufficient set of they contains the software packages for working with the Diva DIVA platform. However, there are other pre-built file systems that can be used:
* Arago (httpDIVELK root file systems are built with the Yocto build system and are stored into the following directories://arago-project.org/files/releases/)* Angstrom/Narcissus (http://www.angstrom-distribution.org/narcissus/)* Beaglebone (http://www.angstrom-distribution.org/demo/beaglebone/)
== Working with DIVELK ==* /home/dvdk/divelk/rfs/diva-base* /home/dvdk/divelk/rfs/diva-matrix* /home/dvdk/divelk/rfs/diva-qt5
=== Creating Building the Virtual Machine =software components with Yocto ==The build process creates an entire Linux distribution from source. The build process can be summarized as follows:* Make sure that all the prerequisites are met* Initialize the build environment, as described in the following sections* Optionally ensure the conf/local.conf configuration file, which is found in the Build Directory, is set up how you want it. This file defines many aspects of the build environment including the target machine architecture through the MACHINE variable, the development machine's processor use through the BB_NUMBER_THREADS and PARALLEL_MAKE variables, and a centralized tarball download directory through the DL_DIR variable.* Build the image using the bitbake command. If you want information on BitBake, see the BitBake User Manual.N.B. Since the DIVELK virtual machine is already configured to match all the requirements for using the Yocto build system, developers who wants to quickly build a Yocto image can directly go to section [[Software_Manual_(Diva)#Building the Yocto image]].
DIVELK provides a virtual machine image as a .ova file, which is a virtual application exported in Open Virtualization Format (OVF). Please find below the instructions for creating the Virtualbox virtual machine:# Start the Oracle VM VirtualBox Manager <br><br>[[File: Screenshot-Oracle VM VirtualBox Manager.png|600px]]<br><br># Click on File and select "Import Virtual Application", then click on "Open Virtual Application": <br><br>[[File: import-ova-01.png|600px]]<br><br># Navigate your file system and select the .ova file provided with the DIVELK: <br><br>[[File: import-ova-01b.png|600px]]<br><br># Click "Next" and on the next window click on "Import" <br><br>[[File: import-ova-02.png|600px]]<br><br>=== Prerequisites ===
=== Launching the VM ===# Now The following prerequisites are required and only need to be done once. Please note that the DIVELK virtual machine is ready, launch it by clicking already configured to match all the requirements for using the Yocto build system.Some generic development tools are required on the start iconhost Linux machine: <br><br>[[File:Divelk* git* curl* build-dvdk-configuration.png|600px]]<br><br>essential* diffstat* texinfo* gawk# VirtualBox will open three message windows like the following, you can click "Ok" to close them<br><br>[[File:VirtualBox Info.png]]<br><br>* chrpath# When * ia32-libs (if the boot process host machine is completed, you can login into the Ubuntu system with the credentials provided with the development kit (you can find them into the '''README''' file contained in the '''dvdk''' folder of the kit distributionrunning a 64-bit OS)# Mount the sdk disk launching the sdk-mount.sh script contained into /home/dvdk directory as shown on the image below:<br><br>[[File:divelk-dvdk* python-sdk-mount.png|600px]]<br><br>m2crypto
==== Guest Additions Update ====These packages can be installed with the following command:<pre>sudo apt-get install git curl build-essential diffstat texinfo gawk chrpath ia32-libs python-m2crypto</pre>
Once logged in, It is also recommended to switch the system could suggest shell from Ubuntu's standard dash to update the [httpmore universal bash:<pre>$ sudo dpkg-reconfigure dash<//www.virtualbox.org/manual/ch04.html Virtualbox Guest Additions package]. You can follow the on-screen instructions to easily install the updated package.pre>
==== Further steps =Initializing the build environment ===
# Check if your keyboard layout matches In the Ubuntu keyboard settingsDIVELK, we have simplified the Yocto initialization phase, relying on the repo tool and on a DIVA bsp git repository, so that the initialization can be completed with a few commands as reported below:<pre>$ curl http://commondatastorage.googleapis. You can change the keyboard layout selecting Systemcom/git-repo-downloads/repo >Preferencesrepo$ chmod +x repo$ ./repo init -u git@git.dave.eu:dave/diva/diva->Keyboard from the top panel menùbsp.git -b diva# Configure the Virtual Machine network interface: [[VirtualBox_Network_Configuration]]$ ./repo sync# Start working with the development kit</pre>
=== DIVELK HowTos Building the Yocto image ===
Once Please note that even building the basic root file system requires a few hours to complete the process on a mid-hi range desktop PC (4-6 cores, 8-12 GiB RAM), also depending on the Internet connection speed (all source are fetched from the network). Nearly 20GiB of disk space is required for the build. Moreover, building inside the DVDK adds some overhead, since the performances of a virtual machine are reduced if compared to the physical hardware. Thus, it's recommended to check the hardware capabilities of the host system and, when building with Yocto is readyrequired, developers should consider the actual development kit can be found into the directory <code>/home/dvdk/delk</code>: <br><br>[[Filefollowing options:Divelk-dvdk-divelk-content.png|600px]]<br><br>
The delk directory contains * migrating the following subdirectoriesbuild system to a physical machine* assuming that the host system has the required resources, extending the hardware capabilities of the default DVDK (eg:adding more cores and disk space)
* arago-2012.10: Once completed the cross-toolchain. GNU Compiler Collection (GCC) version is 4.5.3* linux-am33x: the Linux source tree* u-boot-am33x: initialization phase, developers can launch the U-Boot source tree* rfs: DIVELK provides two root file systems:** arago-base: minimal root file system Yocto image build process with basic packages** tisdk: full root file system with lots of packages, useful during the development phase* env.sh: a bash script containing the following linescommands:
By issuing the following command, some environment shell variables required during the building procedure Please note that three different images are set upavailable: * matrix-rootfs-image (includes the matrix gui application from Texas Instruments)* qt5-rootfs-image (root file system with Qt 5.1.1 libraries and examples)* base-rootfs-image (minimal root file system)
<pre>source ~The resulting files (kernel, device tree and u-boot binaries, plus root file system in a .tar.gz archive) will then be available inside the build/tmp/deploy/images/diva/envdirectory.sh</pre>
== 4.4 Building the software components outside Yocto ==
=== Build a custom application ===
=== Build/configure Linux kernel ===
Enter the Linux sources directory (''~/divadivelk/linux-am33x.git'') and run the following commands:
<pre>
dvdk@dvdk-vm:~/divadivelk/linux-am33x.git$ make diva_defconfigdvdk@dvdk-vm:~/divadivelk/linux-am33x.git$ make uImageam335x-divelk.dtb
</pre>
The former command select selects the default Diva DIVA configuration, while the latter build builds the kernel binary image with the required u-boot headerand the dtb binary.
Default linux kernel configuration can be changed by using the standard ''menuconfig'', ''xconfig'', ''gconfig'' make target.
Subsequent builds just require ''uImage'' make target to update the binary image.
Once the build process is complete, the kernel binary image is stored into the <code>arch/arm/boot/uImage</code> file, while the dtb is stored into the <code>linux-am33x/arch/arm/boot/dts/am335x-divelk.dtb</code> file. These files can be copied to the <code>/srv/tftp/divelk/</code> directory with the following commands:
Enter the Linux U-Boot sources directory (''~/divadivelk/u-boot-am33x.git'') and run the following commands:
<pre>
dvdk@dvdk-vm:~/divadivelk/u-boot-am33x.git$ make diva_spibootdvdk@dvdk-vm:~/divadivelk/u-boot-am33x.git$ make
</pre>
The former command select selects the default Diva DIVA configuration which is used to boot from SPI NOR Flash, while the latter build builds the u-boot binary images.
Subsequent builds just require ''make'' command, without targets, to update the binary images.
* u-boot.img (which is the main u-boot image, plus an additional header needed by SPL)
Once the build process is complete, the binary images can be copied to the <code>/srv/tftp/divelk/</code> directory with the following command: <pre>dvdk@dvdk-vm:~/divelk/u-boot-am33x$ sudo cp MLO MLO.byteswap u-boot.img /srv/tftp/divelk/</pre> === Build the graphics components a custom application === Some users may prefer to cross-compile their applications outside of the Yocto flow. It maybe specifically useful and easier for new projects in their prototyping and proof-of-concept stages or for any smaller applications in general. This way users don't have to worry about creating Yocto "recipes" for their applications and becoming familiar with the entire Yocto build system.In order to cross-compile an application, written in C/C++, the cross-toolchain provided with the DIVELK is required.Assuming that the environment variables have been configured with the <code>env.sh</code> script, developers can write a simple "Hello world" application, called for example hello.c:<pre>#include <stdio.h>int main(){ printf("Hello world\n"); return 0;}</pre>To cross-compile it:<pre>$ arm-none-linux-gnueabi-gcc -o hello hello.c</pre>Copy the executable file to the root file system, and execute it from the DIVA system:<pre>root@diva:~#./helloHello world</pre>
== Boot configurations ==
=== Flash_self ===Please refer to the [[Booting_Linux_Kernel]] article.
This configuration is conceived for standalone operation. Both the kernel and the root file system are retrieved from Flash (see section 2.4). Once U-Boot has transferred the control to Linux, its job is completed. From now on Linux kernel has the control of the hardware. At the end of Linux boot process, the user can interact with the system with the typical Unix-like shell through the same serial connection used for U-Boot. To run this configuration just issue the command run flash_self.== Memory Map ==
Ethernet interface will be enabled by default. To disable it, just remove addip variable from the <pre>flash_self variable.DRAM bank = 0x00000000-> start = 0x80000000-> size = 0x20000000</pre>
<pre>DIVA# nand infoDevice 0: nand0, sector size 128 KiB Page size 2048 b OOB size 64 b Erase size 131072 b</pre> === Net_nfs Default flash NOR SPI partitions ===
This configuration is very helpful during the software development (both for kernel and applications). The kernel image is downloaded via TFTP while the root file system is remotely mounted via NFS from the host. It is assumed that the development host:
* is connected with DivaEVB through an Ethernet LAN
* exports the directory containing the root file system for the Diva system through the NFS server
* runs a TFTP server.
* has 192.168.0.23 as IP address (netmask 255.255.255.0).
If the host system does not match this configuration, it's required to change the necessary u-boot variables and store them permanently with the <code>saveenv</code> command. For example, let's say the server has different IP address, eg 192.168.0.72:
If you wish Diva system to automatically boot with one of the above configurations, just set up and store the bootcmd variable. For example, for the flash_self configuration, enter the following commands:
<pre>
=dvdk@dvdk-vm:~/divelk/rfs/tisdk/usr/lib$ ll libQ*........lrwxrwxrwx 1 root root 19 Dec 17 2012 libQtCoreE.so.4 -> libQtCoreE.so.4.8.0*lrwxrwxrwx 1 root root 19 Dec 17 2012 libQtCoreE.so.4.8 -> libQtCoreE.so.4.8.0*-rwxr-xr-x 1 root root 3233396 Dec 16 2012 libQtCoreE.so.4.8.0*lrwxrwxrwx 1 root root 19 Dec 17 2012 libQtDBusE.so.4 -> libQtDBusE.so.4.8.0*lrwxrwxrwx 1 root root 19 Dec 17 2012 libQtDBusE.so.4.8 -> libQtDBusE.so.4.8.0*-rwxr-xr-x 1 root root 497236 Dec 16 2012 libQtDBusE.so.4.8.0*lrwxrwxrwx 1 root root 26 Dec 17 2012 libQtDeclarativeE.so.4 -> libQtDeclarativeE.so.4.8.0*lrwxrwxrwx 1 root root 26 Dec 17 2012 libQtDeclarativeE.so.4.8 -> libQtDeclarativeE.so.4.8.0*-rwxr-xr-x 1 root root 3850720 Dec 16 2012 libQtDeclarativeE.so.4.8.0*lrwxrwxrwx 1 root root 33 Dec 17 2012 libQtDesignerComponentsE.so.4 -> setenv setenv bootcmd $(flash_self)libQtDesignerComponentsE.so.4.8.0*=lrwxrwxrwx 1 root root 33 Dec 17 2012 libQtDesignerComponentsE.so.4.8 -> setenv serverip 192libQtDesignerComponentsE.168so.4.8.0*-rwxr-xr-x 1 root root 3012324 Dec 16 2012 libQtDesignerComponentsE.72 so.4.8.0*=lrwxrwxrwx 1 root root 23 Dec 17 2012 libQtDesignerE.so.4 -> saveenv libQtDesignerE.so.4.8.0*Saving Environment to NANDlrwxrwxrwx 1 root root 23 Dec 17 2012 libQtDesignerE.so.4. 8 -> libQtDesignerE.so.4.8.0*Erasing Nand-rwxr-xr-x 1 root root 5246140 Dec 16 2012 libQtDesignerE.so.4.8. 0*Erasing at 0x0 lrwxrwxrwx 1 root root 18 Dec 17 2012 libQtGuiE.so.4 -> libQtGuiE.so.4.8.0*lrwxrwxrwx 1 root root 18 Dec 17 2012 libQtGuiE.so.4.8 - 2490368% complete> libQtGuiE.so.4.8.0*-rwxr-xr-x 1 root root 9852452 Dec 16 2012 libQtGuiE.so.4.8. 0*Writing to Nandlrwxrwxrwx 1 root root 19 Dec 17 2012 libQtHelpE.so.4 -> libQtHelpE.so. done 4.8.0*=lrwxrwxrwx 1 root root 19 Dec 17 2012 libQtHelpE.so.4.8 ->libQtHelpE.so.4.8.0*-rwxr-xr-x 1 root root 523292 Dec 16 2012 libQtHelpE.so.4.8.0*.........dvdk@dvdk-vm:~/divelk/rfs/tisdk/usr/lib
</pre>
Next time the system boots, U-Boot will wait for three seconds (to stop the wait just press any key in the console) before executing the commands stored in the bootcmd variable. This time can be changed by setting the bootdelay variable. Generally speaking the whole boot process can be further and heavily customized. For more details please refer to the doc/README.autoboot file in the U-Boot sources.
The root file system also provides a lot of pre-built demos and examples (with the related source code and project files), contained in the following directories: * /home/dvdk/divelk/rfs/tisdk/usr/bin/qtopia/demos* /home/dvdk/divelk/rfs/tisdk/usr/bin/qtopia/examples The Matrix-Gui application (http://processors.wiki.ti.com/index.php/Matrix_Users_Guide) that launched automatically after DIVELK startup is based on QT and can directly show some demos (simply touching the QT icon). Moreover, additional examples can be launched, for example the "calculator" QML demo: <pre># stop the Matrix Gui application, in case it is running/etc/init.d/matrix-gui-2.0 stop# enter the demo application directorycd /usr/bin/qtopia/demos/declarative/calculator# launch the application./calculator -qws</pre> === Building a QT application === The following page describes how to build a simple application: http://processors.wiki.ti.com/index.php/Using_Qt_4.7#Creating_a_.22Hello_World.22_QtQuick_application === Opening/importing an example project from the DIVELK root file system === Qt Creator (http://qt-project.org/wiki/Category:Tools::QtCreator) can open/import the example projects provided with the DIVELK Updates root file system. The developer can explore the project to read and analyse the source code and configuration file and learn how the Qt libraries work: [[File:Qt-creator-import-example-from-rfs.png|800px|frameless|border]] === Resources === For additional information, please refer to the following pages: