반응형

 


 Raspberry Pi 자체에서 빌드 툴을 설치해서 소스를 빌드할 수 있으나, 많은 시간이(사실 어마어마한) 소요된다. 라즈베리파이에서 DB등, 자신이 원하는 프로그램을 빌드해서 설치하려면 크로스 컴파일 환경에서 컴파일하고 라즈베리파이로 전송해서 사용하는게 정신 건강에 좋을 수 있다.


 이번 포스팅에서는 유분투 16.04에서 라즈베리파이 프로그램을 빌드하기 위한 방법을 정리해 본다.


1. Cross-Compile 환경 설정

다음의 사이트에서 크로스컴파일을 위한 툴을 다운로드 한다. 


https://github.com/raspberrypi/tools


명령어: git clone https://github.com/raspberrypi/tools


64 비트 우분투에서는 해당 툴이 실행되지 않는다. 32비트 지원을 위하여 i386 아키텍처를 활성화 시키고, 32비트 라이브러리를 설치한다.


sudo dkpg --add-architecture i386

sudo apt-get update

sudo apt-get install libc6:i386 libstdc++6:i386

sudo apt-get install zlib1g:i386


Bash  프로파일에  경로를 설정한다. (~ 에서 vi .profile로 경로 설정)


예:   export PATH=$PATH:~/raspberrypi/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin


source ~/.profile로 경로를 반영하고 arm-linux-gnueabihf-gcc -v 로 실행되는지 확인한다.


2. Raspberry Pi Zero W  용 node.js Cross Compile 해보기


Raspberry Pi Zero W에서 이용 가능한 Node.js 를 컴파일 하는 것을 설명한다. (Raspberry Pi 3는 조금 다르다.) node.js 의 최신 소스를 다운로드 한다.


wget https://nodejs.org/dist/v8.10.0/node-v8.10.0.tar.gz


 압축을 풀고 해당 폴더로 이동한다.


tar xzvf node-v8.10.0.tar.gz 

cd node-v8.10.0/


 다음과 같은 환경 변수를 설정한다. Raspberry Pi Zero W의 경우 armv7이 아닌 armv6으로 설정해 줘야 한다.

TOOL_HOME=~/raspberrypi/tools/arm-bcm2708/arm-linux-gnueabihf

GCCARCH="arm-linux-gnueabihf"

DEBARCH="armhf"


export CC="${GCCARCH}-gcc"

export CXX="${GCCARCH}-g++"

export AR="${GCCARCH}-ar"

export RANLIB="${GCCARCH}-ranlib"

export LINK="${GCCARCH}-g++"

export CFLAGS="-march=armv6j -mfpu=vfp -mfloat-abi=hard -DUSE_EABI_HARDFLOAT"

export OPENSSL_armcap=6

export GYPFLAGS="-Darmeabi=hard -Dv8_use_arm_eabi_hardfloat=true -Dv8_can_use_vfp3_instructions=false -Dv8_can_use_vfp2_instructions=true -Darm7=0 -Darm_vfp=vfp"

export VFP3=off

export VFP2=on

export PATH=$PATH:$TOOL_HOME/bin 


다음으로 configuration을 해준다.

./configure --prefix=./out/usr/local --without-snapshot --dest-cpu=arm --dest-os=linux --cross-compiling --with-arm-fpu=vfp --without-intl


make

make install


하게 되면 ./out/usr/local 밑에 컴파일된 노드가 빌드된다. 이 밑에 있는 폴더와 파일을 RPI-Zero W 의  /usr/local 에 옮기면 컴파일된 노드를 이용 가능하다.


3. Raspberry Pi3 용 컴파일 옵션

RPI3의 경우 다음의 컴파일 옵션으로 설정(CFLAGS)하는게 좋다고 한다. (https://www.raspberrypi.org/forums/viewtopic.php?t=144115)  

-O2 -Otime

-marm

-mabi=aapcs-linux

-march=armv8-a+crc

-mfloat-abi=hard

-mfpu=neon-fp-armv8

#other options are 'fp-armv8', 'neon-fp-armv8', and 'crypto-neon-fp-armv8'

-funsafe-math-optimizations

-mhard-float

-mlittle-endian

-mtls-dialect= gnu2 #or just gnu if gnu2 doesn't work

-mtune=cortex-a53

-munaligned-access

-mvectorize-with-neon-quad 


4. NPM Cross-Compile

node.js npm 모듈은 다음처럼 Cross-Compile이 가능하다.


npm install --target_arch=arm --build-from-source "module_name" 

반응형
Posted by alias
,