objdump -h vmlinux
elf 커널에서 섹션정보를 볼 수 있다.
먼저 섹션 정보를 확인 하고…
objcopy -O binary -j .data vmlinux ddd
vmlinux 에서 .data 섹션만 추출해서 순수 바이너리 형식의 ddd 파일로 저장한다.
뭐 아키텍쳐에 따라 -O 에 srec 같은 옵션 주면 구닥다리 모토롤라 헥사 같은 것도 뽑아주는 듯.
objcopy로 잡정보를 날려보자.
커널 Makefile에 있는 내용을 참고해보면..
arm-linux-gnu-objcopy -O binary -R .note -R .comment -S vmlinux arch/arm/boot/Image
.note .comment 섹션을 지우고 -S 옵션으로 몽창 다 strip 해서 Image를 생성하는 명령이다. -S는 즉 심볼 정보하고 리로케이션 정보를 날려버린다.
이 글도 참고하고.. http://sjg0120.springnote.com/pages/434365
objcopy로 바이너리를 임베드 해보자. 먼저 지금 쓰는 버전이 지원하는 타겟을 봐야 하니까 그냥 실행해본다.
arm-linux-gnu-objcopy를 실행하니 다음과 같이 나온다.
arm-linux-gnu-objcopy: supported targets: elf32-littlearm elf32-bigarm elf32-little elf32-big srec symbolsrec tekhex binary ihex
보니까 모토롤라 헥사 인텔 헥사 다 있다.. 아 이 좋은 걸 냅두고 헥사 변환 머징 툴을 따로 짜던 시절도 있었다.
이제 objcopy로 jpg 파일을 병합해보자. arm-linux-gnu-objcopy -I binary -O elf32-littlearm -B arm a.jpg a.o
a.o 의 바이너리 데이터는 C에서 다음과 같은 변수로 참조할 수 있다.
extern char _binary_a_jpg_start[]; extern char _binary_a_jpg_end[]; extern char _binary_a_jpg_size[];
참고 http://forum.falinux.com/zbxe/?document_srl=546894