Skip to content

@evantahler /gist:1574158
Last active

Embed URL


Subversion checkout URL

You can clone with
Download ZIP
Build Node on Phidget (ARMv4tl + emdebian)

For more information, you can read a related blog post on this topic

You can now simply do:

# (turn on full debian repo; turn on ssh)

# be root
sudo su

# update your packages
apt-get update
apt-get upgrade
apt-get dist-upgrade

# get the main depian repo
echo deb sid main > /etc/apt/sources.list.d/sid.list
apt-get update

# install the new hotness
apt-get install apt
apt-get install nodejs npm curl wget htop git rsync less screen

# remove so no mangled packages get installed
rm /etc/apt/sources.list.d/sid.list
apt-get update

This info is now out of date. but left for refrence

Install Node.js on an ARMv4tl Phidget Board (SBC2)

What is a Phidget SBC2?

Node is awesome, Phidgets are awesome. Syngergy. All I wanted to do was tweet the temperature of my house automatically…

What you will need:

  • A computer (or a virtual machine) running a full version of the Debian operating system
    • I used Debian 6.0.3, 64bit
  • A 1GB (or more) USB memory stick
    • The phidgetsbc2 doesn't have enough ram to compile node, so we will be using this memory stick as swap space… which is likely to destroy the memory stick
  • Internet connectivity for both your Debian computer and the Phidget board

Cross-Compile V8 Locally

The v8 stack simply won't compile on the fidget board. I think that it has to do with floating point precision, but I can't be sure. Either way, we are going to compile an ARM binary on our "big" Debian computer and copy it over:

Get codesourcery

SSH to your Debian machine, and su root

sudo mkdir /opt/codesourcery
cd /opt/codesourcery
tar -xvf arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

Get Node and build it for the Phidget board

tar -xvf node-v0.6.7.tar.gz
cd node-v0.6.7/deps/v8
export TOOL_PREFIX=/opt/codesourcery/arm-2009q1/bin/arm-none-linux-gnueabi
export CXX=$TOOL_PREFIX-g++
export AR=$TOOL_PREFIX-ar
export RANLIB=$TOOL_PREFIX-ranlib
export CC=$TOOL_PREFIX-gcc
export LD=$TOOL_PREFIX-ld
export CCFLAGS="-march=armv4 -mno-thumb-interwork"
OR>> export CCFLAGS="-march=armv4 -mno-thumb-interwork -mtune=xscale -mno-thumb -mfloat-abi=soft -mfpu=maverick"
export ARM_TARGET_LIB=/opt/codesourcery/arm-2009q1/arm-none-linux-gnueabi/libc

scons armeabi=soft wordsize=32 snapshot=off arch=arm library=shared mode=release 
scons armeabi=soft wordsize=32 snapshot=off arch=arm library=shared mode=release sample=shell

Copy the entire v8 directory to the memory stick I was running Debian in a virtual machine on my OSX machine, so I rSync'ed it

  • rsync -avz root@{remote_host_ip}:/root/node-v0.6.7/deps/v8 /Volumes/{memory_stick}/node

Update the Phidget Board

New Firmware

Config (via web interface)

Local Configuration (via SSH) on the Phidget board

ssh root@phidgetsbc.local
apt-get update
apt-get -u upgrade
apt-get install gcc wget python openssl make scons libssl-dev libax25 libfile-copy-recursive-perl openbsd-inetd tcpd update-inetd python-software-properties pkg-config htop git subversion

Copy over and configure V8

Plug in the USB drive. I kept the now-compiled V8 source in /node/v8 on the memory stick

export PATH=$PATH:/opt/bin
echo "/opt/lib" >> /etc/
mkdir /opt/share/v8
cp -a /media/{usb_stick_usb_path}/node/v8 /opt/share/.
echo "/opt/share/v8" >> /etc/

Add more RAM

This is likely to destroy the memory stick after a lot of use (USB hates random I/O). Create a swap file and configure it (will take ~10 min)

dd if=/dev/zero of=/media/usb0/swapfile bs=1M count=256
mkswap /media/usb0/swapfile
swapon /media/usb0/swapfile


export JOBS=1
export CC='gcc -march=armv4 -mfloat-abi=soft'
export CCFLAGS='-march=armv4 -mfloat-abi=soft'
export CXX='g++ -march=armv4 -mfloat-abi=soft'
export GCC='-march=armv4 -mfloat-abi=soft'
tar -xvf node-v0.6.7.tar.gz
rm node-v0.6.7.tar.gz
cd node-v0.6.7
./configure --shared-v8 --shared-v8-libpath=/opt/share/v8 --shared-v8-includes=/opt/share/v8/include --without-snapshot 
    ## If the configuration isn't all green, something is wrong
make install

Note: For me, a few times various parts of the 35 steps make preforms will crash with a segmentation fault. I guess this has to do with ram? Make will resume where you left off last, so just run it again


  • curl | sh

Contributors to this guide:


We used this as a pointer to build v8 & then use shared v8 in nodejs on Arch Linux ARM. Thanks for this! (v8 scons via node's waf hates hardfloat ;) )


Happy to help!


Very cool, I can't wait to try with my fork of your original InterfaceKit code.


Hey @RIAEvangelist - want to merge our branches and update the published repo on NPM?


I would love to, but I am not sure about the npm process and how to best merge our stuff, because of how much I changed your original code. This would be my first time doing this sort of thing. Gosh, I forgot what it feels like to be a noob.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.