Linux 커널 모듈과 함께 작동하도록 Splint 또는 유사한 정적 검사기를 얻을 수 있는 방법이 있습니까?
문제
나는 (경고 없이) hello-5.c
"의 예Linux 커널 모듈 프로그래밍 가이드" 그리고 insmod를 시도했을 때 다음 오류가 발생했습니다.
insmod: error inserting 'hello-5.ko': -1 Unknown symbol in module
나는 splint에 명백한 오류가 있는지 확인하려고 시도했지만 실행했을 때 구문 분석을 시도할 때까지 커널 헤더에서 수많은 경고를 받았습니다. asm/types.h
anon@anon:~/kernel-source/lkmpg$ splint -I/lib/modules/$(uname -r)/build/include hello-5.c
Splint 3.1.1 --- 03 Nov 2006
( ... lots of warnings ... )
/lib/modules/2.6.24-24-insp8600/build/include/asm/types.h:13:24: Parse Error:
Suspect missing struct or union keyword: __signed__ :
unsigned short int. (For help on parse errors, see splint -help
parseerrors.)
*** Cannot continue.
실제로 두 가지 질문이 있습니다.
- insmod 오류를 어떻게 수정하나요?
- 커널 헤더와 잘 작동하도록 부목을 얻으려면 어떻게 해야 합니까?
해결책 2
확실하지 않지만 이것이 내가 찾고있는 것일 수 있습니다.
Linux 커널 모듈에서 부목을 사용하는 부목이 있습니다
스플린트가 커널에 사용 된 GCC 특정 확장을 통과 할 수 있도록 사용자 정의 제조 파일을 제공합니다.
다른 팁
재미있는.현재 저는 사무실에 앉아 Linux 커널 드라이버에서 정적 검사기를 실행하려고 합니다. :)
정적 검사기는 Linux 커널을 처리하는 데 어려움을 겪습니다. 커널 코드에 사용되는 C 방언은 일반적으로 "C 언어"로 이해되는 것보다 광범위하기 때문입니다.검사기의 C 프런트 엔드가 코드에 사용되는 끊임없이 변화하는 구문을 구문 분석할 수 없는 경우가 가끔 발생합니다.
내가 이해할 수 있듯이, 단순히 오래된 버전의 체커(03 Nov 2006
), 하지만 귀하의 커널 버전도 오래되어 어느 것이 더 오래된 것인지 모르겠습니다.검사기를 현재 버전으로 업데이트하거나 검사기가 전환을 지원하는 경우 최신 C 프런트 엔드를 사용하는 것이 도움이 될 수 있습니다.
게다가 체커가 리눅스 커널을 처리할 수 있다면 그 사실이 체커 홈페이지에 대놓고 자랑이 된다.따라서 그것을 주장하는 것을 선택하고 확인하십시오.