도와주세요!!
webcam 드라이버 설치하다가 보드에 들어가는 커널안에 관련 모듈이 이미 있는것 같아 질문드립니다.
커널 컴파일 하고 나면 /project/falinux/kernel/build_s3c6410/drivers/media/video/gspca 경로 안을 보면
gspca_main.ko 모듈이 있습니다.(참고로 gspca v4l2 드라이버 지원하는 웹캠 사용하고 있습니다.)
이미 arm-generic-linux-gnueabi-gcc로 컴파일 되었기 때문에 이걸 그냥 올려서 쓰면 되겠다 싶어 보드에 모듈을 추가하니
[root@falinux app]$ insmod gspca_main.ko
gspca_main: Unknown symbol video_ioctl2
gspca_main: Unknown symbol video_devdata
gspca_main: Unknown symbol video_unregister_device
gspca_main: Unknown symbol video_register_device
insmod: can't insert 'gspca_main.ko': unknown symbol in module, or unknown parar
이렇게 뜹니다. 어떤 문제인가요?
이 생각을 하기전에 당연히 이게 들어있는 이미지를 넣어서 보드에 올려서 쓰고있으니 안올려도
웹캠을 인식해야 정상인것 같지만 웹캠을 보드에 꽂아봐도 그럴 기미가 안 보입니다.
커널을 meneconfig해서 관련옵션들을 선택하고 다시 올리고 해보니 위와 같은 에러는 나지 않습니다.
[root@falinux app]$ insmod gspca_main.ko
gspca_main: v2.15.18 registered
[root@falinux app]$ insmod gspca_zc3xx.ko
gspca_main: gspca_zc3xx-2.15.18 probing 046d:08af
gspca_zc3xx: probe 2wr ov vga 0x0000<6>gspca_zc3xx: probe sensor -> 0011<6>gspca_zc3xx: Find Sensor HV7131R<6>input: gspca3
gspca_main: video0 created<6>usbcore: registered new interface driver gspca_zc3xx
이렇게 나옵니다. 이 결과가 뜻하는것이 무엇인지요? ls /dev을 해보아도 video0는 생기지 않습니다.
아니면 이 결과가 정상인가요?
원래 PC에서는 lsmod 하면 이렇습니다.
v4l1_compat --- videodev
videodev --- gspca_main
gspca_main --- gspca_zc3xx
gspca_zc3xx --- 0
이와 같이 videodev.ko, V4l1_compat.ko가 있어야 제대로 동작할것 같은데 이것들은 어떻게 만드나요?
gspca_main.ko, gspca_zc3xx.ko는 gspca-2.15.18 드라이버를 크로스 컴파일 시켜서 얻은 모듈입니다.
gspca-2.15.18의 Makefile을 보면 build_s3c6410 커널 디렉토리를 참조해서 드라이버를 만듭니다.
그래서 /project/falinux/kernel/build_s3c6410/drivers/media/video 디렉토리를 보면
v4l1_compat.o, v4l2-common.o, v4l2-dev.o v4l2-device.o, ........ videodev.o 파일들이 존재 합니다.
왜 이 파일들은 모듈파일(.ko)로 만들어지지 않을까요?
제가 수정한 드라이버를 압축해서 올렸습니다.
Makefile 안의 내용 중 일부입니다.
all: modules
modules:
$(MAKE) -C $(KSRC) M=$(PWD)/build modules
gspca_%:
$(MAKE) -C $(KSRC) M=$(Pabout:startpageWD)/build gspca_main.ko $@
install::
rm -f $(KGSPCADIR)/gspca*.ko $(KGSPCADIR)/*/gspca*.ko \
$(KGSPCADIR)/gspca*.gz $(KGSPCADIR)/*/gspca*.gz; \
install -c -m 0644 build/*.ko $(KGSPCADIR)/; \
depmod
gspca_main.ko에 대해서만 컴파일 되기 때문에 gspca_main.ko가 만들어지는것 같습니다.
Makefile만 어떻게 videodev.ko등을 만들 수 있을것 같은데 어떻게 만들어지는지 잘 모르겠습니다.
사용하시는 보드의 커널에서 위에 명기된 함수들이 없다고 나옵니다.
video_ioctl2() 함수가 커널에 없는 거죠..
커널 menuconfig 를 사용하여 v2l 을 활성화 한 후 컴파일하고 커널을 올려보세요