리눅스에서 컴파일 잘 된것을 arm용으로 크로스 컴파일 하려는데 질문 드립니다

lee3834의 이미지

카메라 드라이버를 리눅스에서 컴파일 잘 되었고 실행도 잘 되었습니다

그런데 이 카메라 드라이버의 Make관련 파일인 Makefile.standalone에 보면

KVER=$(shell uname -r)
KSRC=/lib/modules/$(KVER)/build
 
all: driver
 
driver:
          $(MAKE) -C $(KSRC) SUBDIRS=$(PWD) modules

이렇게 되어 있습니다

이런식으로 되어 있는 것을 arm용으로 크로스 컴파일 하려면 어떻게 작업하는것이 편한가요?

make -f Makefile.standalone ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

이렇게도 해보았고

KSRC폴더를 arm용으로 빌드된 커널폴더로도 잡아보았습니다

그런데 둘다 아직 성공하지 못하고 있습니다

cococo의 이미지

분위기 보면 더 있을거 같은데요?

행복은 희생없이는 얻을 수 없는 것인가?
시대는 불행없이는 넘을 수 없는 것인가?

lee3834의 이미지

그것은 오브젝트 파일 만드는 내용밖에 없습니다

실제로 필요한 변수명 같은것은 모두 커널의 Makefile을 빌려다 쓰더라구요

카메라 드라이버의 Makefile은

stk11xx-objs := stk11xx-usb.o stk11xx-v4l.o stk11xx-sysfs.o stk11xx-dev.o stk11xx-buf.o stk11xx-bayer.o
 
stk11xx-objs += stk11xx-dev-a311.o
stk11xx-objs += stk11xx-dev-a821.o
stk11xx-objs += stk11xx-dev-6a31.o
stk11xx-objs += stk11xx-dev-6a33.o
stk11xx-objs += stk11xx-dev-6a51.o
stk11xx-objs += stk11xx-dev-6a54.o
 
obj-$(CONFIG_STK11XX) += stk11xx.o

Makefile.standalone 파일은

#KVER=2.6.26.3
KVER=$(shell uname -r)
KSRC=/lib/modules/$(KVER)/build
 
 
all: driver
 
doc:
	@echo "Generating document with Doxygen..."
	@doxygen doxygen.cfg
 
driver:
	$(MAKE) -C $(KSRC) SUBDIRS=$(PWD) modules
	@ctags -R
 
clean:
	$(MAKE) -C $(KSRC) SUBDIRS=$(PWD) clean
	@rm -f Module.symvers
 
cleandoc:
	@echo "Removing documentation generated by Doxygen..."
	@rm -Rf ../doxygen
poplinux의 이미지

커널 2.6 대로 넘어오면서 모듈의 Makefile 파일은 형식이 대폭 간소화되면서 모든 정보를 커널 소스 로부터 받아 오도록 변경되었습니다.

그래서 2.4 커널대에서는 모듈 컴파일을 할 때 커널 헤더만 있으면 되었지만 2.6 에서는 설정까지 모두 다 된 커널 소스가 있어야 모듈에서 컴파일이 가능하게 되었습니다.

다시 정리하면, 컴파일러와 같은 정보는 모두 커널 소스에 있는 Makefile 에 정의되어 있으며 모듈의 Makefile 은 커널 소스에서 이 정보를 가져다가 컴파일에 사용하고 있습니다.

arm 용 커널의 설정을 모두 잡고 다시 모듈을 컴파일하면 정상적으로 컴파일 될 겁니다.

========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux

임베디드 리눅스 관련 프리렌서 지향

lee3834의 이미지

다시 잡아봐야겠네요

bushi의 이미지

Makefile 이상없는 것 같고요,
KSRC를 타겟용 (최소한 config까지는 진행된) 커널 소스가 있는 디렉토리로 지정하시는게 맞고요.

obj-m += stk11xx.o
이 정도로 바꿔보세요.

OTL