우리는 최신 RHEL7.5까지 RedHat Linux 배포판 제품군에 적합하게 빌드되는 커널 모듈을 보유하고 있습니다.
RHEL7.5에서 빌드하려고 하면 다음 오류가 발생합니다.
...오류: 'GENL_ID_GENERATE'이(가) 선언되지 않았습니다...
읽어보니 커널 4.11+ 이후의 변화인 것 같지만 RHEL7.5는 커널 3.10+를 기반으로 합니다. 무슨 일이에요?
어쨌든 GENL_ID_GENERATE의 값은 0이라는 것을 알고 있습니다. 하지만 매크로를 대체하기 위해 0을 사용할 수 있나요? 이 커널 모듈과 통신하는 사용자 모드 모듈에 문제가 있습니까?
아니면 문제를 해결하는 올바른 방법은 무엇입니까? 어떤 제안이 있으십니까?
감사합니다, Weishan
답변1
보고 있다자식 커밋netlink의 경우 버전 4.11에서 구조가 일부 변경된 것 같습니다.
첫째, Linux가 정적 제품군 ID를 제거했기 때문에 .id
초기화 프로그램에서 해당 필드를 완전히 생략 할 수 있습니다.genl_family
다시 한번 말씀드리지만 이 genl_register_family_with_ops
기능은 더 이상 사용되지 않습니다. 반대로,Netlink는 Linux HOWTO 문서에 언급되어 있습니다.:
Linux 4.10 이전에는
genl_register_family_with_ops()
.4.10 이상에서 구조에 대한 참조를genl_ops
구조의 요소genl_family
(element.ops
) 및 명령 수(element.n_ops
)로 포함합니다.