Ubuntu/Debian ARM Cross compile 환경

이 글은 우분투, 리눅스 박스에서 GNU ARM Cross compiler 를 설치하고 관리하는 방법을 다루고 있다.

2018-05-17: sidebar.nav/linux 사용
{: .right-history}

ARM Cross compiler 설치

우분투/데비안 리눅스에서 제공하는 ARM Toolchain 환경은 Linaro 툴체인을 바탕으로 만들어져 있어서 두가지 버전으로 제공된다. Hard Float을 지원하는 버전과 그렇지 않은 버전이다.[^1]

(1) gcc-arm-linux-gnueabi

이 툴체인은 EABI가 gcc의 -mfloat-abi=soft 혹은 -mfloat-abi=softfp 옵션으로 생성한다는 의미이다.

(2) gcc-arm-linux-gnueabihf

이 툴체인은 EABI가 gcc -mfloat-abi=hard 옵션으로 생성한다는 의미이다. 이 의미는 Function Calling Convention이 double, float 사용시 FPU 레지스터에 올려서 전달하고 반환도 FPU 레지스터를 사용하게 된다는 것이다.

update-alternatives

플랫폼에 따른 gcc 환경을 변경하는 것은 update-alternatives을 사용한다. 링크 update-alternatives에서 설명을 볼 수 있다.

ARM toolchain 설치

Ubuntu 14.04 에서 테스트했다. 그 이상 버전도 충분히 가능하다. 아래 도구를 설치하면 각 플랫폼에 대한 binutils–arm-linux-, gcc-arm-linux-, g++-arm-linux-, cpp-arm-linux- 도구가 설치된다.

Ubuntu14.04 에서 arm toolchain 설치

Coretex ARM

1
2
sudo apt-get install gcc-arm-linux-gnueabihf
sudo apt-get install g++-arm-linux-gnueabihf

ARM

1
2
$ sudo apt-get install gcc-arm-linux-gnueabi
$ sudo apt-get install g++-arm-linux-gnueabi

Bare metal ARM

1
2
$ sudo apt-get install gcc-arm-none-eabi
$ sudo apt-get install g++-arm-none-eabi

필요하면 gfortran-arm-linux-, gobjc++-arm-linux- 등의 도구를 설치한다.

툴 체인 등록

여러 개발 보드의 cross compiler를 사용하기 위해서 해당 버전의 접두어를 사용해 보자. arm 을 사용하는 보드는 arm-linux-gnueabi[hf] 명칭을 사용한다.

1
$ update-alternatives --list arm-linux-gnueabihf

새로운 arm-linux-gnueabihf- 를 등록하자.

arm-linux-gnueabihf 등록하기

arm-linux-gnueabihf-gcc-4.8 관련 도구를 gcc 그룹에 등록하기

1
2
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc arm-linux-gnueabihf /usr/bin/arm-linux-gnueabihf-gcc-4.8 50 \
--slave /usr/bin/arm-linux-gnueabihf-g++ arm-linux-gnueabihf-g++ /usr/bin/arm-linux-gnueabihf-g++-4.8

arm-linux-gnueabihf-gcc-4.7 관련 도구를 gcc 그룹에 등록하기

1
2
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc arm-linux-gnueabihf /usr/bin/arm-linux-gnueabihf-gcc-4.7 40 \
--slave /usr/bin/arm-linux-gnueabihf-g++ arm-linux-gnueabihf-g++ /usr/bin/arm-linux-gnueabihf-g++-4.7

Raspberry pi Toolchain 등록하기

Raspberry pi 배포본에서 제공하는 arm gcc compile를 arm-linux-gnueabihf 그룹에 등록해 보자 [^2].

git으로 툴체인을 다운받아 ~/raspberrypi/tools 에 설치한다고 가정한다. [^3]

1
git clone https://github.com/raspberrypi/tools ~/raspberrypi/tools

다운로드한 tools 밑에 32bit, 64bit 버전의 컴파일러가 있다.

32bit 버전은 tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
64bit 버전: tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

다운로드 한 후에 적절한 위치에 놓고, 해당 경로를 확인한다.

1
2
3
4
5
6
$ cd ~/rpi-arm/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/
$ arm-linux-gnueabihf-gcc --version
arm-linux-gnueabihf-gcc (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) 4.8.3 20140303 (prerelease)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

64bit Raspberry Pi arm-linux-gnueabihf-gcc- 관련 도구를 gcc 그룹에 등록하기

1
2
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc arm-linux-gnueabihf ~/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc-4.8.3 30 \
--slave /usr/bin/arm-linux-gnueabihf-g++ arm-linux-gnueabihf-g++ ~/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++