5

カーネル コードの一部で使用する前に、カーネル リンク リストを試してみたいと思います。しかし、単に含めるlist.hと、依存関係のために機能しません。

single.cコンパイルするだけでコードをテストできるように、test.c などのファイルで list を使用してコードを作成するにはどうすればよいtest.cですか? あなたからのお便りを楽しみにしています。

また、ネストされたリンクリストを使用するにはどうすればよいですか?

4

2 に答える 2

6

http://www.mcs.anl.gov/~kazutomo/list/list.hからユーザー空間ポートを取得できます。
それは言います:

これは、ユーザー空間プログラムの list.h をクックするレシピです。

  1. linux/include/list.h から list.h をコピーします。
  2. 削除する
    • #ifdef KERNEとその #endif
    • すべて #include 行
    • prefetch() および rcu 関連の関数
  3. マクロ offsetof() と container_of を追加
于 2012-11-30T12:26:49.657 に答える
4

リストはカーネル内で使用するために作成されており、カーネル タイプなどのいくつかの依存関係があるため、ユーザー空間でリストを使用することは意図されていません。これは、正しいインクルード パスを使用してコードをコンパイルすることで確認できます。

gcc -I path-to-kernel-src/include/ test.c

test.c に次のコードが含まれている場合:

#include <stdio.h>
#include <stdlib.h>

#include <linux/list.h>

int main(int argc, char **argv) { }

ユーザー空間のインクルード (stdlib.h) と競合する list.h にインクルードがあるため、コンパイルに失敗します。

それにもかかわらず、リストのようなデータ構造の依存関係はかなり小さいです。list.h の依存関係を他のカーネルから切り離すには、それらを整理する必要があります。簡単なテストでは、list.h との間のインクルードを削除し、データ型構造体 list_head/hlist_head と hlist_node を追加しました。

于 2012-11-29T10:05:55.480 に答える