Linux 커널 모듈과 함께 작동하도록 Splint 또는 유사한 정적 검사기를 얻을 수 있는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1620671

문제

나는 (경고 없이) 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.

실제로 두 가지 질문이 있습니다.

  1. insmod 오류를 어떻게 수정하나요?
  2. 커널 헤더와 잘 작동하도록 부목을 얻으려면 어떻게 해야 합니까?
도움이 되었습니까?

해결책 2

확실하지 않지만 이것이 내가 찾고있는 것일 수 있습니다.

Linux 커널 모듈에서 부목을 사용하는 부목이 있습니다

스플린트가 커널에 사용 된 GCC 특정 확장을 통과 할 수 있도록 사용자 정의 제조 파일을 제공합니다.

다른 팁

재미있는.현재 저는 사무실에 앉아 Linux 커널 드라이버에서 정적 검사기를 실행하려고 합니다. :)

정적 검사기는 Linux 커널을 처리하는 데 어려움을 겪습니다. 커널 코드에 사용되는 C 방언은 일반적으로 "C 언어"로 이해되는 것보다 광범위하기 때문입니다.검사기의 C 프런트 엔드가 코드에 사용되는 끊임없이 변화하는 구문을 구문 분석할 수 없는 경우가 가끔 발생합니다.

내가 이해할 수 있듯이, 단순히 오래된 버전의 체커(03 Nov 2006), 하지만 귀하의 커널 버전도 오래되어 어느 것이 더 오래된 것인지 모르겠습니다.검사기를 현재 버전으로 업데이트하거나 검사기가 전환을 지원하는 경우 최신 C 프런트 엔드를 사용하는 것이 도움이 될 수 있습니다.

게다가 체커가 리눅스 커널을 처리할 수 있다면 그 사실이 체커 홈페이지에 대놓고 자랑이 된다.따라서 그것을 주장하는 것을 선택하고 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top