最近学校课设,用到了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