Intel Galileo Gen 2 上运行带有 Arduino 兼容的 Debian

最近学校课设,用到了Intel Galileo Gen2,为了使用NodeJS开发安装了Galileo-Debian,之后遇到了两个问题,记录下:

1、安装Debian之后失去了原来的Arduino兼容功能。

2、安装Debian之后不停地pthread lib segfault。

添加Arduino兼容功能:

把Intel给的Yacto镜像解开看看,发现Yacto上开机自起/opt/cln/galileo,”监听”ttyGS0,负责Arduino部分的功能。

直接拿来用即可,不过Yacto用的似乎不是glibc,导致Debian中无法直接使用,为了省事直接把原镜像mount后chroot进去运行sketch即可,注意把 /dev 等涉及硬件操作的挂载点暴露给chroot。

注释掉/etc/inittab中的以下行,ttyGS0要交给shetch:

GS0:23:respawn:/sbin/getty -L ttyGS0 115200 vt100

把Intel提供的SDCard.1.0.4.tar.bz2解压,image-full-galileo-clanton.ext3放到sd卡的/opt/galileo-ketch/,Galileo开机执行以下脚本即可:

#!/bin/bash
dir="/opt/galileo-sketch"
mount $dir/image-full-galileo-clanton.ext3 $dir/mount
mount --rbind /dev $dir/mount/dev
mount --rbind /sys $dir/mount/sys
mount --rbind /proc $dir/mount/proc
mount --rbind /run $dir/mount/run
mount --rbind /tmp $dir/mount/tmp
nohup chroot $dir/mount /usr/bin/env HOME=/home/root PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash -c "source /etc/profile; /opt/cln/galileo/launcher.sh" &>/var/log/galileo-sketch.log &

F00F Bug

Google “debian galileo pthread segfault”后,发现有人遇到这问题了,原因是Intel Quark CPU有Bug,在F00F指令时触发。F0对应锁总线,而Galileo为单核设备,可以忽略这个操作,直接用十六进制编辑器吧F0替换成90(NOP),问题解决。

/lib/i386-linux-gnu/libpthread.so.0中所有的:

f0 0f b1 8b 94 21 00 00

替换为:

90 0f b1 8b 94 21 00 00

有其它f00f导致的segfault可以用类似方法解决。

 

相关链接:

Intel Galileo Support:http://www.intel.com/support/galileo/sb/CS-035101.htm

Galileo-Debian:http://sourceforge.net/projects/galileodebian/

Debian Bug:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=738575

Leave a Reply

Your email address will not be published. Required fields are marked *