Galileo Gen 2

From Bobs Projects
Jump to: navigation, search

Intel Galileo Gen 2 Development Board is an Arduino-compatible SBC with an Intel 32-bit Quark X1000 CPU (i386 compatible).

The Gen 2 board allows the I/O to run at 3.3V or 5v, so can accomodate a number of 3.3V modules such as the FLiR Dev Kit.

The Gen 2 Fabrication version is "g", not to be confused with fab variants "c", "d" and "e", which are all not Gen 2.

Contents

Debian

Galileo can run Debian GNU/Linux, but with some caveats.

F00F Bug

The early Quark X1000 CPUs suffer from a problem not unlike the Pentium F00F bug, where the "lock cmpxchg ..." instruction (only really useful for multi-threaded systems) causes a segfault.

Alas, Debian Wheezy build of glibc uses this instruction, in libpthread.so in particular, which is used by SSH etc. and so we have brokenness.

One workaround is to re-build the glibc package with "-with-cpu=i386" (see Debian Bug report logs - #738575 pthread: segfault in libpthread on Intel Galileo board).

Another is to use a "patched" version of /lib/i386-linux-gnu/libpthread-2.13.so available from http://krmnn.de/temp/libpthread-2.13.so.fixed, as per the post at Galileo Support Community.

SD Card Image

galileo-debian has a SD Card image with Debian Wheezy on it for Galileo. Alas the default root password is not as specified on the website, nor does a "user" user exist.

Therefore, mount the image on a normal Linux system and change the password field for root in etc/shadow. (Also, replace libpthreads-2.13.so, as above). (Also, a good opportunity to increase the size of the root partition of the SD Card before using it on the Galileo).

Building image

Some instructions available at: SetupSDCard (on galileo-debian wiki), but need to download Board Support Package from Intel Quark BSP.

Controlling from C

GPIO etc. on Galileo can be controlled from any language by reading/writing to a set of "files" in sysfs (specifically /sys/class/gpio). There are examples of this available at: BurglarAlarm.c

Blink as shell script

#!/bin/sh

GP_LED=7  # 39 for non-Gen 2

GPIO_BASE="/sys/class/gpio"
GPIO_LED=${GPIO_BASE}/gpio${GP_LED}

if [ ! -d ${GPIO_LED} ] ; then
  echo -n ${GP_LED} > ${GPIO_BASE}/export
fi

echo -n "out" > ${GPIO_LED}/direction

while /bin/true ; do
  echo -n "0" > ${GPIO_LED}/value
  sleep 1
  echo -n "1" > ${GPIO_LED}/value
  sleep 1
done

Non-Gen 2 Galileo links

The following links contain code with constants that refer to (eg.) GPIO mappings on non-Gen 2 boards, but are otherwise quite useful:

External links