VAR-SOM-AM33 Yocto GS
About this Manual
This document describes how to install Variscite's Yocto release for the VAR-SOM-AM33.
The Yocto distribution provides a fundamental software platform for development, deployment and execution on VAR-SOM-AM33. It abstracts the functionality provided by the hardware.
In this context, the document contains instructions to:
- Install the release on a development machine.
- Build the sources included in this release.
- Instaling the binaries on the VAR-SOM-AM33.
- Booting the VAR-SOM-AM33.
Installation
Prerequisites
Before starting the installation, make sure below system requirements are met:
- Host machine running a Ubuntu 12.04 64 LTS.
- VAR-SOM-AM33 Evaluation Kit + VAR-SOM-AM33 Yocto 1.6 installation sources and binaries (from FTP). Please refer to support@variscite.com for obtaining FTP credentials.
The Linux host is used for the following:
- Recompiling U-Boot / kernel.
- Hosting the NFS server to boot the EVM with NFS as root filesystem.
Either of Windows or Linux host can be used for:
- Hosting the TFTP server required for downloading the kernel and file-system images from U-Boot using Ethernet.
- Running a serial console terminal application
Building the Yocto 1.6 distribution via Bitbake will produce a complete set of downloaded source code + binaries for each component:
- Yocto build environment
- Downloaded Linux kernel source code + build kernel binaries (DTB and zImage) for VAR-SOM-AM33.
- Downloaded U-Boot source code + build U-boot binaries (MLO and U-boot) for VAR-SOM-AM33.
- Linux root file-system.
Install the Arago toolchain
$ wget --no-check-certificate https://launchpad.net/linaro-toolchain-binaries/trunk/2013.03/+download/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2 $ sudo tar -jxvf gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2 -C /opt
Install development tools
$ sudo apt-get install git build-essential diffstat texinfo gawk chrpath
Install 32-bit support libraries
If you are using a 64-bit Linux, then you'd also need to install 32-bit support libraries, needed by the pre-built Linaro toolchain and other binary tools, as follows:
$ sudo apt-get install ia32-libs
Download the Yocto 1.6 Distribution
To quickly start making your own builds using meta-ti BSP layer and meta-arago Distribution layer, you can follow this short Quick Start section by entering below commands. For more expanded guide with each step detailed and sample output of the entered commands shown, please see the next Detailed Setup section.
$ mkdir ~/yocto_varsomam33 $ cd ~/yocto_varsomam33 $ git clone git://arago-project.org/git/projects/oe-layersetup.git tisdk $ cd tisdk $ ./oe-layertool-setup.sh -f configs/arago-dylan-config.txt $ cd build $ . conf/setenv
Setting up the Toolchain
$ export PATH=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin:$PATH
Installing VAR-SOM-AM33 Support
Download the VAR-SOM-AM33 Yocto 1.6 installation from Variscite FTP:
- VAR-SOM-AM33/Software/Linux/YOCTO_R1/VAR-SOM-AM33-Yocto_1_6_installation_v1_0.tar.gz
Extract Variscite Yocto installation as follows:
$ mkdir ~/yocto_varsomam33/yocto_varsomam33_installation $ tar -xvzf VAR-SOM-AM33-Yocto_1_6_installation_v1_0.tar.gz -C ~/yocto_varsomam33/yocto_varsomam33_installation
Once the Arago Yocto distribution is installed on the Host Ubuntu machine, the developer should apply the Variscite installation, as follows:
$ cd ~/yocto_varsomam33/tisdk $ ~/yocto_varsomam33/yocto_varsomam33_installation/variscite_utils/install_variscite_arago_var-som-am33.sh ~/yocto_varsomam33/yocto_varsomam33_installation/ ~/yocto_varsomam33/tisdk
At this point, Variscite Yocto 1.6 has been installed over the Yocto 1.6 distribution and can be built.
Building the VAR-SOM-AM33 Yocto image
First, change directory to the build directory of Yocto:
$ cd ~/yocto_varsomam33/tisdk/build
The developer can build either the core-image-sato-var image or the tisdk-rootfs-image image, as follows:
$ MACHINE=varsomam33 bitbake core-image-sato-var
or
$ MACHINE=varsomam33 bitbake tisdk-rootfs-image
After the image was built, all images will be located in: ~/yocto_varsomam33/tisdk/build/arago-tmp-external-linaro-toolchain/deploy/images/ - Specifically:
- MLO image
- u-boot.img image
- zImage
- zImage-var-som-am33.dtb
- Compressed rootfs image: core-image-sato-var-varsomam33.tar.bz2 or tisdk-rootfs-image-varsomam33.tar.bz2 (Depends on the build target)
Extract the rootfs as follows:
$ sudo mkdir ~/yocto_varsomam33/rootfs $ sudo tar xvf ./arago-tmp-external-linaro-toolchain/deploy/images/core-image-sato-var-varsomam33.tar.bz2 -C ~/yocto_varsomam33/rootfs
If the rootfs directory already exists - Please make sure to erase all its content before extracting a new rootfs image into it:
$ sudo rm -rf ~/yocto_varsomam33/rootfs/*
This creates a rootfs directory for the Yocto / VAR-SOM-AM33 build.
Linux Root File-System
To boot-up Linux, a target file-system is needed. Two Arago based file-systems can be built on the Yocto distribution for VAR-SOM-AM33.
- Base core-image-sato-var filesystem (~170MB) - SATO build rootfs image - core-image-sato-var-varsomam33.tar.bz2
- Demo filesystem (~250MB) - This file system is created by taking the base file system and adding all the additional SDK components such as 3D graphics, matrix, profiling tools, etc... - tisdk-rootfs-image-varsomam33.tar.bz2
Further explanation about customizing these file-systems can be found here.
Create a bootable SD-Card
In general you may Follow http://processors.wiki.ti.com/index.php/Sitara_Linux_SDK_create_SD_card_script
Variscite has modified create-sdcard.sh script with all required options already selected.
To create a bootable SD-Card image, which includes a UBIFS file-system based recovery image - Please do as follows:
- Insert a 4GB SD-Card to host computer
- Run dmesg command to identify which /dev/sdX was created
- To generate a UBIFS rootfs image that fits into 256MB flash (image size == 220MB) - Run script:
$ cd ~/yocto_varsomam33/variscite_utils $ sudo ./create-ubi.sh ~/yocto_varsomam33/rootfs/
- To generate the SD-Card - Run script (and choose the correct /dev/sdX of the 4GB SD-Card inserted):
$ cd ~/varsomam33/variscite_utils $ sudo ./create-sdcard.sh /home/user/varsomam33/arago_yocto_am335x/tisdk /home/user/varsomam33/rootfs/
The above procedure will result in a bootable SD-Card including MLO, U-boot, Kernel and file system + Linux recovery image to flash the NAND based on UBI file-system. To boot the bootable SD-Card, follow the steps below:
- Insert the SD card into the SD/MMC slot of the custom board
- Press and hold the boot select switch while powering ON the board
- Login as root (no password)
Boot
The Kernel and root the file-system can be booted either from NAND, SD-Card or can be retrieved via ethernet to RAM using TFTP.
Nand Flash root file-system is UBIFS based which is the most recommended filesystem for nand flashes.
Following sections describe various kernel boot options possible.
Boot from MMC/SD
For creating a bootable SD , follow the below instruction on creating a resude SD. http://www.variwiki.com/index.php?title=VAR-SOM-AM33_Arago_GS#NAND_Recovery
To boot the Linux, type:
U-Boot# run mmc_boot
Boot from NAND
By default the VAR-SOM-AM33 boots from NAND.
The SPL, U-Boot, kernel uImage and UBIFS filesystem are flashed on the NAND flash at production.
Flash Images to NAND
Replacing Nand Flash images can be done from either Linux user space or U-Boot.
From U-Boot
U-Boot # mmc rescan U-Boot # nand erase 0x0 0x280000 U-Boot # mmc rescan U-Boot # fatload mmc ${mmc_dev} ${loadaddr} MLO U-Boot # nand write ${loadaddr} 0x0 0x20000 U-Boot # nand write ${loadaddr} 0x20000 0x20000 U-Boot # nand write ${loadaddr} 0x40000 0x20000 U-Boot # fatload mmc ${mmc_dev} ${loadaddr} u-boot.img U-Boot # nand write ${loadaddr} 0x80000 0x1c0000 U-Boot # fatload mmc ${mmc_dev} ${loadaddr} uImage U-Boot # nand erase 0x280000 0x500000 U-Boot # nand write ${loadaddr} 0x280000 0x500000
From Linux shell
<< Install SPL >> $ flash_erase /dev/mtd0 0 0 $ flash_erase /dev/mtd1 0 0 $ flash_erase /dev/mtd2 0 0 $ flash_erase /dev/mtd3 0 0 $ nandwrite -p /dev/mtd0 <MLO file> $ nandwrite -p /dev/mtd1 <MLO file> $ nandwrite -p /dev/mtd2 <MLO file> $ nandwrite -p /dev/mtd3 <MLO file> << Install U-Boot >> $ flash_erase /dev/mtd4 0 0 $ flash_erase /dev/mtd5 0 0 $ nandwrite -p /dev/mtd4 <u-boot.img file> << Install Kernel >> $ flash_erase /dev/mtd6 0 0 $ nandwrite -p /dev/mtd6 <uImage file>
Boot over Network (Ethernet)
When setting a MAC address please ensure that the LS-bit of the 1st byte is not 1 i.e. when setting the MAC address: y in xy:ab:cd:ef:gh:jk has to be an even number.
For more info this refer to the wiki page http://en.wikipedia.org/wiki/MAC_address.
When kernel image and root file-system are fetched from a TFTP/NFS server:
- Ensure that the SOM is connected to network with DHCP and TFTP server set up
- If the TFTP server supports negotiation between client and server, Disable it
- Copy 'uImage' kernel image to TFTP server's root directory.
- Set 'ethaddr' U-Boot environment variable with proper ethernet address in format 'xx:xx:xx:xx:xx:xx' (replace 'xx' with proper hexadecimal values)
- Setup NFS server and export one of the provided pre-build root file-system
- Execute following commands at U-Boot prompt. Assuming kernel image name as 'uImage':
U-Boot # setenv fdtfile '<var-som-am33.dtb filename on TFTP>' U-Boot # setenv bootfile <zImage filename on TFTP> U-Boot # setenv netargs 'setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp vram=50M' U-Boot # setenv serverip <Server IP address> U-Boot # setenv rootpath '<Path of the exported root file-system on the NFS server>' U-Boot # run netboot
Note, that the roopath parameter should be the directory of the extracted rootfs image, as explained above in section Building the VAR-SOM-AM33 Yocto image extracting the image to '/home/user/yocto_varsomam33/rootfs/'.
NAND Recovery
As an easy and fast way to recover the VAR-SOM-AM33 NAND flash, Variscite provides a recovery SD card image that can be used to install the pre-built Linux and Android systems.
This SD card image includes a script (nand-recovery.sh) that installs all the boot images and root file-system.
Preparing rescue SD-Card
- Plug your SD card to your Linux machine, run dmesg and see what device is added (i.e. /dev/sdX)
- xz -d am33-som-nand-recovery-sd_Yocto_1_6_v1.img.xz
- dd if=am33-som-nand-recovery-sd_Yocto_1_6_v1.img of=/dev/sdX bs=128k
Recover Nand Flash
- Insert the SD-card into the SD/MMC slot of the custom board
- Press and hold the boot select switch while powering ON the board
- Login as root (no password)
- From Linux command line, type: "/Linux/nand-recovery.sh". (This will install Linux on the NAND)
- Unplug the SD card and reboot
NAND recovery script usage:
usage: /sbin/nand-recovery.sh options This script install Linux/Android binaries in VAR-SOM-AM33 NAND. OPTIONS: -h Show this message -o <Linux|Android> OS type (defualt: Linux).
U-Boot
In AM335x the ROM code serves as the 1st stage bootloader. The 2nd and the 3rd stage bootloaders are based on U-Boot.
The binary for the 2nd stage is referred to as SPL and the binary for the 3rd stage as simply U-Boot. SPL is a non-interactive loader and is a specially built version of U-Boot. It is built concurrently when building U-Boot.
The ROM code can load the SPL image from the NAND or SDMMC devices.
Building U-Boot out-of-tree
Downloading source code
- U-Boot sources can be downloaded from git://github.com/varigit/u-boot-VAR-SOM-AM33-SDK7.git.
- U-boot is built automatically by bitbake.
- This directory already includes Variscite's patches (already applied) to support the VAR-SOM-AM33.
- Based on the open source repositorie: https://git.ti.com/ti-u-boot/ti-u-boot/trees/ti-u-boot-2013.01.01-amsdk-06.00.00.00, commit: 540aa6fbb0c9274bda598f7e8819ed28259cad6b.
First, clone the git repositories to a local directory, as follows:
$ mkdir ~/varsomam33 $ cd ~/varsomam33 $ git clone git://github.com/varigit/u-boot-VAR-SOM-AM33-SDK7.git
Setup Toolchain path
$ export PATH=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin:$PATH
Building U-boot
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- var-som-am33
U-Boot Environment Settings
The VAR-SOM-AM33 U-Boot has default environmant settings that allows boot from NAND, SD/MMC card and Ethernet.
By default the boot device is NAND, for more information about boot options go to Boot section.