blob bootloader compile
안녕하세요..
이제 막 임베드 공부를 시작하여 부트로더 공부해 보겠다고 blob 컴파일 중인데
자꾸만 이상한 에러가 나서 질문 올립니다.
bootloader는 lart 사이트에서 blob-2.0.5-pre2.tar.gz
컴팔러는 http://handhelds.org/download/projects/toolchain/ 에서 arm-linux-gcc-3.4.1.tar.bz2 을
다운받아 설치 했습니다.
assabet으로 configure후 make 해보니
asm-arm/arch-sa1100/SA-1100.h 파일이 없다고 나와서 해당 폴더에 가보니 asm-arm이라는 폴더는 없고
asm,asm-generic이란 폴더만 있어서 asm을 asm-arm으로 폴더명을 바꿔줬더니 컴파일이 되는가 싶더니
아래와 같은 에러 메세지를 쫘악~
make[2]: Entering directory `/blob-2.0.5-pre2/src/blob'
arm-linux-gcc -Os -I/usr/src/linux-2.6.9/include -Wall -march=armv4 -mtune=strongarm1100 -fomit-frame-pointer -fno-builtin -mapcs-32 -nostdinc -static -nostdlib -o blob-rest-elf32 -Wl,-T,rest-ld-script trampoline.o flashasm.o stack.o testmem2.o bootldrpart.o commands.o flash.o initcalls.o linux.o main.o memory.o param_block.o partition.o reboot.o uucodec.o xmodem.o assabet.o intel32.o -L../../src/lib -lblob -lgcc
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_udivsi3.oS)(.text+0xec):/work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/gcc/config/arm/lib1funcs.asm:615: relocation truncated to fit: R_ARM_PLT32 __div0
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_umodsi3.oS)(.text+0xc0):/work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/gcc/config/arm/lib1funcs.asm:656: relocation truncated to fit: R_ARM_PLT32 __div0
collect2: ld returned 1 exit status
make[2]: *** [blob-rest-elf32] Error 1
make[2]: Leaving directory `/blob-2.0.5-pre2/src/blob'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/blob-2.0.5-pre2/src'
make: *** [all-recursive] Error 1
어떻게 해결하면 좋을지 알려 주셨으면 감사하겠습니다.
해결방법은 하나입니다.
부트로더의 원리를 이해하신다면,
asm-arm 디렉터리 내부의 헤더들이 무엇을 의미하는지 아셨으리라 생각합니다.
blob 부트로더를 ARM 기반 시스템에서 구동하려면 ARM Instruction Set 으로 구성한 바이너리 파일,
즉 부트로더 이미지가 필요하다는 것을 이해하시리라 믿습니다.
그러한 ARM 시스템에서 SA-1100.h는 Intel Strong ARM 기반 시스템에 대한 Memory Organization,
Extended Instruction Set, Bus Architecture, Interrupt Organization 등 시스템에 필수적인 정보를
담고 있습니다.
즉, 그러한 시스템의 기본 정보 없이 일반 asm-generic 내의 내용을 이용하여 컴파일 하게 만든다면,
크로스 컴파일러(arm-gcc)로 구성하려는 binary image 구성에 문제가 생깁니다.
해결방법은 asm-arm 을 포함하고 있는 커널 소스를 사용하시는 것입니다.
실제 지금 사용하고 계신 리눅스 배포판의 패키지 중, 개발 버전의 커널 소스 패키지를 설치하시거나,
kernel.org 에서 새 전체 커널 소스를 받은 후, /usr/src/linux 에 연결하여 make 를 진행해보시는 것이
좋으리라 생각합니다.
====
하나는 전부, 전부는 하나
댓글 달기