VAR-SOM-AM33 Linux SDK 7
About this Manual
This document describes how to install Variscite's Linux Support Package (LSP) for the VAR-SOM-AM33 based on TI's SDK 7.0
This LSP 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 developmant 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 of the package, make sure below system requirements are met:
- Host machine running a version of Windows OS such as Windows XP / 7 or a Linux such as Ubuntu.
- VAR-SOM-AM33 Evaluation Kit + sources and binaries. 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
Install LSP packages
Variscite's LSP is based on TI's SDK 7.0 release. Follow TI's SDK installation guide step by step. After completing the initial SDK installation, patch the kernel and u-boot with supplied patches from FTP.
- Download kernel and u-boot patches from ftp://ftp.variscite.com/VAR-SOM-AM33/Software/Linux/SDK_7_0_v30_beta
- Download Sitara AM335x SDK 7.0 http://software-dl.ti.com/sitara_linux/esd/AM335xSDK/latest/index_FDS.html
- Follow TI's instructions on how to install SDK: : http://processors.wiki.ti.com/index.php/Sitara_SDK_Installer
- After installation is complete, patch kernel and u-boot:
Patch kernel:
cd ~/ti-sdk-am335x-evm-07.00.00.00/board-support/ rm linux-3.12.10-ti2013.12.01 -rf git clone git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git mv ti-linux-kernel linux-3.12.10-ti2013.12.01 cd linux-3.12.10-ti2013.12.01 git checkout -b var-som-am33 2325bb5680986b6914d8fd0b5d0bdc20081fe8d3 git apply <path/to/patches>/SDK_7_0_kernel_0001.patch
Patch uboot:
cd ~/ti-sdk-am335x-evm-07.00.00.00/board-support/u-boot-2013.10-ti2013.12.01 git apply <path/to/patches>SDK_7_0_u-boot_0001.patch
- Modify ~/ti-sdk-am335x-evm-07.00.00.00/Rules.make
Original:
#platform PLATFORM=am335x-evb #Architecture ARCH=armv7-a
Modified:
#platform PLATFORM=am335x-som #Architecture ARCH=armv7-a
- Modify ~/ti-sdk-am335x-evm-07.00.00.00/Makefile
Original:
linux-dtbs: @echo ===================================== @echo Building the Linux Kernel DTBs @echo ===================================== $(MAKE) -C $(LINUXKERNEL_INSTALL_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) tisdk_$(PLATFORM)_defconfig $(MAKE) -j $(MAKE_JOBS) -C $(LINUXKERNEL_INSTALL_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) am335x-evm.dtb am335x-evmsk.dtb am335x-bone.dtb am335x-boneblack.dtb
Modified:
linux-dtbs: @echo ===================================== @echo Building the Linux Kernel DTBs @echo ===================================== $(MAKE) -C $(LINUXKERNEL_INSTALL_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) tisdk_$(PLATFORM)_defconfig $(MAKE) -j $(MAKE_JOBS) -C $(LINUXKERNEL_INSTALL_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) am335x-evm.dtb am335x-evmsk.dtb am335x-bone.dtb am335x-boneblack.dtb am335x-som.dtb
Compile MLO and U-BOOT
cd ~/ti-sdk-am335x-evm-07.00.00.00 make u-boot
Resulted MLO and u-boot.img will be created at ~/ti-sdk-am335x-evm-07.00.00.00/board-support/u-boot-2013.10-ti2013.12.01/
Compile Linux kernel
make linux
Installing kernel modules
- Extract pre-built file-system tarball to /home/user/ti-sdk-am335x-evm-07.00.00.00/targetNFS/
./setup.sh
- Install kernel modules to file-system folder (/home/user/ti-sdk-am335x-evm-07.00.00.00/targetNFS) :
make linux_install
Installing wireless firmware binaries
Download firmware package : /VAR-SOM-AM33/Software/Linux/SDK_7_0_v30_beta/firmware.tar.gz
extract content to target file-system:
tar xvf firmware.tar.gz -C ~/ti-sdk-am335x-evm-07.00.00.00/targetNFS/lib/
Create a bootable SD-Card
Follow http://processors.wiki.ti.com/index.php/Sitara_Linux_SDK_create_SD_card_script
The above procedure will result in a bootable SD-Card including MLO, U-boot, Kernel and file system. To boot the bootable SD-Card, follow the below steps :
- 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)
UBIFS
UBIFS is used for Linux root file-system on the VAR-SOM-AM33 NAND Flash.
Compilling UBIFS Tools
The MTD and UBI user-space tools are available from the the following git repository:
$ git clone git://git.infradead.org/mtd-utils.git $ cd mtd-utils/ $ git checkout v1.5.0 $ make
IMPORTANT
Tested with mtd-utils version is 1.5.0.
For instructions on compiling MTD-utils, refer MTD-Utils Compilation.
Creating UBIFS
This section describes steps for creating a UBI rootfs image to be flashed to the VAR-SOM-AM33 NAND Flash.
- mkfs.ubifs
$ cd /home/user/ti-sdk-am335x-evm-07.00.00.00 $ sudo mkfs.ubifs/mkfs.ubifs -r targetNFS/ -F -o system_ubifs.img -m 2048 -e 126976 -c 1960
Where:
-m 2KiB (or 2048)
The minimum I/O size of the underlying UBI and MTD devices. In our case, we are running the flash with no sub-page writes, so this is a 2KiB page.
-e 124KiB (or 126976)
Erase Block Size: UBI requires 2 minimum I/O units out of each Physical Erase Block (PEB) for overhead: 1 for maintaining erase count information, and 1 for maintaining the Volume ID information. The PEB size for our flash is 128KiB, so this leads to each Logical Erase Block (LEB) having 124KiB available for data.
-c 1960
The maximum size, in LEBs, of our file system.
-r rootFS
Use the contents of the 'rootFS/' directory to generate the initial file system image.
-F
File-system free space has to be fixed up on first mount (http://www.linux-mtd.infradead.org/faq/ubifs.html#L_free_space_fixup)
-o system_ubifs.img
Output file.
NOTE: On AM335x, -F option is required when creating ubifs image. If this option is not used, Kernel may crash while loading the Filesystem from UBI partition.
The output of the above command, 'system_ubifs.img' is fed into the '<b>ubinize'</b> program to wrap it into a UBI image. The images produced by mkfs.ubifs are later used by the ubinize tool to create a UBI image is flashed to the raw flash to be used a UBI partition.
- Create ubinize.cfg file and write the bellow contents into it:
[rootfs] mode=ubi image=system_ubifs.img vol_id=0 vol_size=220MiB vol_type=dynamic vol_name=rootfs vol_flags=autoresize
- ubinize
$ ubi-utils/ubinize -o rootfs-var-som-am33.ubi.img -m 2048 -p 128KiB -s 2048 -O 2048 ubinize.cfg
Where:
-o rootfs-var-som-am33.ubi.img
Output file.
-m 2KiB (or 2048)
Minimum flash I/O size of 2KiB page.
-p 128KiB
Size of the physical eraseblock of the flash this UBI image is created for
-O 2048
offset if the VID header from start of the physical eraseblock
The output of the above command, 'rootfs-var-som-am33.ubi.img' is the required image.
Flasing UBIFS to NAND-Flash
We can Flash UBIFS image from either Linux Kernel or U-Boot.
From Linux
$ flash_erase /dev/mtd7 0 0 $ ubiformat /dev/mtd7 -f base-rootfs-var-som-am33.ubi.img -s 2048 -O 2048
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_SDK_7_0_v30.img.xz
- dd if=am33-som-nand-recovery-sd_SDK_7_0_v30.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: "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).