오재경님께서 2007년도에 강의 하셨던 내용중 고급 강의의 pci driver 예제를 가지고 드라이버를 만들고 있습니다.

 

현재 제가 리눅스 PC 한대와 VIA칩셋이 내장된 보드 한대 이렇게 두대에서 작업을 하고 있습니다.

 

현재 리눅스 PC에서는 다음과 같은 컴파일 에러 메세지가 출력이 됩니다.

리눅스 PC 환경

리눅스 PC : 페도라 3 (커널 버젼 2.6.9-1.667)

GCC : gcc-3.4.2-6.fc3


 

에러 내용은 다음과 같습니다.

[root@Dongkyu new_driver]# make
make -C /lib/modules/2.6.9-1.667/build SUBDIRS=/windows_share/new_driver modules
make[1]: Entering directory `/lib/modules/2.6.9-1.667/build'
  CC [M]  /windows_share/new_driver/spdev_pci.o
cc1: error: unrecognized command line option "-march=i686"
cc1: error: unrecognized command line option "-mregparm=3"
make[2]: *** [/windows_share/new_driver/spdev_pci.o] 오류 1
make[1]: *** [_module_/windows_share/new_driver] 오류 2
make[1]: Leaving directory `/lib/modules/2.6.9-1.667/build'
make: *** [default] 오류 2

 

VIA보드에서는 컴파일은 완료 하였으나 모듈 적재 즉 insmod가 안됩니다.

VIA Chipset 보드 환경

리눅스 버젼 : 페도라 8 (커널 버젼 : 2.6.24)

GCC : gcc-4.1.2-33

 

에러 내용은 다음과 같습니다.

insmod:  error inserting 'ix_pci.ko' : -1 No such device 

 

/proc/kmsg를 살펴보면

bash-3.2# cat /proc/kmsg
<4>ix_pci_probe:176) pci_rev=1
<4>ix_pci_probe:187) PIO  base=0xdc00 len=0x40
<4>ix_pci_probe:194) MMIO base=0xfe900000 len=0x100000
<4>ix_pci_probe:217) remap MMIO =0xdca80000
<4>ix_pci_probe:233) major 251 for ixboard pci driver
<4>ix_pci_remove:156)

위와 같은 메세지가 출력되는 것을 확인하였습니다.

 

VIA보드에서 컴파일시에 "linux/config.h", "asm/hardware.h" 그리고 pci_module_ini이 선언되지 않았다고 하여서

헤더파일 두개는 주석으로 처리하였고 pci_module_init은 pci_register_driver()을 사용하여 값을 return하였습니다.

또한 인터럽트 플래그인 SA_INTERRUPT | SA_SHIRQ 는 더이상 사용하지 않는다고 하여서 IRQF_SHARED로

대처하였습니다.

또한 지금 작업중인 pci보드가 인터럽트 기능이 없어서 인터럽트 핸들러 부분에서 리턴값을 IRQ_NONE로 하였습니다.

위와 같은 현상이 발생하고 있는데 도무지 해결 방안이 뭔지를 찾을수가 없습니다.

 

꼭 답변 부탁드리겠습니다.

 

 참고로 현재 제작중인 pci드라이버는 VIA보드에서 동작 시키려고 합니다.