public
Last active

Build Node on Phidget (ARMv4tl + emdebian)

  • Download Gist
gistfile1.md
Markdown

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 ftp://ftp.dk.debian.org/debian/ sid main > /etc/apt/sources.list.d/sid.list

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

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

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
wget http://www.codesourcery.com/sgpp/lite/arm/portal/package4571/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
tar -xvf arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

Get Node and build it for the Phidget board

wget http://nodejs.org/dist/v0.6.7/node-v0.6.7.tar.gz
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/ld.so.conf
ldconfig
mkdir /opt/share/v8
cp -a /media/{usb_stick_usb_path}/node/v8 /opt/share/.
echo "/opt/share/v8" >> /etc/ld.so.conf
ldconfig

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

Node.js

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'
wget http://nodejs.org/dist/v0.6.7/node-v0.6.7.tar.gz
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
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

NPM

  • curl http://npmjs.org/install.sh | 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 ;) )

Very cool, I can't wait to try with my fork of your original InterfaceKit code.
https://github.com/RIAEvangelist/nodePhidgetAPI

Hey @RIAEvangelist - want to merge our branches and update the published repo on NPM? http://search.npmjs.org/#/phidgets

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.

Ha!

All you should need to do is open a pull request on GitHub back to my repo, and I can do the merge. GitHub will be awesome and maintain your commits and note that both of us contributed to the project. Then I'll version++ the project on npmjs.org and list you as an owner. Since I'm the repo maintainer, I have to do all the administrative stuff anyway

pull request sent, I didn't finish modifying the npm file when I was
going to push my version up, so you will definitely need to fix that
and the owner creator notes. I may have been a bit over zealous.

:) here is what I was working on.

http://www.facebook.com/v/3299876256693

On Sun, Jun 10, 2012 at 6:43 PM, Evan Tahler
reply@reply.github.com
wrote:

Ha!
All you should need to do is open a pull request on GitHub back to my repo, and I can do the merge.  GitHub will be awesome and maintain your commits and note that both of us contributed to the project.  Then I'll version++ the project on npmjs.org and list you as an owner.  Since I'm the repo maintainer, I have to do all the administrative stuff anyway

412.897.6361
Evan Tahler

On Sunday, June 10, 2012 at 3:28 PM, Brandon Miller wrote:

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.


Reply to this email directly or view it on GitHub:
https://gist.github.com/1574158


Reply to this email directly or view it on GitHub:
https://gist.github.com/1574158

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.