Crosstool-ng 크로스 컴파일 툴체인 설정

markyang92·2024년 1월 27일
0

embedded_linux

목록 보기
1/7
post-thumbnail

cross-compile toolchain

  • crosstool-ng를 사용해 cross-compiling toolchain을 빌드한다.

prerequisite

$ sudo apt install build-essential git autoconf bison flex texinfo \
help2man gawk libtool-bin libncurses5-dev

crosstool-ng 설치

$ git clone https://github.com/crosstool-ng/crosstool-ng.git
$ cd crosstool-ng
$ git checkout crosstool-ng-1.26.0
  • crosstool-ng는 2가지 옵션을 제공한다.
    • globally on the system
    • locally in its download directory
      • 여기선 local을 가정하고 설치한다.
$ ./bootstrap
$ ./configure --enable-local
$ make
  • 여기까지 설치하면, 서로 다른 아키텍처, 서로 다른 C 라이브러리, 다양한 컴포넌트 버전으로 원하는 툴체인을 생성할 준비가 되었다.
  • ./ct-ng list-samples로 툴체인 리스트를 조회할 수 있다.
$ ./ct-ng list-samples

arm-cortexa9_neon-linux-gnueabihf 툴체인 설치해보자.

  • ./ct-ng list-samples가 있다. 이 것을 설치해본다.
./ct-ng arm-cortexa9_neon-linux-gnueabihf
  • 기본적인 설정이 .config에 저장되었다.
    여기서 세부적으로 설정을 바꾸려면, ./ct-ng menuconfig를 사용한다.

ct-ng menuconfig

$ ./ct-ng menuconfig
  • 몇 가지 설정을 바꿔보자.
    • Paths and misc options
      • LOG_DEBUG: DEBUG로 맞춘다. 최대 로그 레벨을 바꾼다.
        • / 키를 눌러 검색하자.
        • 1 번 누르자.

        • enter키 누르자.

        • EXTRA로 되어 있는데, DEBUG에서 space바를 누르자.

        • Save에서 .config에 덮어씌워야 설정이 저장된다.
          Save에서 space바 누르자.

        • .config에 덮어씌울꺼냐고 묻는다. Enter 누르자.

  • Target Vendor변경여기서 변경하고 싶은 타겟 벤더명 설정한다.
    hello로 변경

  • Target_alias변경
    arm-linux로 변경

  • C라이브러리 설정
  • uClib-ng로 설정해보자.

  • Debug facilities설정strace설정 해보자.
  • 항상 .config에 save해야 적용되는 것을 잊지말자

toolchain build

  • .config에 설정을 잘 넣었다면, $ ./ct-ng build를 이용해 툴체인을 빌드한다.

  • 홈 디렉토리에 x-tools디렉토리가 생성된다.


cross-compile, target-sysroot

export PATH=$PATH:$HOME/x-tools/arm-hello-linux-uclibcgnueabihf/bin
  • 컴파일
    • sample.c
$ arm-linux-gcc -o sample sample.c
  • file 명령어로 바이너리를 찍어보면 ELF 32-bit LSB executable, ARM으로 되어 있다.당연히 실행은 안되는데, arm용 바이너리이며, /lib/ld-uClibc.so.0은 Target Sysroot에 있다.

profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글