CL-SOM-AM57x: Yocto Linux: Manual Installation

From Compulab Mediawiki
Revision as of 09:37, 19 January 2017 by Grinberg (talk | contribs) (See also)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Introduction

This article provides an introduction on how to install the following on the CompuLab CL-SOM-AM57x System-on-Module / Computer-on-Module eMMC internal storage device:

  • Yocto generated Arago user space (root filesystem) image.
  • Yocto Linux kernel images.

Preparation steps

  • Obtain a PC workstation with a serial communication port or a free USB 2.0 Host port.
  • For networked installation you need to install a TFTP server on the host PC. For Windows machines we recommend TFTPD32 included in the Yocto package for CL-SOM-AM57x (link below).
  • Download the Yocto Linux package for CL-SOM-AM57x from CompuLab website. Unzip the package to a directory on your host workstation.
  • All image files mentioned below can be found in the images subdirectory
  • Connect the host PC to the SB-SOM-AM57x base-board (connector P8) via the serial cable supplied with the evaluation kit.
    • SB-SOM-AM57x base-board features Serial-to-USB adapter available through connector P7. It can be used as an alternative debug port to connect the Host PC via the micro-USB cable supplied with the evaluation kit.
  • Start terminal emulation software on your PC with the following serial port settings:
Baud Rate Data Bits Stop Bits Parity Flow Control
115200 8 1 none none
  • Turn on the CL-SOM-AM57x evaluation system. The U-Boot boot-loader will start and you will get a command prompt.
Admolition note.png If the boot settings of your CL-SOM-AM57x are different than default, you may need to press and hold Ctrl-C while turning the CL-SOM-AM57x on, in order to get command prompt.

Boot into the installation environment (ramdisk)

The first step in CL-SOM-AM57x Linux installation is starting the installation environment (Linux kernel and Ramdisk image). This can be done using one of the following media:

Using installation environment on MMC/SD card

  • Copy the content of the images folder from Yocto Linux package for CL-SOM-AM57x to the root directory on the first partition of the MMC/SD card:
    • kernel.img, ramdisk.dtb, ramdisk.img, am57xx-sbc-am57x.dtb, zImage-cl-som-am57x, rootfs.tar.bz2.


Admolition note.png Format without a partition table is not supported by U-Boot.

The partition has to be formatted with either ext2/3/4 or FAT16/32 file system.

  • Insert the MMC/SD card into the MMC/SD socket (P9) on the SB-SOM-AM57x baseboard and reset the module.
  • To start installation environment boot manually, use the following U-Boot commands:
CL-SOM-AM57x # mmc dev 0
CL-SOM-AM57x # mmc rescan
CL-SOM-AM57x # load mmc 0 0x88000000 ramdisk.dtb && load mmc 0 0x82000000 kernel.img && load mmc 0 0x88080000 ramdisk.img
CL-SOM-AM57x # setenv bootargs "root=/dev/ram0 rw ramdisk_size=16384 console=ttyO2,115200n8 vram=16M"
CL-SOM-AM57x # bootz 0x82000000 0x88080000 0x88000000

Using installation environment from USB storage device

  • Copy the content of the images folder from Yocto Linux package for CL-SOM-AM57x to the root directory on the first partition of the USB storage device:
    • kernel.img, ramdisk.dtb, ramdisk.img, am57xx-sbc-am57x.dtb, zImage-cl-som-am57x, rootfs.tar.bz2.
  • Plug the USB storage device into the SB-SOM-AM57x USB port P6.
  • Remove MMC/SD card from the MMC/SD socket (P9) on the SB-SOM-AM57x baseboard.
  • Use the following U-boot commands to boot the installation environment on the CL-SOM-AM57x:
CL-SOM-AM57x # usb start
CL-SOM-AM57x # load usb 0 0x88000000 ramdisk.dtb && load usb 0 0x82000000 kernel.img && load usb 0 0x88080000 ramdisk.img
CL-SOM-AM57x # setenv bootargs "root=/dev/ram0 rw ramdisk_size=16384 console=ttyO2,115200n8 vram=16M"
CL-SOM-AM57x # bootz 0x82000000 0x88080000 0x88000000

Using installation environment from TFTP server

  • Connect the SB-SOM-AM57x Ethernet port (connector P21 on the SB-SOM) to your local network.
  • Put kernel.img, ramdisk.dtb, and ramdisk.img from images sub-directory of Linux package for CL-SOM-AM57x to a location accessible by the TFTP server:
    - On Windows machine: select a folder and point the TFTP server to that folder.
    - On Linux machine: TFTP server root directory, usually /tftpboot or /tftproot.

Use U-Boot dhcp command to obtain IP address

CL-SOM-AM57x # dhcp
or manually set ipaddr environment variable:
CL-SOM-AM57x # setenv ipaddr <ip address>
  • Use the following U-Boot commands to start installation environment boot:
CL-SOM-AM57x # setenv bootargs "root=/dev/ram0 rw ramdisk_size=16384 console=ttyO2,115200n8 vram=16M ip=dhcp"
CL-SOM-AM57x # tftpboot 0x88000000 ramdisk.dtb
CL-SOM-AM57x # tftpboot 0x82000000 kernel.img
CL-SOM-AM57x # tftpboot 0x88080000 ramdisk.img
CL-SOM-AM57x # bootz 0x82000000 0x88080000 0x88000000

Install Kernel and Root File System Images

After the ramdisk image is loaded the Linux login prompt will appear. Login as root into the system.

compulab login: root

Mount the installation source media

The next step is installing the kernel and Root File System images. The following media can be used as a source for installation:

Mount an MMC/SD Card

  • Insert the MMC/SD card into the SD socket (P9) on the SB-SOM-AM57x.
  • The MMC/SD card is mounted automatically under /media/mmcblk0pX. Where X is the partition number.
  • If for some reason the MMC/SD card hasn't been mounted automatically, use the following mount command:
root@compulab:~# mkdir -p /media/mmcblk0pX && mount /dev/mmcblk0pX /media/mmcblk0pX

Mount a USB Storage Device

  • Plug the USB storage device to any USB host port (P6) on the SB-SOM-AM57x.
  • The USB device is mounted automatically under /media/sdXY. Where X is the device letter and Y is the partition number.
  • If for some reason the USB storage device hasn't been mounted automatically, use the following mount command:
root@compulab:~# mkdir -p /media/sdXY && mount /dev/sdXY /media/sdXY

Mount an NFS drive

  • Connect the CL-SOM-AM57x Ethernet port (P21) to your local network.
  • Copy the installation files from the package directory images to a directory exported through NFS:
    • am57xx-sbc-am57x.dtb, zImage-cl-som-am57x, rootfs.tar.bz2
  • During Ramdisk image booting the CL-SOM-AM57x attempts to obtain an IP address using DHCP. If from some reason the IP address has not been obtained, use the following commands to obtain IP address for the CL-SOM-AM57x:
    • Obtain IP using DHCP:
      root@compulab:~# ifup eth1
    or
    • If there is no DHCP server on the network, you can set a static IP address using ifconfig:
      root@compulab:~# ifconfig eth1 <ip address>
  • Mount the NFS shared directory that contains the installation files:
root@compulab:~#  mount -o nolock <host ip>:/path/to/nfs/share /mnt/net

Install Images

Once the ramdisk image is loaded and the media containing the CL-SOM-AM57x Kernel and Debian Linux images is mounted the installation can proceed.
The Linux kernel and Root File System images can be installed on the following media:

Install Images on eMMC

Admolition note.png The below procedure will work only on empty eMMC chip. If you have already used the eMMC, please delete all the partitions before proceeding.
  • In this subsection the term /mount/point can be:
    • /mnt/net if NFS is used.
    • /media/mmcblk1pX if an MMC/SD card is used, where X is the partition number.
    • /media/sdXY if USB storage is used, where X is the USB drive letter and Y is the partition number.
Admolition note.png In the below procedure the first (boot) partition can be either FAT32 or EXT2/3/4. The example below is only for FAT32 filesystem.
  • Create two partitions for the Linux kernel (FAT32 100M) and root file system (EXT4 the rest of the disk) on the eMMC:
root@compulab:~# echo -e "n\np\n1\n2048\n204800\na\n1\nt\nc\nn\np\n2\n204801\n\nw\neof\n" | fdisk -u /dev/mmcblk0
  • Refresh the device nodes:
root@compulab:~# mdev -s && umount /dev/mmcblk0p1 && umount /dev/mmcblk0p2
  • Format the first partition with FAT32 file system:
root@compulab:~# mkfs.vfat -n boot /dev/mmcblk0p1
  • Format the second partition with EXT4 file system:
root@compulab:~# mkfs.ext4 /dev/mmcblk0p2
  • Mount both partitions:
root@compulab:~# mkdir -p /media/mmcblk0p1 && mount /dev/mmcblk0p1 /media/mmcblk0p1
root@compulab:~# mkdir -p /media/mmcblk0p2 && mount /dev/mmcblk0p2 /media/mmcblk0p2
  • Copy the files zImage-cl-som-am57x and am57xx-sbc-am57x.dtb to the first (FAT) partition:
root@compulab:~# cp /mount/point/zImage-cl-som-am57x /mount/point/am57xx-sbc-am57x.dtb /media/mmcblk0p1 && sync
  • Extract the content of the rootfs.tar.bz2 onto the second partition:
root@compulab:~# tar --numeric-owner -xvjf /mount/point/rootfs.tar.bz2 -C /media/mmcblk0p2 && sync
  • Remove MMC/SD card from SB-SOM-AM57x MMC/SD card socket (if used for installation) and reboot the module:
root@compulab:~# reboot

Install on SATA drive

Admolition note.png The below procedure will work only on empty SATA drive. If you have already used the drive, please delete all the partitions before proceeding.
  • In this subsection the term /mount/point can be:
    • /mnt/net if NFS is used
    • /media/mmcblk1pX if an MMC/SD card is used, where X is the partition number.
    • /media/sdXY if USB storage is used, where X is the USB drive letter and Y is the partition number.
Admolition note.png In the below procedure the first (boot) partition can be either FAT32 or EXT2/3/4. The example below is only for FAT32 file system.
  • Identify SATA drive special device file
export SATA_DRIVE=/dev/`basename /sys/devices/platform/44000000.ocp/4a140000.sata/ata1/host0/target0\:0\:0/0\:0\:0\:0/block/sd?`
  • Create two partitions for the Linux kernel (FAT32 100M) and root file system (EXT4 the rest of the disk) on SATA drive:
root@compulab:~# echo -e "n\np\n1\n2048\n204800\na\n1\nt\nc\nn\np\n2\n204801\n\nw\neof\n" | fdisk -u ${SATA_DRIVE}
  • Format the first partition with FAT32 file system:
root@compulab:~# mkfs.vfat -n boot ${SATA_DRIVE}1
  • Format the second partition with EXT4 file system:
root@compulab:~# mkfs.ext4 ${SATA_DRIVE}2
  • Mount both partitions:
root@compulab:~# mkdir -p /media/boot && mount ${SATA_DRIVE}1 /media/boot
root@compulab:~# mkdir -p /media/rootfs && mount ${SATA_DRIVE}2 /media/rootfs
  • Copy the files zImage-cl-som-am57x and am57xx-sbc-am57x.dtb to the first (FAT) partition:
root@compulab:~# cp /mount/point/zImage-cl-som-am57x /mount/point/am57xx-sbc-am57x.dtb /media/boot && sync
  • Extract the content of rootfs.tar.bz2 onto the second partition:
root@compulab:~# tar --numeric-owner -xvjf /mount/point/rootfs.tar.bz2 -C /media/rootfs && sync
  • Reboot the module:
root@compulab:~# reboot

Install on the NAND flash

  • In this subsection the term /mount/point can be:
    • /mnt/net if NFS is used
    • /media/mmcblk0pX if an MMC/SD card is used, where X is the partition number.
    • /media/sdXY if a USB storage is used, where X is the USB drive letter and Y is the partition number.
  • Format the NAND flash kernel partition and write the kernel image onto it:
root@compulab:~# flash_erase /dev/mtd3 0 0
root@compulab:~# nandwrite -p /dev/mtd3 /mount/point/zImage-cl-som-am57x
  • Format the NAND flash Device Tree partition and write the DT blob onto it:
root@compulab:~# flash_erase /dev/mtd4 0 0
root@compulab:~# nandwrite -p /dev/mtd4 /mount/point/am57xx-sbc-am57x.dtb
  • Format the NAND flash root filesystem partition:
root@compulab:~# ubiformat /dev/mtd5
  • Attach the NAND flash root filesystem partition:
root@compulab:~# ubiattach -m 5 -d 0
  • Create a ubi volume and name it "rootfs":
root@compulab:~# ubimkvol /dev/ubi0 -m -N rootfs
  • Mount the ubi volume:
root@compulab:~# mkdir -p /media/rootfs && mount -t ubifs ubi0:rootfs /media/rootfs
  • Extract the content of rootfs.tar.bz2 onto the /media/rootfs:
root@compulab:~# tar --numeric-owner -xvjf /mount/point/rootfs.tar.bz2 -C /media/rootfs && sync
  • Reboot the module:
root@compulab:~# reboot

After Installation

Select video output

CL-SOM-AM57x (SBC-AM57x) evaluation platform has four video output interfaces: LCD, DVI, LVDS and HDMI. Current version of Xorg driver of CL-SOM-AM57x example root file system supports mirror video output mode only. It causes last registered video output device (LCD) resolution to be propagated to other devices.

In order to force a specific video output device to be selected as a primary device the U-Boot environment variables should be adjusted.

  • To enable HDMI video output:
CL-SOM-AM57x # setenv set_display 'fdt rm /aliases display1; fdt rm /ocp/dss/ports/port@0/endpoint@0; fdt rm /display@0; fdt rm /aliases display2;
fdt rm /connector@1; fdt rm /tfp410; fdt rm /ocp/dss/ports/port@0/endpoint@1; fdt rm /aliases display3; fdt rm /ocp/dss/ports/port@2; fdt rm /display@1'
  • To enable LCD video output:
CL-SOM-AM57x # setenv set_display 'fdt rm /aliases display2; fdt rm /connector@1; fdt rm /tfp410; fdt rm /ocp/dss/ports/port@0/endpoint@1;
fdt rm /aliases display3; fdt rm /ocp/dss/ports/port@2; fdt rm /display@1; fdt rm /aliases display0; fdt rm /ocp/dss/encoder@58060000; fdt rm /connector@0'
  • To enable LVDS video output:
CL-SOM-AM57x # setenv set_display 'fdt rm /aliases display1; fdt rm /ocp/dss/ports/port@0/endpoint@0; fdt rm /display@0; fdt rm /aliases display2;
fdt rm /connector@1; fdt rm /tfp410; fdt rm /ocp/dss/ports/port@0/endpoint@1; fdt rm /aliases display0; fdt rm /ocp/dss/encoder@58060000; fdt rm /connector@0'
  • To enable DVI video output:
CL-SOM-AM57x # setenv set_display 'fdt rm /aliases display1; fdt rm /ocp/dss/ports/port@0/endpoint@0; fdt rm /display@0; fdt rm /aliases display3; fdt rm /ocp/dss/ports/port@2; fdt rm /display@1'

Boot from eMMC

  • Set the initial environment variables:
CL-SOM-AM57x # setenv kernel zImage-cl-som-am57x; setenv fdtfile am57xx-sbc-am57x.dtb
CL-SOM-AM57x # setenv unreset_pcie 'i2c dev 4; pca953x output 1 1'
CL-SOM-AM57x # setenv loadimage 'setenv mmcdev 1 && mmc dev ${mmcdev} && mmc rescan && run emmcloadkernel && run emmcloadfdt'
CL-SOM-AM57x # setenv bootcmd 'run unreset_pcie; run emmcargs; run loadimage; fdt addr ${fdtaddr}; setenv fdtaddr 88000000; run set_display; run bootkernel'
CL-SOM-AM57x # saveenv
CL-SOM-AM57x # boot

Boot from NAND flash

  • Set the initial environment variables:
CL-SOM-AM57x # setenv unreset_pcie 'i2c dev 4; pca953x output 1 1'
CL-SOM-AM57x # setenv loadimage 'nand read ${loadaddr} 0 980000 && nand read ${fdtaddr} 980000 80000'
CL-SOM-AM57x # setenv bootargs "root=ubi0:rootfs rw rootfstype=ubifs ubi.mtd=rootfs console=ttyO2,115200n8"
CL-SOM-AM57x # setenv bootcmd 'run unreset_pcie; run loadimage; fdt addr ${fdtaddr}; setenv fdtaddr 88000000; run set_display; run bootkernel'
CL-SOM-AM57x # saveenv
CL-SOM-AM57x # boot

Boot from SATA drive

  • Set the initial environment variables:
CL-SOM-AM57x # setenv kernel zImage-cl-som-am57x; setenv fdtfile am57xx-sbc-am57x.dtb
CL-SOM-AM57x # setenv unreset_pcie 'i2c dev 4; pca953x output 1 1'
CL-SOM-AM57x # setenv loadimage 'load scsi 0 ${loadaddr} ${kernel} && load scsi 0 ${fdtaddr} ${fdtfile}'
CL-SOM-AM57x # sete bootargs 'root=/dev/sda2 rootfstype=ext4 rw rootwait console=ttyO2,115200n8'
CL-SOM-AM57x # setenv bootcmd 'run unreset_pcie; run loadimage; fdt addr ${fdtaddr}; setenv fdtaddr 88000000; run set_display; run bootkernel'
CL-SOM-AM57x # saveenv
CL-SOM-AM57x # boot

See also