Timesys Getting Started Guide for NetLogic XLP8XX XLP-EVP1


Contents

Introduction

This document will describe in detail the procedures for booting a Linux kernel image and mounting a root file system over NFS on the NetLogic XLP8XX XLP-EVP1.

Prerequisites

Host Requirements

To properly boot a board using software from Timesys, your host machine must meet the following requirements:

  • Modern GNU/Linux Distribution. While you can use nearly any modern Linux distribution released in the last 24 months, Timesys recommends one of the following:
    • Ubuntu (Most recent release or LTS)
    • Fedora (Most recent release)
  • An internet connection on the Development Host.
  • Root or sudo permission on the Development Host.
  • A copy of the Linux Kernel (vmlinux) and Root File System (rootfs.tar.gz) for the Target Board downloaded from Factory. These are found in the output directory of your online build, or in the directory build_mips64-timesys-linux-<libc>/images/ on the command line.
  • If you are booting your root file system over the network, you will need two network cards installed and configured in the Development Host. One to communicate normally with your LAN/WAN while installing host packages, the other to communicate solely with the target board.
  • An available serial port on your Development Host.

Target Requirements

To boot the NetLogic XLP8XX XLP-EVP1, you will need the following items:

  • NetLogic XLP8XX XLP-EVP1 Board
  • ATX Power Supply
  • Serial NULL Modem Cable
  • Ethernet Crossover Cable or Ethernet hub/switch and Ethernet Patch Cables

Once you have all of the necessary components, you should perform the following steps:

  1. Connect the debug port of the board to the serial port of your workstation using the null modem cable.
  2. If you are using a cross-over cable, connect the Ethernet port of the PCIE network card to the second Ethernet port of your workstation.
  3. If you are using an Ethernet hub or switch, connect the PCIE network card to the hub with a straight-through Ethernet cable, then connect the hub to the second Ethernet port of your workstation.
  4. Connect the power supply to your board.

Booting via SD card requires an SD card and an SD card reader on the host in order to prepare the card for use with NetLogic XLP8XX XLP-EVP1.

Preparing the Target

Configuring Serial Communication

The xlp_evp1 uses a serial debug port to communicate with the host machine. The commands discussed in this section are meant to be performed by a privileged user account. This requires the root login or prepending each command with sudo.

Using Minicom

  1. Start minicom on your host machine in configuration mode. As root:

    # minicom -o -s -w

  2. A menu of configuration should appear. Use the Down-arrow key to scroll down and select the Serial port setup option, and press Enter.
  3. Verify that the listed serial port is the same one that is connected to the target board. If it is not, press A, and enter the correct device. This is /dev/ttyS0 on most Linux distributions.
  4. Set the Bps/Par/Bits option by pressing the letter E and using the next menu to set the appropriate values. You press the key that corresponds to the value 115200, then press Enter.
  5. Set Hardware flow control to Yes using the F key.
  6. Set Software flow control to No using the G key.
  7. Press Enter to return to the main configuration menu, and then press Esc to exit this menu.
  8. Reset the board, and wait for a moment. If you do not see output from the board, press Enter several times until you see the prompt. If you do not see any output from the board, and have verified that the serial terminal connection is setup correctly, contact your board vendor.

TIP: If you experience an error similar to Device /dev/ttyS0 is locked when starting minicom, it usually means that another process is using the serial port (which is usually another instance of minicom). You can find the process that is currently using the serial port by executing the following:

# fuser /dev/ttyS0
/dev/ttyS0:         28358

# ps 28358
  PID TTY      STAT  TIME COMMAND
  28923 pts/0    S+    0:00 minicom

This process can also be killed directly with fuser as root. Please use this command with caution:

# fuser -k /dev/ttyS0

Using GNU Screen

To quickly connect to a board using Gnu Screen, execute the following:

# screen /dev/ttyS0 115200

For more information about using screen, please consult the man page, or view the manual online at http://www.gnu.org/software/screen/manual/screen.html

Preparing the Host

Setting up the network

The commands discussed in this section are meant to be performed by a privileged user account. This requires the root login or prepending each command with sudo.

Identify the network adapter connecting the Host to the Target

Timesys only supports direct Ethernet connections from the development Host to the Target board. Ideally, the development Host would have two network adapters; one adapter to connect to your LAN, and one Ethernet card to connect directly to the Target board with a crossover cable or Ethernet hub. If your development Host only has one network interface it must be directly connected to the Target board. The Ethernet adapter connected directly to the target board must be:
  • Configured with a proper static IP address and Subnet Mask.
  • Connected directly to the target board with either a crossover cable or its own Ethernet hub.
From a command prompt issue the command:
# /sbin/ifconfig
Each interface will report its IP address, Subnet Mask, and Default Gateway information:
eth0 Link encap:Ethernet HWaddr 00:19:bb:49:ff:0e      
        inet addr:192.168.3.244 Bcast:192.168.3.255 Mask:255.255.254.0
        inet6 addr: fe80::219:bbff:fe49:ff0e/64 Scope:Link      
        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1      
        RX packets:57214 errors:0 dropped:0 overruns:0 frame:0      
        TX packets:47272 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000      
        RX bytes:43109083 (41.1 MB) TX bytes:6308206 (6.0 MB)
        Interrupt:16
eth1 Link encap:Ethernet HWaddr 00:10:b5:4a:c1:a9      
        inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.0.0.0      
        UP BROADCAST MULTICAST MTU:1500 Metric:1      
        RX packets:0 errors:0 dropped:0 overruns:0 frame:0      
        TX packets:0 errors:0 dropped:0 overruns:0 carrier:0     
        collisions:0 txqueuelen:1000      
        RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)      
        Interrupt:21 Base address:0x1100
lo  Link encap:Local Loopback      
        inet addr:127.0.0.1 Mask:255.0.0.0      
        inet6 addr: ::1/128 Scope:Host      
        UP LOOPBACK RUNNING MTU:16436 Metric:1      
        RX packets:1974 errors:0 dropped:0 overruns:0 frame:0      
        TX packets:1974 errors:0 dropped:0 overruns:0 carrier:0     
        collisions:0 txqueuelen:0      
        RX bytes:226637 (221.3 KB) TX bytes:226637 (221.3 KB)
Note the IP address and Subnet Mask of the appropriate network connection. You will use this to configure the DHCP server.

Installing the server daemons on the development host

  • On Ubuntu 11.04 and newer:
    # apt-get install xinetd tftp tftpd isc-dhcp-server \
                      nfs-kernel-server portmap
  • On Ubuntu 10.11 and older:
    # apt-get install xinetd tftp tftpd dhcp3-server \
                      nfs-kernel-server portmap
    NOTE: Older versions of Ubuntu use nfs-common and nfs-user-server in place of nfs-kernel-server
  • On Fedora Core:

    # yum install xinetd tftp tftp-server dhcp nfs-utils

Important:

After installing these packages the DHCP server software may start automatically. Having the DHCP server running while you are connected to a LAN can interfere with the operation of other computers. After the DHCP service installs and starts issue these commands to stop the DHCP service and prevent it from starting automatically at boot:

  • To stop the dhcp service:

    • On Ubuntu 11.04 and newer:

      # service isc-dhcp-server stop

    • On Ubuntu 10.11 and older:

      # service dhcp3-server stop

    • On Fedora Core:

      # /etc/init.d/dhcp stop

  • To prevent the service from starting automatically:

    • On Ubuntu 11.04 and newer:

      # chmod 644 /etc/init.d/isc-dhcp-server

    • On Ubuntu 10.11 and older:

      # chmod 644 /etc/init.d/dhcp3-server

    • On Fedora Core:

      1. Click the System Menu
      2. Select Administration
      3. Select Services
      4. Select dhcpd
      5. Click the Customize button
      6. Uncheck Runlevel 2, 3, 4 and 5

Disable SELinux and Firewall on Fedora Core

On Fedora Core, SELinux and the firewall will interfere with many of the services that are needed to work with the target board. These should be disabled before continuing.

Generally Ubuntu does not have these services running by default.

  1. Disable SELinux:

    1. Click the System Menu
    2. Select Administration
    3. Select SELinux Management
    4. Change System Default Enforcing Mode to Disabled

  2. Disable Firewall:

    1. Click the System Menu
    2. Select Administration
    3. Select Services
    4. Select iptables
    5. Click the Customize button
    6. uncheck Runlevel 2, 3, 4 and 5

Setting up DHCP

  1. Edit the dhcpd configuration file:

    • On Ubuntu, edit /etc/dhcp/dhcpd.conf and include the following lines (note: on older versions of Ubuntu this file is at either /etc/dhcp3/dhcpd.conf or /etc/dhcpd.conf):

      subnet 10.0.0.0 netmask 255.0.0.0 {
       host targetboard {
        fixed-address 10.0.0.10;
        hardware ethernet 12:34:56:78:9a:bc;
        option root-path "/full/path/to/rfs";
        filename "vmlinux";
       }
      }

    • On Fedora Core, edit /etc/dhcpd.conf and include the following lines:

      ddns-update-style ad-hoc;
      subnet 10.0.0.0 netmask 255.0.0.0 {
       host targetboard {
        fixed-address 10.0.0.10;
        hardware ethernet 12:34:56:78:9a:bc;
        option root-path "/full/path/to/rfs";
        next-server 10.0.0.1;
        filename "vmlinux";
       }
      }

  2. Test the DHCP server on the network card that is connected to your development board. For this example assume eth1. This command will start the DHCP server in the foreground and output any status or error messages to the screen.

    • On Ubuntu up to 12.04 LTS:

      # service dhcp3-server restart

    • On Ubuntu 12.04 LTS and later:

      # service isc-dhcp-server restart

    • On Fedora Core:

      # /usr/sbin/dhcpd -d eth1

    • It is recommended to start the DHCP server in this manner each time you need to boot your Target board.

Setting up TFTP

  1. Edit the xinetd.conf file

    • On Ubuntu, edit /etc/xinetd.conf and add the following lines just above the line that reads includedir /etc/xinetd.d.

      service tftp
      {
       socket_type = dgram
       protocol = udp
       wait = yes
       user = root
       server = /usr/sbin/in.tftpd
       server_args = -s /tftpboot
       disable = no
      }

    • On Fedora Core, the tftp-server package creates a /etc/xinetd.d/tftp file. Edit this file and change the disable line from yes to no. The contents of the file are:

      service tftp
      {
       socket_type     = dgram
       protocol      = udp
       wait       = yes
       user       = root
       server       = /usr/sbin/in.tftpd
       server_args     = -s /tftpboot
       disable      = no
       per_source      = 11
       cps       = 100 2
       flags       = IPv4
      }

  2. Create the /tftpboot folder if it does not exist:

    # mkdir /tftpboot

  3. Copy the kernel image to the /tftpboot directory:

    # cp /path/to/kernel/image/vmlinux \
                      /tftpboot/vmlinux

    NOTE Also copy other files that are required for booting, such as a device tree blob, to /tftpboot.

  4. Restart the xinetd server with the following command:

    # /etc/init.d/xinetd restart

  5. Test the TFTP server with the following commands

    # tftp localhost
    tftp> get vmlinux
    Received 1456898 bytes in 0.4 seconds
    tftp> quit

  6. Set xinetd to start automatically on Fedora Core.

    Ubuntu users will skip this step.

    1. Click the System Menu
    2. Select Administration
    3. Select Services
    4. Select xinetd
    5. Click the Customize button
    6. Check Runlevel 2, 3, 4 and 5

Setting up NFS

  1. As root, extract rootfs.tar.gz to a directory and note the path. This path will be referred to as /full/path/to/rfs in this document.

    # mkdir /full/path/to/rfs
    # cd /full/path/to/rfs
    # sudo tar xvf rootfs.tar.gz

  2. Export this path by editing /etc/exports to include a line similar to the following:

    /full/path/to/rfs 10.0.0.10(rw,no_root_squash)

  3. Restart the NFS services

    • On Ubuntu issue the following commands in order:

      # service portmap stop
      # service nfs-kernel-server stop
      # service portmap start
      # service nfs-kernel-server start
      NOTE: Older versions of Ubuntu use nfs-common and nfs-user-server in place of nfs-kernel-server

    • On Fedora Core:

      # /etc/init.d/nfs restart

  4. Set nfsd to start automatically on Fedora Core. Ubuntu users will skip this step.

    1. Click the System Menu
    2. Select Administration
    3. Select Services
    4. Select NFS
    5. Click the Customize button
    6. Check Runlevel 2, 3, 4 and 5

Booting the Board

The NetLogic XLP8XX XLP-EVP1 uses a combination of X-Loader and U-boot to bring up the system.

Choosing Boot Device

The IO_AD[4:0] strapping pins set the default boot device of either NOR parallel flash or MMC/SD card over MMC. The following tables specify the pin setup for each.

Boot from MMC/SD

Pin Value Pin Value Pin Value Pin Value
1 OFF 9 ON 17 ON 25 ON
2 ON 10 ON 18 ON 26 ON
3 OFF 11 ON 19 OFF 27 OFF
4 ON 12 ON 20 ON 28 OFF
5 OFF 13 ON 21 ON 29 OFF
6 ON 14 OFF 22 ON 30 OFF
7 ON 15 OFF 23 ON 31 OFF
8 ON 16 OFF 24 ON 32 OFF

Boot from NOR

Pin Value Pin Value Pin Value Pin Value
1 OFF 9 ON 17 ON 25 OFF
2 ON 10 ON 18 ON 26 ON
3 OFF 11 ON 19 OFF 27 OFF
4 OFF 12 ON 20 ON 28 OFF
5 OFF 13 ON 21 ON 29 OFF
6 ON 14 OFF 22 ON 30 OFF
7 ON 15 OFF 23 ON 31 OFF
8 ON 16 OFF 24 OFF 32 OFF

Preparing SD card

The SD card needs to be partitioned prior to copying the target files to it. The following is an example partition table for an 8GB SD card that is assigned /dev/sdb on the host machine:
Disk /dev/sdb: 7968 MB, 7968129024 bytes
188 heads, 51 sectors/track, 1623 cylinders
Units = cylinders of 9588 * 512 = 4909056 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1           2        9562+  83  Linux
/dev/sdb2               3        1623     7771074    b  W95 FAT32
Once partitioned, create an MS-DOS filesystem on /dev/sdb2 to store the u-boot image. Copy the u-boot.bin to the location /dev/sdb2 is mounted:

# mount /dev/sdb2 /mnt
# cp u-boot.bin /mnt/

Write the X-Loader image to the first partition of the SD card. This should not have a filesystem created on it. The following command will write the xload.bin file to the first partition of the SD device:

# dd if=xload.bin of=/dev/sdb seek=2

Loading U-boot

Load U-boot from MMC/SD in X-Loader

Begin by loading your U-boot executable file from the prepared SD card:

  1. From your serial session issue the following commands:

    Netl8xx# mmc init
    Netl8xx# fatload 0:2 u-boot.bin

  2. Execute U-boot as follows:

    Netl8xx# go

Load U-boot from NOR in X-Loader

Begin by loading your U-boot executable file from flash:

  1. From your serial session issue the following commands:

    Netl8xx# cp 0xFFFFFFFFB60A0000 0xffffffff8c100000 0x40000

  2. Execute U-boot as follows:

    Netl8xx# go

Set U-boot Environment Variables

Once U-boot is loaded you must set a few environment variables in order to load files over TFTP. This is done with the setenv command in U-Boot. On the target, set the following environment variables:

Variable Value
serverip 10.0.0.1
ipaddr 10.0.0.10

Note: The Linux kernel boot parameters are set in the DTB and are not passed from u-boot to the kernel.

Disable updatefdt U-boot Environment Variable

In certain situations, a corrupted u-boot environment may set updatefdt by default. Having this variable set may result in boot failures with some configurations. Unset this variable, save the environment, and reset the target.

Netl8xx# setenv updatefdt
Netl8xx# saveenv
Saving Environment to Flash...
Un-Protected 8 sectors
Erasing Flash...
........ done
Erased 8 sectors
Writing to Flash... done
Protected 8 sectors
Netl8xx# reset

Device Tree Configuration

The NetLogic XLP8XX XLP-EVP1 uses a flattened device tree (FDT) interface for processor configuration information that is stored in a textual device tree source (DTS) format. Each DTS is then compiled into a device tree blob (DTB) that is used by the NetLogic XLP8XX XLP-EVP1 at system bring up time for system configuration.

The bootargs value of the chosen node in the DTS file is passed as the Linux kernel boot arguments. The default root file system is an RAM filesystem (initramfs).

  chosen {
    bootargs = " xlp_noi2c console=ttyS0,115200 rdinit=/sbin/init mem=512m@3584m ";
  };

To NFS mount a root file system, update the bootargs value to:

  chosen {
    bootargs = " xlp_noi2c console=ttyS0,115200 ip=dhcp root=/dev/nfs ...";
  };

The following table summarizes the provided DTB configuration files:

DTB Description
helinux.dtb HyperExec Linux configuration
helinux-nae.dtb HyperExec Linux configuration with NAE
helinux-nae-nfsroot.dtb HyperExec Linux configuration with NAE for NFS
linux.dtb Linux configuration
linux-nae.dtb Linux configuration with NAE
linux-nae-nfsroot.dtb Linux configuration with NAE for NFS
multi-os.dtb MultiOS/Xen configuration
multi-os-hybrid.dtb MultiOS/Xen AMP/SMP configuration
multi-os-hybrid-nae.dtb MultiOS/Xen AMP/SMP configuration with NAE
multi-os-nae.dtb MultiOS/Xen configuration with NAE
multi-os-nae-nfsroot.dtb MultiOS/Xen configuration with NAE for NFS
netos.dtb Single HyperExec hyperapp configuration
netos-nae.dtb Single HyperExec hyperapp configuration with NAE
tiny.dtb U-Boot configuration (used at build time)
tiny-nae.dtb (uboot-tiny-nae.dtb) U-Boot configuration (used at build time) with NAE
xlr.dtb XLR processor configuration

Boot Standalone Linux

The following commands will load the kernel and DTB on to the target. Replace linux-nae-nfsroot.dtb with linux-nae.dtb as required.

Netl8xx# tftpboot 0xA800000060000000 10.0.0.1:vmlinux
Netl8xx# tftpboot 0xFFFFFFFF80100000 10.0.0.1:linux-nae-nfsroot.dtb

Finally boot the Linux kernel with the following:

Netl8xx# bootelf 0xA800000060000000 - 0xFFFFFFFF80100000

Boot Multi-OS Linux with Xen

Booting with the multi-os-nae.dtb file requires loading the kernel, Xen hypervisor, and the dtb file using the following commands. Replace multi-os-nae-nfsroot.dtb with multi-os-nae.dtb as required.

Netl8xx# tftpboot 0xA800000072000000 10.0.0.1:vmlinux
Netl8xx# tftpboot 0xFFFFFFFF81000000 10.0.0.1:xen
Netl8xx# tftpboot 0xFFFFFFFF80100000 10.0.0.1:multi-os-nae-nfsroot.dtb
Netl8xx# bootelf 0xFFFFFFFF81000000 - 0xFFFFFFFF80100000

Additional Information

Factory Documentation