busybox 1.27.2 cross compile
안녕하세요~
busybox를 크로스컴파일 하는데 어려움이 있어, 고수님들의 노하우를 알고자 질문합니다.
busybox 1.27.2는 (https://www.busybox.net/) 에서 직접 다운로드를 하였고,
Host PC에는 Ubuntu 16.04.3 LTS server 가 설치되어 있습니다.
더불어 크로스컴파일러는 sudo apt-get install gcc-4.9-arm-linux-gnueabi 를 하여 설치가 되었습니다.
(*크로스컴파일러 설치 경로 : /usr/bin/)
(*ls /usr/bin 결과)
....
arm-linux-gnueabi-addr2line
arm-linux-gnueabi-ar
arm-linux-gnueabi-as
arm-linux-gnueabi-c++filt
arm-linux-gnueabi-cpp -> arm-linux-gnueabi-cpp-5
arm-linux-gnueabi-cpp-4.9
arm-linux-gnueabi-cpp-5
arm-linux-gnueabi-dwp
arm-linux-gnueabi-elfedit
arm-linux-gnueabi-gcc-4.9
arm-linux-gnueabi-gcc-ar-4.9
arm-linux-gnueabi-gcc-nm-4.9
arm-linux-gnueabi-gcc-ranlib-4.9
arm-linux-gnueabi-gcov-4.9
arm-linux-gnueabi-gprof
arm-linux-gnueabi-ld -> arm-linux-gnueabi-ld.bfd
arm-linux-gnueabi-ld.bfd
arm-linux-gnueabi-ld.gold
arm-linux-gnueabi-nm
arm-linux-gnueabi-objcopy
arm-linux-gnueabi-objdump
arm-linux-gnueabi-ranlib
arm-linux-gnueabi-readelf
arm-linux-gnueabi-size
arm-linux-gnueabi-strings
arm-linux-gnueabi-strip
....
이후 Busybox 디렉토리에서 Makefile을 수정하였습니다.
....
288
289 # Make variables (CC, etc...)
290
291 AS = $(CROSS_COMPILE)as
292 #CC = $(CROSS_COMPILE)gcc
293 CC = $(CROSS_COMPILE)gcc-4.9
294 LD = $(CC) -nostdlib
295 #LD = $(CROSS_COMPILE)ld
296 CPP = $(CC) -E
297 #AR = $(CROSS_COMPILE)ar
298 #NM = $(CROSS_COMPILE)nm
299 AR = $(CROSS_COMPILE)gcc-ar-4.9
300 NM = $(CROSS_COMPILE)gcc-nm-4.9
301 STRIP = $(CROSS_COMPILE)strip
302 OBJCOPY = $(CROSS_COMPILE)objcopy
303 OBJDUMP = $(CROSS_COMPILE)objdump
304 PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config
305 AWK = awk
306 GENKSYMS = scripts/genksyms/genksyms
307 DEPMOD = /sbin/depmod
308 KALLSYMS = scripts/kallsyms
309 PERL = perl
310 CHECK = sparse
311
....
이제 "make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm" 를 실행하였는데 완료되지 못하고 중간에 에러가 발생합니다. 아래는 컴파일 과정 일부분 입니다.
CC ......
CC util-linux/volume_id/util.o
CC util-linux/volume_id/volume_id.o
CC util-linux/volume_id/xfs.o
AR util-linux/volume_id/lib.a
LINK busybox_unstripped
Your linker does not support --sort-section,alignment
Your linker does not support --sort-common
Your linker does not support -Wl,--gc-sections
Trying libraries: m
Failed: -Wl,--start-group -lm -Wl,--end-group
Output of:
arm-linux-gnueabi-gcc-4.9 -Wall -Wshadow -Wwrite-strings -Wundef -Wstrict-prototypes -Wunused -Wunused-parameter -Wunused-function -Wunused-value -Wmissing-prototypes -Wmissing-declarations -Wno-format-security -Wdeclaration-after-statement -Wold-style-definition -fno-builtin-strlen -finline-limit=0 -fomit-frame-pointer -ffunction-sections -fdata-sections -fno-guess-branch-probability -funsigned-char -static-libgcc -falign-functions=1 -falign-jumps=1 -falign-labels=1 -falign-loops=1 -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-builtin-printf -Os -o busybox_unstripped -Wl,--start-group applets/built-in.o archival/lib.a archival/libarchive/lib.a console-tools/lib.a coreutils/lib.a coreutils/libcoreutils/lib.a debianutils/lib.a e2fsprogs/lib.a editors/lib.a findutils/lib.a init/lib.a libbb/lib.a libpwdgrp/lib.a loginutils/lib.a mailutils/lib.a miscutils/lib.a modutils/lib.a networking/lib.a networking/libiproute/lib.a networking/udhcp/lib.a printutils/lib.a procps/lib.a runit/lib.a selinux/lib.a shell/lib.a sysklogd/lib.a util-linux/lib.a util-linux/volume_id/lib.a archival/built-in.o archival/libarchive/built-in.o console-tools/built-in.o coreutils/built-in.o coreutils/libcoreutils/built-in.o debianutils/built-in.o e2fsprogs/built-in.o editors/built-in.o findutils/built-in.o init/built-in.o libbb/built-in.o libpwdgrp/built-in.o loginutils/built-in.o mailutils/built-in.o miscutils/built-in.o modutils/built-in.o networking/built-in.o networking/libiproute/built-in.o networking/udhcp/built-in.o printutils/built-in.o procps/built-in.o runit/built-in.o selinux/built-in.o shell/built-in.o sysklogd/built-in.o util-linux/built-in.o util-linux/volume_id/built-in.o -Wl,--end-group -Wl,--start-group -lm -Wl,--end-group
==========
coreutils/lib.a(mktemp.o): In function `mktemp_main':
mktemp.c:(.text.mktemp_main+0xa8): warning: the use of `mktemp' is dangerous, better use `mkstemp' or `mkdtemp'
/usr/arm-linux-gnueabi/lib/ld-linux.so.3: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
Note: if build needs additional libraries, put them in CONFIG_EXTRA_LDLIBS.
Example: CONFIG_EXTRA_LDLIBS="pthread dl tirpc audit pam"
Makefile:721: recipe for target 'busybox_unstripped' failed
make: *** [busybox_unstripped] Error 1
jslim@ubuntu:~/environment/03_busybox/busybox-1.27.2$
여기서 에러의 원인을 정확히 모르겠습니다.
저는 "ld-linux.so.3: file not recognized: File format not recognized" 메시지가 이 문제를 해결하는데 도움이 될 줄 알고 열심히 찾아봤지만, 해결책을 찾지 못했습니다. ㅠㅠ
혹시 이 부분에 대해 무엇이 문제이고, 어떤 방법이 틀린 것이었는지, 또는 어떤 부분이 누락이 되어서 그런 것인지,
알고 계신 고수님들이 계시다면 부디 조언을 부탁드립니다.
감사합니다.
http://www.kernel.bz/ 에 물어보면
http://www.kernel.bz/ 에 물어보면 어떨까요?
그곳 관리자 분이 크로스컴파일에 대해 잘 아실 거예요.
세벌 https://sebuls.blogspot.kr/
빠른 답변 정말 감사합니다.
알려주신대로 http://www.kernel.bz/ 관리자 분께도 문의를 준비중 입니다.
질문을 올리다가 한가지 빼먹은게 있는데요,
Busybox에서 menuconfig를 할 수 있지 않습니까?? 아래 커맨드로 menuconfig를 수행했습니다.
(make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig)
그러면 Dialog가 나타나는데,
-----------------------------------------------------------
Busybox Settings --->
[ ] Build BusyBox as a static binary (no shared libs)
-----------------------------------------------------------
위 경로에서 체크를 하고 make를 수행하면 Busybox가 빌드완료 됩니다. (※ 파일크기는 대략 2M정도)
뭔가 shared library와 연관이 있는것 같은데, 문제에 대해 좀 더 알고 싶습니다. ㅠㅠ
다들 바쁘시겠지만 지도 부탁드립니다.
감사합니다.
댓글 달기