| .. _galileo: |
| |
| Galileo Gen1/Gen2 |
| ################# |
| |
| Overview |
| ******** |
| |
| Intel Galileo is the first in a line of Arduino-certified development boards |
| based on Intel x86 architecture and is designed for the maker and education |
| communities. It features the Intel Quark SoC X1000, the first product from the |
| Intel Quark technology family of low-power, small-core products. |
| |
| .. figure:: galileo.jpg |
| :width: 600px |
| :align: center |
| :alt: Galileo |
| |
| Galileo (Credit: Intel) |
| |
| This board configuration enables kernel support for the board's Intel |reg| Quark |trade| SoC, |
| along with the following devices: |
| |
| * High Precision Event Timer (HPET) |
| |
| * Peripheral Component Interconnect (PCI) bus query |
| |
| * Serial Ports in Polling and Interrupt Driven Modes |
| |
| .. note:: |
| This board configuration may work with similar boards that are not officially |
| supported. |
| |
| Hardware |
| ******** |
| |
| This section provides information about the physical characteristics of the |
| board. |
| Subsections contain detailed information on pin names, jumper settings, memory |
| mappings, and board component layout. |
| |
| Supported Features |
| ================== |
| |
| This board supports the following hardware features: |
| |
| * HPET |
| |
| * PCI bus |
| |
| * Advanced Programmed Interrupt Controller (APIC) |
| |
| * Serial Ports in Polling and Interrupt Driven Modes |
| |
| * Ethernet in Interrupt Driven Mode |
| |
| +-----------+------------+-----------------------+ |
| | Interface | Controller | Driver/Component | |
| +===========+============+=======================+ |
| | HPET | on-chip | system clock | |
| +-----------+------------+-----------------------+ |
| | PCI | on-chip | PCI library | |
| +-----------+------------+-----------------------+ |
| | APIC | on-chip | interrupt controller | |
| +-----------+------------+-----------------------+ |
| | UART | on-chip | serial port-polling; | |
| | | | serial port-interrupt | |
| +-----------+------------+-----------------------+ |
| | Ethernet | on-chip | Ethernet | |
| +-----------+------------+-----------------------+ |
| |
| The kernel currently does not support other hardware features. |
| See the `Intel Quark Core Hardware Reference Manual`_ for a |
| complete list of Galileo board hardware features, and the |
| `Intel Quark Software Developer Manual for Linux`_ |
| |
| |
| PCI |
| ---- |
| |
| PCI drivers assume that IO regions and IRQs for devices are |
| preconfigured identically by the firmware on all supported devices. |
| This configuration is specified in the Kconfig file for the Intel |
| Quark X1000 SoC. The PCI library supports dynamically enumerating PCI |
| devices, but that support is disabled by default. |
| |
| .. note:: |
| The PCI library does not support 64-bit devices. |
| Memory address and size storage only require 32-bit integers. |
| |
| Serial Port Polling Mode Support |
| -------------------------------- |
| |
| The polling mode serial port allows debug output to be printed. |
| |
| For more information, see `Intel Quark SoC X1000 Datasheet`_, |
| section 18.3.3 FIFO Polled-Mode Operation |
| |
| |
| Serial Port Interrupt Mode Support |
| ---------------------------------- |
| |
| The interrupt mode serial port provides general serial communication |
| and external communication. |
| |
| For more information, see `Intel Quark SoC X1000 Datasheet`_, section 21.12.1.4.5 Poll Mode |
| |
| |
| Interrupt Controller |
| -------------------- |
| |
| This board uses the kernel's static Interrupt Descriptor Table (IDT) to program the |
| Advanced Programmable Interrupt Controller (APIC) interrupt redirection table. |
| |
| |
| +-----+-------+---------+--------------------------+ |
| | IRQ | Name | Remarks | Used by Zephyr Kernel | |
| +=====+=======+=========+==========================+ |
| | 17 | INTB | UART | serial port when used in | |
| | | | | interrupt mode | |
| +-----+-------+---------+--------------------------+ |
| | 20 | timer | HPET | timer driver | |
| +-----+-------+---------+--------------------------+ |
| |
| HPET System Clock Support |
| ------------------------- |
| |
| Galileo uses HPET timing with legacy-free timer support. The Galileo board |
| configuration uses HPET as a system clock timer. |
| |
| Ethernet Support |
| ----------------- |
| |
| The Ethernet driver allocates a Direct Memory Access (DMA)-accessible |
| pair of receive and transmit buffers and descriptors. The driver |
| operates the network interface in store-and-forward mode and enables |
| the receive interrupt. |
| |
| For more information, see `Intel Quark SoC X1000 Datasheet`_, |
| section 15.0 10/100 Mbps Ethernet |
| |
| Connections and IOs |
| =================== |
| |
| For a component layout diagram showing pin names, see page 46 of the |
| `Intel Quark SoC X1000 Datasheet`_. |
| |
| See also the `Intel Galileo Datasheet`_. |
| |
| For the Galileo Board Connection Diagram see page 9 of the `Intel Galileo Board User Guide`_. |
| |
| |
| Jumpers & Switches |
| ================== |
| |
| The kernel uses the Galileo default jumper settings except for the IOREF jumper, |
| which must be set to match the external operating voltage of either 3.3 V or 5 V. |
| |
| The Galileo default switch settings are: |
| |
| +--------+--------------+ |
| | Jumper | Setting | |
| +========+==============+ |
| | IOREF | 3.3V or 5V | |
| +--------+--------------+ |
| | VIN | 5V Jumpered | |
| +--------+--------------+ |
| |
| For more information, see page 14 of the |
| `Intel Galileo Board User Guide`_. |
| |
| |
| Memory Mappings |
| =============== |
| |
| This board configuration uses default hardware memory map |
| addresses and sizes. |
| |
| For a list of memory mapped registers, see page 868 of the |
| `Intel Quark SoC X1000 Datasheet`_. |
| |
| |
| Component Layout |
| ================ |
| |
| See page 3 of the Intel |reg| Galileo Datasheet for a component layout |
| diagram. Click the link to open the `Intel Galileo Datasheet`_. |
| |
| |
| For a block diagram, see page 38 of the `Intel Quark SoC X1000 Datasheet`_. |
| |
| |
| Programming and Debugging |
| ************************* |
| |
| Use the following procedures for booting an image on a Galileo board. |
| |
| * `Creating a GRUB2 Boot Loader Image from a Linux Host`_ |
| |
| * `Preparing the Boot Device`_ |
| |
| * `Booting the Galileo Board`_ |
| |
| |
| .. _grub2: |
| |
| 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. |
| |
| #. Install the requirements to build GRUB on your host machine. |
| |
| On Ubuntu, type: |
| |
| .. code-block:: console |
| |
| $ sudo apt-get install bison autoconf libopts25-dev flex automake \ |
| pkg-config gettext autopoint |
| |
| On Fedora, type: |
| |
| .. code-block:: console |
| |
| $ sudo dnf install gnu-efi bison m4 autoconf help2man flex \ |
| automake texinfo gettext-devel |
| |
| #. Clone and build the GRUB repository using the script in Zephyr tree, type: |
| |
| .. code-block:: console |
| |
| $ cd $ZEPHYR_BASE |
| $ ./boards/x86/common/scripts/build_grub.sh i386 |
| |
| #. Find the binary at |
| :file:`$ZEPHYR_BASE/boards/x86/common/scripts/grub/bin/grub_i386.efi`. |
| |
| |
| |
| Preparing the Boot Device |
| ========================= |
| |
| Prepare either an SD-micro card or USB flash drive to boot the Zephyr |
| application image on a Galileo board. The following instructions apply to both |
| devices. |
| |
| |
| #. Build a Zephyr application; for instance, to build the ``hello_world`` |
| application on Galileo: |
| |
| .. zephyr-app-commands:: |
| :zephyr-app: samples/hello_world |
| :board: galileo |
| :goals: build |
| |
| .. note:: |
| |
| A stripped project image file named :file:`zephyr.strip` is automatically |
| created in the build directory after the application is built. This image |
| has removed debug information from the :file:`zephyr.elf` file. |
| |
| #. Use one of these cables for serial output: |
| |
| `<http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm>`_ |
| |
| #. Format a microSD as FAT |
| |
| #. Create the following directories |
| |
| :file:`efi` |
| |
| :file:`efi/boot` |
| |
| :file:`kernel` |
| |
| #. Copy the kernel file :file:`outdir/galileo/zephyr.strip` to the :file:`$SDCARD/kernel` folder. |
| |
| #. Copy your built version of GRUB to :file:`$SDCARD/efi/boot/bootia32.efi` |
| |
| #. Create :file:`$SDCARD/efi/boot/grub.cfg` containing the following: |
| |
| .. code-block:: console |
| |
| set default=0 |
| set timeout=10 |
| |
| menuentry "Zephyr Kernel" { |
| multiboot /kernel/zephyr.strip |
| } |
| |
| Booting the Galileo Board |
| ========================= |
| |
| Boot the Galileo board from the boot device using GRUB2 with the firmware |
| present in the on-board flash. |
| |
| Steps |
| ----- |
| |
| 1. Insert the prepared boot device (micro-SD card or USB flash |
| drive) into the Galileo board. |
| |
| 2. Connect the board to the host system using the serial cable and |
| configure your host system to watch for serial data. See |
| `<https://software.intel.com/en-us/articles/intel-galileo-gen-2-board-assembly-using-eclipse-and-intel-xdk-iot-edition>`_ |
| for the gen. 2 board, |
| `<https://software.intel.com/en-us/articles/intel-galileo-gen-1-board-assembly-using-eclipse-and-intel-xdk-iot-edition>`_ |
| for the gen. 1 board, or the Getting Started guide that you |
| received with the board. |
| |
| .. note:: |
| On Windows, PuTTY has an option to set up configuration for |
| serial data. Use a baud rate of 115200 and the SCO keyboard |
| mode. The keyboard mode option is in a submenu of the Terminal |
| menu on the left side of the screen. |
| |
| 3. Power on the Galileo board. |
| |
| 4. When the following output appears, press :kbd:`F7`: |
| |
| .. code-block:: console |
| |
| Press [Enter] to directly boot. |
| Press [F7] to show boot menu options. |
| |
| 5. From the menu that appears, select :guilabel:`UEFI Misc Device` to |
| boot from a micro-SD card. To boot from a USB flash drive, 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 :file:`grub.cfg`. |
| |
| 6. Select the image you want to boot and press :guilabel:`Enter`. |
| |
| When the boot process completes, you have finished booting the |
| Zephyr application image. |
| |
| .. note:: |
| If the following messages appear during boot, they can be safely |
| ignored. |
| |
| .. code-block:: console |
| |
| WARNING: no console will be available to OS |
| error: no suitable video mode found. |
| |
| Known Problems and Limitations |
| ****************************** |
| |
| At this time, the kernel does not support the following: |
| |
| * Isolated Memory Regions |
| * Serial port in Direct Memory Access (DMA) mode |
| * Supervisor Mode Execution Protection (SMEP) |
| |
| Bibliography |
| ************ |
| |
| 1. `Intel Galileo Datasheet`_, Order Number: 329681-003US |
| |
| .. _Intel Galileo Datasheet: |
| https://www.intel.com/content/dam/support/us/en/documents/galileo/sb/galileo_datasheet_329681_003.pdf |
| |
| 2. `Intel Galileo Board User Guide`_. |
| |
| .. _Intel Galileo Board User Guide: |
| http://download.intel.com/support/galileo/sb/galileo_boarduserguide_330237_001.pdf |
| |
| 3. `Intel Quark SoC X1000 Datasheet`_, Order Number: 329676-001US |
| |
| .. _Intel Quark SoC X1000 Datasheet: |
| https://communities.intel.com/servlet/JiveServlet/previewBody/21828-102-2-25120/329676_QuarkDatasheet.pdf |
| |
| 4. `Intel Quark Core Hardware Reference Manual`_. |
| |
| .. _Intel Quark Core Hardware Reference Manual: |
| https://www.intel.com/content/dam/support/us/en/documents/processors/quark/sb/329678_intelquarkcore_hwrefman_002.pdf |
| |
| 5. `Intel Quark Software Developer Manual for Linux`_. |
| |
| .. _Intel Quark Software Developer Manual for Linux: |
| http://www.intel.com/content/dam/www/public/us/en/documents/manuals/quark-x1000-linux-sw-developers-manual.pdf |