백곡시스템

ubuntu 16.04 에서 Raspberry Pi Cross Compile 하기 (node.js 사례)

출처: http://alnova2.tistory.com/1188

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”

댓글 남기기

Close Menu