igb Intel 드라이버가 컴파일되지 않고 다른 이미지 커널에서 복사된 igb.ko가 올바른 형식이 아니라고 말합니다.

igb Intel 드라이버가 컴파일되지 않고 다른 이미지 커널에서 복사된 igb.ko가 올바른 형식이 아니라고 말합니다.

글쎄요, 저는 rt 3.2 커널을 실행하는 rhel 6 머신을 가지고 있습니다. 기본적으로 드라이버가 복제품이고 이미지에 확장 카드 nic과 intel i350이 표시되고 이를 두 개의 eth 포트로 사용하기 때문에 드라이버를 업데이트해야 하는 것처럼 보입니다. 그러나 마더보드 i210 이더넷 포트를 사용하고 싶지 않습니다. igb는 두 장치 모두의 드라이버이므로 내 계획은 단순히 이전 드라이버 위에 새 드라이버를 로드하고 문제가 해결되기를 바라는 것입니다. 나는 이 표준을 달성하기 위해 두 가지 접근 방식을 취했습니다. 시스템과 modprobe에 빌드한 다음 다른 시스템에 .ko를 빌드하고 이를 복사하여 기존 .ko 파일을 바꾸는 것입니다.

rmmod igb //to remove the previous driver 
rpm -q igb // says there is no package igb so maybe it wasn't installed with rpm   

tar -zxf igb-5-7.2.tar.gz
cd igb-5.7.2/src
make install 
make[1]: Entering directory `/usr/src/kernels/3.2.23-rt37.56.el6rt.x86_64'
  CC [M]  /lib/modules/3.2.23-rt37.56.el6rt.x86_64/kernel/drivers/net/ethernet/intel/igb-5.7.2/src/igb_main.o
In file included from /lib/modules/3.2.23-rt37.56.el6rt.x86_64/kernel/drivers/net/ethernet/intel/igb-5.7.2/src/igb.h:32,
                 from /lib/modules/3.2.23-rt37.56.el6rt.x86_64/kernel/drivers/net/ethernet/intel/igb-5.7.2/src/igb_main.c:30:
/lib/modules/3.2.23-rt37.56.el6rt.x86_64/kernel/drivers/net/ethernet/intel/igb-5.7.2/src/kcompat.h:4183: error: conflicting types for ‘netdev_features_t’
include/linux/netdev_features.h:15: note: previous declaration of ‘netdev_features_t’ was here
/lib/modules/3.2.23-rt37.56.el6rt.x86_64/kernel/drivers/net/ethernet/intel/igb-5.7.2/src/kcompat.h:4212: error: redefinition of ‘ethtool_rxfh_indir_default’
include/linux/ethtool.h:769: note: previous definition of ‘ethtool_rxfh_indir_default’ was here
/lib/modules/3.2.23-rt37.56.el6rt.x86_64/kernel/drivers/net/ethernet/intel/igb-5.7.2/src/igb_main.c:2441: warning: initialization from incompatible pointer type
/lib/modules/3.2.23-rt37.56.el6rt.x86_64/kernel/drivers/net/ethernet/intel/igb-5.7.2/src/igb_main.c:2442: warning: initialization from incompatible pointer type
/lib/modules/3.2.23-rt37.56.el6rt.x86_64/kernel/drivers/net/ethernet/intel/igb-5.7.2/src/igb_main.c:2488: warning: initialization from incompatible pointer type
/lib/modules/3.2.23-rt37.56.el6rt.x86_64/kernel/drivers/net/ethernet/intel/igb-5.7.2/src/igb_main.c:2489: warning: initialization from incompatible pointer type
make[2]: *** [/lib/modules/3.2.23-rt37.56.el6rt.x86_64/kernel/drivers/net/ethernet/intel/igb-5.7.2/src/igb_main.o] Error 1
make[1]: *** [_module_/lib/modules/3.2.23-rt37.56.el6rt.x86_64/kernel/drivers/net/ethernet/intel/igb-5.7.2/src] Error 2
make[1]: Leaving directory `/usr/src/kernels/3.2.23-rt37.56.el6rt.x86_64'
make: *** [default] Error 2


누군가 netdev_features_t 및 ethtool 정의 오류를 피하는 방법과 내가 뭘 잘못하고 있는지 지적할 수 있다면 좋을 것입니다.

또 다른 시스템에 구축된 .ko 파일을 사용하고 기존 .ko 파일을 복사하기도 했습니다.

modprobe igb //using .ko file from a newer system says headers are incompatible or incompatible format 

그래서

A: 빌드 프로세스 중에 뭔가 잘못했습니까? 즉, 이전 드라이버와 충돌 또는 기타 문제를 완전히 제거하지 않은 것입니다.

B: 최신 드라이버를 사용하고 있습니다. 커널이 너무 오래되었기 때문에 이전 드라이버를 사용해야 할까요?

C: 다른 시스템의 .ko 파일을 사용할 수 없나요? 아니면 특정 커널에 맞게 컴파일해야 합니까?

미리 생각하고 감사드립니다.

답변1

컴파일하려는 드라이버와 함께 사용하려는 커널의 수명이 너무 다릅니다. 이 드라이버가 설계된 올바른 버전 범위로 커널을 변경해야 합니다.

또한 RHEL6은 더 이상 사용되지 않으므로 지원되는 버전으로 업그레이드해야 도움이 될 수도 있습니다.

관련 정보