Splintまたは同様の静的チェッカーをLinuxカーネルモジュールで動作させる方法はありますか?

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

質問

" hello-5.c の例をコンパイルしました(警告なし) "rel =" nofollow noreferrer "> Linuxカーネルモジュールプログラミングガイド"そして、それをinsmodしようとしたときに、次のエラーを受け取りました:

insmod: error inserting 'hello-5.ko': -1 Unknown symbol in module

スプリントを使用して明らかなエラーが発生するかどうかを確認しようと考えましたが、実行すると 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.

実際には2つの質問があります:

  1. insmodエラーの修正方法
  2. スプリントをカーネルヘッダーでうまく再生するにはどうすればよいですか?
役に立ちましたか?

解決 2

わかりませんが、これが私が探しているものかもしれません:

splint-discuss LinuxカーネルモジュールでのSplintの使用

これは、スプリントがカーネルで使用されるgcc固有の拡張機能を利用できるようにするカスタムメイクファイルを提供します。

他のヒント

面白い。現在、私はオフィスに座って、Linux Kernelドライバーで静的チェッカーを実行しようとしています:)

カーネルコードで使用されるC方言は、「C言語」として一般に理解されている方言よりも広いため、静的チェッカーはLinuxカーネルの処理に苦労します。チェッカーのCフロントエンドが、コードで使用される刻々と変化する構造を解析できない場合があります。

理解できるように、古いバージョンのチェッカー( 2006年11月3日)を使用するだけですが、カーネルバージョンも古いため、どちらが古いかはわかりません。チェッカーが現在のバージョンに更新されるか、チェッカーが切り替えをサポートしている場合は、最新のCフロントエンドを使用すると役立ちます。

さらに、チェッカーがLinuxカーネルを処理できる場合、チェッカーのホームページでその事実が自慢されます。だから、それを主張し、あなたのチェックを行うものを選択してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top