-
objcopyProgramming Utility 2020. 9. 28. 15:45
sourceware.org/binutils/docs/binutils/objcopy.html#objcopy
objcopy (GNU Binary Utilities)
Set or change both the VMA address and the LMA address of any section matching sectionpattern. If ‘=’ is used, the section address is set to val. Otherwise, val is added to or subtracted from the section address. See the comments under --change-address
sourceware.org
objcopy는 컴파일 링크 단계로 생성된 실행 파일 또는 목적 파일을 다른 포맷으로 변환하거나 특정 섹션을 추출하여 파일로 생성해주는 프로그램이다. objcopy는 GNU Binary Utilities(binutils)에 포함되어 있다.
이 프로그램이 왜 필요할까?
컴파일과 링크 과정을 마치면 파일은 실행 가능한 포맷(*.elf, *.PE)의 형태를 가지고 있다. 즉, 이 파일은 OS가 실행할 수 있도록 구성되어 있는 포맷이다.
실행 가능한 포맷 ELF, PE
리눅스: *.elf (Executable and Linkable Fomat) 윈도우: *.PE (PE: Portable Executable) 실행 가능한 포맷 종류 실행파일 .exe 목적파일 .o 라이브러리 .dll 실행 가능한 포맷..?? 실행파일이면 실행파일이지 실..
johnjarrer.tistory.com
하지만 방금 개발되어진 따끈따근한 board에는 시스템이 없을 것이다. 우리는 HOST PC에서 이 TARGET Board에 맞는 시스템을 개발해서 Flash를 해야하지만 HOST PC에서 개발하였기 때문에 OS가 실행할 수 있는 포맷으로 구성이되어있을 것이다. 그래서 우리는 OS가 실행에 필요한 불필요한 정보를 제거하고 순수한 바이너리파일을 만들어 Flash를 해야한다.
요약하면 결국 OS도 프로그램이며 파일이기 때문에 누군가가 OS 프로그램을 실행해줘야 한다. 이 누군가가 바로 CPU이고 OS가 탑재되지 않았으면 OS가 실행 가능한 포맷에서 OS만 알아먹는 정보를 제외한 바이너리 파일을 생성해야 한다.
(우리가 .exe는 운영체제 위해서 실행이 가능하지만 .iso는 운영체제 위에서 실행 불가능하다(가상머신으로 하면 가능한데요? 이런소리하지말고..))
objcopy 프로그램의
-S 옵션으로 실행파일에서 재배치 정보와 심볼을 제거하거나
-O 옵션으로 새로 생성할 파일의 포맷을 지정하거나
-j 옵션으로 실행파일에서 필요한 섹션만 추출할 수 있다.
objcopy 프로그램을 사용하기 싫으면
링크 단계에서 링커가 참조하는 링커 스크립트에
OUTPUT_FORMAT("*")으로 생성할 파일 포맷을 지정하거나
/DISCARD/로 추출할 섹션을 제외한 나머지 섹션을 없앨 수 있다.
틀린 점이 있다면 댓글 부탁드리겠습니다. 감사합니다.
'Programming Utility' 카테고리의 다른 글
Installing GCC (0) 2020.09.30 GCC Build Option(GCC Configuration) (0) 2020.09.30 GCC Compile option (0) 2020.09.30 Install GNU Binutils (0) 2020.09.30