.. _ehl_crb: 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 |reg| Atom |trade| SoC. Hardware ******** General information about the board can be found at the `EHL`_ website. .. include:: ../../../../../../../../zephyr/soc/x86/elkhart_lake/doc/supported_features.txt 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. .. contents:: :depth: 1 :local: :backlinks: top Build Zephyr application ======================== #. Build a Zephyr application; for instance, to build the ``hello_world`` application on Elkhart Lake CRB: .. zephyr-app-commands:: :zephyr-app: samples/hello_world :board: ehl_crb :goals: build .. note:: A Zephyr EFI image file named :file:`zephyr.efi` is automatically created in the build directory after the application is built. Preparing the Boot Device ========================= Prepare a USB flash drive to boot the Zephyr application image on an Elkhart Lake CRB board. #. 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: .. code-block:: console $ mkfs.vfat -F 32 .. 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. #. Copy the Zephyr EFI image file :file:`zephyr/zephyr.efi` to the USB drive. Booting the Elkhart Lake CRB Board ================================== Boot the Elkhart Lake CRB board to the EFI shell with USB flash drive connected. #. Insert the prepared boot device (USB flash drive) into the Elkhart Lake CRB board. #. 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. #. Power on the Elkhart Lake CRB board. #. When the following output appears, press :kbd:`F7`: .. code-block:: console Press or to enter setup. #. From the menu that appears, select the menu entry that describes that particular EFI shell. #. From the EFI shell select Zephyr EFI image to boot. .. code-block:: console Shell> fs0:zephyr.efi Booting the Elkhart Lake CRB Board over network =============================================== Build Zephyr image ------------------ #. Follow `Build Zephyr application`_ steps to build Zephyr image. Prepare Linux host ------------------ #. Install DHCP, TFTP servers. For example ``dnsmasq`` .. code-block:: console $ sudo apt-get install dnsmasq #. Configure DHCP server. Configuration for ``dnsmasq`` is below: .. code-block:: console # Only listen to this interface interface=eno2 dhcp-range=10.1.1.20,10.1.1.30,12h #. Configure TFTP server. .. code-block:: console # tftp enable-tftp tftp-root=/srv/tftp dhcp-boot=zephyr.efi ``zephyr.efi`` is a Zephyr EFI binary created above. #. Copy the Zephyr EFI image :file:`zephyr/zephyr.efi` to the :file:`/srv/tftp` folder. .. code-block:: console $ cp zephyr/zephyr.efi /srv/tftp/ #. Restart ``dnsmasq`` service: .. code-block:: console $ sudo systemctl restart dnsmasq.service Prepare Elkhart Lake CRB board for network boot ----------------------------------------------- #. Enable boot from PXE. Go to EFI shell and make sure that the first boot option is ``UEFI PXEv4``. .. code-block:: console Shell> bcfg boot dump Option: 00. Variable: Boot0007 Desc - UEFI PXEv4 (MAC:6805CABC1997) DevPath - PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)/MAC(6805CABC1997,0x0)/IPv4(0.0.0.0) Optional- Y ... #. If UEFI PXEv4 is not the first boot option use ``bcfg boot mv`` command to change boot order .. code-block:: console Shell> bcfg boot mv 7 0 Booting Elkhart Lake CRB ------------------------ #. Connect the board to the host system using the serial cable and configure your host system to watch for serial data. #. Power on the Elkhart Lake CRB board. #. Verify that the board got an IP address: .. code-block:: console $ 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 #. Verify that network booting is started: .. code-block:: console $ journalctl -f -u dnsmasq dnsmasq-tftp[5386]: sent /srv/tftp/zephyr.efi to 10.1.1.28 #. When the boot process completes, you have finished booting the Zephyr application image. .. _EHL: https://www.intel.com/content/www/us/en/products/docs/processors/embedded/enhanced-for-iot-platform-brief.html