Elkhart Lake CRB

Overview

Elkhart Lake Reference Board (EHL CRB) is an example implementation of a compact single board computer with high performance for IoT edge devices.

This board configuration enables kernel support for the EHL board.

Note

This board configuration works on the variant of EHL boards containing Intel® Atom™ SoC.

Hardware

General information about the board can be found at the EHL website.

Supported Features

In addition to the standard architecture devices (HPET, local and I/O APICs, etc.), Zephyr supports the following Elkhart Lake-specific SoC devices:

  • I2C

UART Serial Port Support

The Elkhart Lake UARTs are NS16550-compatible. Baud rate of 115.2kbps is supported.

Connections and IOs

Refer to the EHL website for more information.

Programming and Debugging

Use the following procedures for booting an image on a EHL CRB board.

Creating a GRUB2 Boot Loader Image from a Linux Host

If you are having problems running an application using the preinstalled copy of GRUB, follow these steps to test on supported boards using a custom GRUB.

  1. Install the requirements to build GRUB on your host machine.

    On Ubuntu, type:

    $ sudo apt-get install bison autoconf libopts25-dev flex automake \
    pkg-config gettext autopoint
    

    On Fedora, type:

    $ sudo dnf install gnu-efi bison m4 autoconf help2man flex \
    automake texinfo gettext-devel
    
  2. Clone and build the GRUB repository using the script in Zephyr tree, type:

    $ cd $ZEPHYR_BASE
    $ ./boards/x86/common/scripts/build_grub.sh x86_64
    
  3. Find the binary at $ZEPHYR_BASE/boards/x86/common/scripts/grub/bin/grub_x86_64.efi.

Build Zephyr application

  1. Build a Zephyr application; for instance, to build the hello_world application on Elkhart Lake CRB:

    # From the root of the zephyr repository
    west build -b ehl_crb samples/hello_world
    

    Note

    A stripped project image file named zephyr.strip is automatically created in the build directory after the application is built. This image has removed debug information from the zephyr.elf file.

Preparing the Boot Device

Prepare a USB flash drive to boot the Zephyr application image on an Elkhart Lake CRB board.

  1. Format the USB flash drive as FAT32.

    On Windows, open File Explorer, and right-click on the USB flash drive. Select Format.... Make sure in File System, FAT32 is selected. Click on the Format button and wait for it to finish.

    On Linux, graphical utilities such as gparted can be used to format the USB flash drive as FAT32. Alternatively, under terminal, find out the corresponding device node for the USB flash drive (for example, /dev/sdd). Execute the following command:

    $ mkfs.vfat -F 32 <device-node>
    

    Important

    Make sure the device node is the actual device node for the USB flash drive. Or else you may erase other storage devices on your system, and will render the system unusable afterwards.

  2. Create the following directories

    efi

    efi/boot

    kernel

  3. Copy the kernel file zephyr/zephyr.strip to the $USB/kernel folder.

  4. Copy your built version of GRUB to $USB/efi/boot/bootx64.efi

  5. Create $USB/efi/boot/grub.cfg containing the following:

    set default=0
    set timeout=10
    
    menuentry "Zephyr Kernel" {
       multiboot /kernel/zephyr.strip
    }
    

Booting the Elkhart Lake CRB Board

Boot the Elkhart Lake CRB board from the boot device using GRUB2 via USB flash drive.

  1. Insert the prepared boot device (USB flash drive) into the Elkhart Lake CRB board.

  2. Connect the board to the host system using the serial cable and configure your host system to watch for serial data. See EHL website for more information.

    Note

    On Windows, PuTTY has an option to set up configuration for serial data. Use a baud rate of 115200.

  3. Power on the Elkhart Lake CRB board.

  4. When the following output appears, press F7:

    Press <DEL> or <ESC> to enter setup.
    
  5. From the menu that appears, select the menu entry that describes that particular type of USB flash drive.

    GRUB2 starts and a menu shows entries for the items you added to the file grub.cfg.

  6. Select the image you want to boot and press Enter.

    When the boot process completes, you have finished booting the Zephyr application image.

    Note

    You can safely ignore this message if it appears:

    WARNING: no console will be available to OS
    

Booting the Elkhart Lake CRB Board over network

Build Zephyr image

  1. Follow Build Zephyr application steps to build Zephyr image.

Prepare Linux host

  1. Follow Creating a GRUB2 Boot Loader Image from a Linux Host steps to create grub binary.

  2. Install DHCP, TFTP servers. For example dnsmasq

    $ sudo apt-get install dnsmasq
    
  3. Configure DHCP server. Configuration for dnsmasq is below:

    # Only listen to this interface
    interface=eno2
    dhcp-range=10.1.1.20,10.1.1.30,12h
    
  4. Configure TFTP server.

    # tftp
    enable-tftp
    tftp-root=/srv/tftp
    dhcp-boot=grub_x86_64.efi
    

    grub_x86_64.efi is a grub binary created above.

  5. Create the following directories inside TFTP root /srv/tftp

    $ sudo mkdir -p /srv/tftp/EFI/BOOT
    $ sudo mkdir -p /srv/tftp/kernel
    
  6. Copy the Zephyr image zephyr/zephyr.strip to the /srv/tftp/kernel folder.

    $ sudo cp zephyr/zephyr.strip /srv/tftp/kernel
    
  7. Copy your built version of GRUB to /srv/tftp/grub_x86_64.efi

  8. Create /srv/tftp/EFI/BOOT/grub.cfg containing the following:

    set default=0
    set timeout=10
    
    menuentry "Zephyr Kernel" {
       multiboot /kernel/zephyr.strip
    }
    
  9. TFTP root should be looking like:

    $ tree /srv/tftp
    /srv/tftp
    ├── EFI
    │   └── BOOT
    │       └── grub.cfg
    ├── grub_x86_64.efi
    └── kernel
        └── zephyr.strip
    
  10. Restart dnsmasq service:

    $ sudo systemctl restart dnsmasq.service
    

Prepare Elkhart Lake CRB board for network boot

  1. Enable PXE network from BIOS settings.

    Advanced -> Network Stack Configuration -> Enable Network Stack -> Enable Ipv4 PXE Support
    
  2. Make network boot as the first boot option.

    Boot -> Boot Option #1 : [Network]
    

Booting Elkhart Lake CRB

  1. Connect the board to the host system using the serial cable and configure your host system to watch for serial data.

  2. Power on the Elkhart Lake CRB board.

  3. Verify that the board got an IP address:

    $ journalctl -f -u dnsmasq
    dnsmasq-dhcp[5386]: DHCPDISCOVER(eno2) 00:07:32:52:25:88
    dnsmasq-dhcp[5386]: DHCPOFFER(eno2) 10.1.1.28 00:07:32:52:25:88
    dnsmasq-dhcp[5386]: DHCPREQUEST(eno2) 10.1.1.28 00:07:32:52:25:88
    dnsmasq-dhcp[5386]: DHCPACK(eno2) 10.1.1.28 00:07:32:52:25:88
    
  4. Verify that network booting is started:

    $ journalctl -f -u dnsmasq
    dnsmasq-tftp[5386]: sent /srv/tftp/grub_x86_64.efi to 10.1.1.28
    dnsmasq-tftp[5386]: sent /srv/tftp/EFI/BOOT/grub.cfg to 10.1.1.28
    dnsmasq-tftp[5386]: sent /srv/tftp/kernel/zephyr.strip to 10.1.1.28
    
  5. When the boot process completes, you have finished booting the Zephyr application image.