這篇其實只是筆記一下而已,因為之前一直再做 Cross Compile 總是遇到詭異問題,雖然都有解,但是每次都要找總不是個辦法,所以寫一下筆記以防自己老年痴呆忘記了。
首先請先去買個樹莓派。
事前
我的作業系統是 Ubuntu 12.04LTS,然後這次用的是目前最新的 nodejs-0.8.16
,至於 toolchain 的部份請參考這篇:
其實上面那篇就已經把全部都交代完畢了,所以我筆記文就到這裡結束吧(打手
實際操作
首先抓下 raspberrypi 所提供的 tool,
git clone git://github.com/raspberrypi/tools.git
從 git 拉下來之後,請在你的 shell 中的 PATH 加入這個東西,
/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin
然後去抓一下這個 shell script 來用,
wget -c https://gist.github.com/raw/3246346/crosscompile.sh
為了怕鍊結失效,所以我這裡備份一下,
#!/bin/sh -e
if [ -z "$HOST" ]; then
HOST=arm-bcm2708hardfp-linux-gnueabi
fi
export CPP="${HOST}-gcc -E"
export STRIP="${HOST}-strip"
export OBJCOPY="${HOST}-objcopy"
export AR="${HOST}-ar"
export RANLIB="${HOST}-ranlib"
export LD="${HOST}-ld"
export OBJDUMP="${HOST}-objdump"
export CC="${HOST}-gcc"
export CXX="${HOST}-g++"
export NM="${HOST}-nm"
export AS="${HOST}-as"
export PS1="[${HOST}] \w$ "
bash --norc
執行 ./crosscompile.sh
之後,會進入一個 shell,
hinablue at hinablue-HP-ENVY-14-Notebook-PC in ~
$ ./crosscompile.sh
[arm-bcm2708hardfp-linux-gnueabi] ~$
然後就進入你抓下來的 nodejs 原始碼資料夾,執行 configure
來作設定,
[arm-bcm2708hardfp-linux-gnueabi] ~$ cd node-v0.8.16/
/home/hinablue/node-v0.8.16
[arm-bcm2708hardfp-linux-gnueabi] ~/node-v0.8.16$ ./configure --without-snapshot --prefix=/opt/node
就是,我不需要 snapshot
,然後目標資料夾是 /opt/node
,你可以先建立這個資料夾,然後把 owner 改成你現在的帳號,屆時要 make install
的時候才不會噴錯誤。
[arm-bcm2708hardfp-linux-gnueabi] ~/node-v0.8.16$ ./configure --without-snapshot --prefix=/opt/node
{ 'target_defaults': { 'cflags': [],
'default_configuration': 'Release',
'defines': [],
'include_dirs': [],
'libraries': []},
'variables': { 'armv7': 0,
'clang': 0,
'gcc_version': 47,
'host_arch': 'arm',
'node_install_npm': 'true',
'node_install_waf': 'true',
'node_prefix': '/opt/node',
'node_shared_openssl': 'false',
'node_shared_v8': 'false',
'node_shared_zlib': 'false',
'node_unsafe_optimizations': 0,
'node_use_dtrace': 'false',
'node_use_etw': 'false',
'node_use_openssl': 'true',
'target_arch': 'arm',
'v8_no_strict_aliasing': 1,
'v8_use_arm_eabi_hardfloat': 'true',
'v8_use_snapshot': 'false'}}
creating ./config.gypi
creating ./config.mk
上面就是執行完 configure
之後顯示的東西啦,然後就,
make --jobs=8
make install
然後就打完收工了(喂
由於我是要做 Hard Float Point
的,畢竟由硬體來作效能會好些。而且樹莓派本身的 ARM 也支援 armhf 所以這方面沒有太大的問題。然後,如果你 make
出了問題,這個設定看能不能解,我是可以啦,如果不行可能就是人品問題了
export LD="$CXX"
export LINK="$CXX"
export GYP_DEFINES="armv7=0"
export CCFLAGS='-march=armv6'
export CXXFLAGS='-march=armv6'
結語
最後把 /opt/node
整組拷貝到樹莓派裡面,就可以用了,
pi at raspberrypi in ~
$ node -v
v0.8.16
pi at raspberrypi in ~
$ npm -v
1.1.69
歐,/opt/node
拷貝過去之後 PATH
請自己設定一下啦(啦啦啦啦啦啦啦啦啦