본문 바로가기
Linux BSP

[Linux BSP] Linux 교차 개발 환경 세팅하기

by TYB 2024. 1. 31.
반응형

gcc main.c만 하면 기본 실행파일인 a.out으로 빌드됨

 



gcc main.c만 하면 기본 실행파일인 a.out으로 빌드됨
실행할때는 ./a.out도 되고 ./a도 된다.


만약 실행파일의 이름을 정해주고 싶다면 gcc main.c -o main 으로 쳐주면

main이라는 이름의 실행파일이 생성된다.

이 파일을 보면 LSB라고 나와있고 32bit라고 나와잇음

그래서 little Endian에 대해 알아보면 우리가 사용하는 대부분의 intel, ARM은 little endian 방식이다.

long i = 0x12345678(총 4바이트)이라고 변수를 주면  메모리 Stack에 저장이됨. 1이 MSB 8이 LSB

LSB 프로그램이 스택에 저장된 모습






32bit processor에서는 D0~D31까지 1bit씩 4Byte의 데이터 버스폭을 가짐. 


strip main을 하면 file size를 더 낮춰줄수 있고 strip되지 않은 실행파일은 디버그용이고 릴리즈용은 대부분 strip과정을 거친다.

pi@pi08:~ $ file main
main: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=45ae026e3dc3bab4aa604726765d9822855a461c, for GNU/Linux 3.2.0, not stripped
pi@pi08:~ $ strip main
pi@pi08:~ $ file main
main: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=45ae026e3dc3bab4aa604726765d9822855a461c, for GNU/Linux 3.2.0, stripped



arn에서 컴파일하면 ARM이 x86-64로 바뀜

ubuntu@ubuntu8:/srv/samba$ file main
main: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=1589a1687a315d3277baa9b1380d3a52dd966834, for GNU/Linux 3.2.0, not stripped

 

ubuntu@ubuntu8:/srv/samba$ scp main_arm pi@10.10.15.158:~
The authenticity of host '10.10.15.158 (10.10.15.158)' can't be established.
ECDSA key fingerprint is SHA256:h2PpXe61+9NP339liYtlpgv8zEB53tDw1KuoQiX+7Q8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.15.158' (ECDSA) to the list of known hosts.
pi@10.10.15.158's password:
main_arm

우분투에서 scp를 통해서 라즈베리파이로 보내면 라즈베리파이에 바로 전송됨!!! 

 

 

라즈베리파이에서 arm에서 컴파일한 바이너리 실행파일을 실행하려고 하면 실행이 안됨. 서로 규약이 다르기 때문에 반대로 x86에서 컴파일한 실행파일을 라즈베리파이에서 하고자 하면 그것도 안됨.

 

 

따라서 다른 개발환경에서 해당 환경에 맞게 컴파일해주는 컴파일 툴체인이 필요함. 그래서 아래단계를 진행함.

그래서 우분투에서 라즈베리파이용(arm) 바이너리파일은 만드는거임.

$ sudo apt-get install gawk git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python-setuptools python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev xterm rsync curl zstd lz4 bison flex
$ sudo apt install crossbuild-essential-armhf  //arm 32bit 툴체인 설치

 

이걸 설치하게 되면 라즈베리파이용 실행파일을 다 만들 수 있음.

ubuntu@ubuntu8:/srv/samba$ arm-linux-gnueabihf-gcc main.c -o main_arm

ubuntu@ubuntu8:/srv/samba$ file main_arm
main_arm: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=ad7f0593cb88679335f0aef363843d1354ad406a, for GNU/Linux 3.2.0, not stripped

 

 

 

반응형