Galileo Gen1/Gen2
Overview
Developers can use the galileo board configuration to build a Zephyr Kernel that runs on a Galileo Development Board (Gen 1 or Gen 2).
This board configuration enables kernel support for the board’s Quark 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.
Supported Boards
This section provides information about the physical characteristics of boards that the galileo board configuration supports. Subsections contain detailed information on pin names, jumper settings, memory mappings, and board component layout.
Pin Names
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
The galileo 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® 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.
Supported Features
The galileo board configuration supports the following hardware features:
- HPET
- PCI bus
- Advanced Programmed Interrupt Controller (APIC)
- Serial Ports in Polling and Interrupt Driven Modes
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 |
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
The PCI driver initiates a PCI library scan of the PCI bus for any attached devices. When detected, the devices are initialized.
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
The galileo board configuration uses the kernel’s static Interrupt Descriptor Table (IDT) to program the Advanced Programmable Interrupt Controller (APIC) interrupt redirection table.
Interrupts
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 platform configuration uses HPET as a system clock timer.
Procedures
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
Creating a GRUB2 Boot Loader Image from a Linux Host
If you are having problems running an application using the default GRUB of the hardware, follow these steps to test on Galileo2 boards using a custom GRUB.
Install the requirements to build GRUB on your host machine.
On Ubuntu, type:
$ sudo apt-get install gnu-efi:i386 bison libopts25 \ libselinux1-dev autogen m4 autoconf help2man libopts25-dev flex \ libfont-freetype-perl automake autotools-dev libfreetype6-dev \ texinfo
On Fedora, type:
$ sudo dnf install gnu-efi bison m4 autoconf help2man flex \ automake texinfo
Clone and build the GRUB repository using the script in Zephyr tree, type:
$ cd $ZEPHYR_BASE $ ./scripts/build_grub.sh
Find the binary at
$ZEPHYR_BASE/scripts/grub/bin/grub.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.
Set the board configuration to Galileo by changing the make command to:
$ make BOARD=galileo
Use one of these cables for serial output:
Format a microSD as FAT
Create the following directories
efi
efi/boot
kernel
Copy the kernel file
zephyr.strip
to the$SDCARD/kernel
folder.Copy your built version of GRUB to
$SDCARD/efi/boot/bootia32.efi
Create
$SDCARD/efi/boot/grub.cfg
containing the following:set default=0 set timeout=10 menuentry "Zephyr Kernel" { multiboot /kernel/zephyr.elf }
Insert the SDcard in the Galileo board.
Connect the board to the host system using the serial cable.
Configure your host system to watch for serial data.
- On Linux, screen is a popular method for reading serial data.
- On Windows, PuTTY has an option to set up configuration for serial data.
Power on the Galileo board.
Booting the Galileo Board
Boot the Galileo board from the boot device using GRUB2 with the boot loader present in the on-board flash.
Note
A stripped project image file is automatically created when the
project is built. The stripped image has removed debug
information from the ELF
file.
Prerequisites
The automatically created stripped Zephyr application image is in the project directory.
A serial port is available for communication.
Note
For details on how to connect and configure the serial port, see the Getting Started guide that you received with the board.
Steps
Insert the prepared boot device (micro-SD card or USB flash drive) into the board and start the board.
The boot process begins and displays a large amount of output.
When the following output appears, press
F7
:[Bds]BdsWait ...Zzzzzzzzzzzz... [Bds]BdsWait(5)..Zzzz... [Bds]BdsWait(4)..Zzzz... [Bds]Press [Enter] to directly boot. [Bds]Press [F7] to show boot menu options.
From the menu that appears, select UEFI Internal Shell.
At the shell prompt enter:
grub.efi
GRUB2 starts and a menu shows entries for the items you added to the
file grub.cfg
.Select the image you want to boot and press Enter.
When the boot process completes, you have finished booting the Zephyr application image.
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
- Ethernet
- Supervisor Mode Execution Protection (SMEP)
Bibliography
- Intel® Galileo Datasheet, Order Number: 329681-001US
- Intel® Quark SoC X1000 Datasheet, Order Number: 329676-001US