
글쎄요, 저는 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은 더 이상 사용되지 않으므로 지원되는 버전으로 업그레이드해야 도움이 될 수도 있습니다.