カーネルを構築すると、依存関係サイクルエラーが発生します。

カーネルを構築すると、依存関係サイクルエラーが発生します。

いくつかの編集で最新のカーネルをコンパイルしたいと思います。

ながらsudo make modules_install

 INSTALL virt/lib/irqbypass.ko

  DEPMOD  4.4.0-rc1+

depmod: WARNING: found 2 modules in dependency cycles!
depmod: WARNING: /lib/modules/4.4.0-rc1+/kernel/drivers/staging/lustre/lnet/lnet/lnet.ko in dependency cycle!
depmod: WARNING: /lib/modules/4.4.0-rc1+/kernel/drivers/staging/lustre/lustre/libcfs/libcfs.ko in dependency cycle!
./scripts/depmod.sh: line 57:  1471 Killed                  "$DEPMOD" "$@" "$KERNELRELEASE" $SYMBOL_PREFIX
make: *** [_modinst_post] Error 137

その理由は何ですか?どうすれば解決できますか?

編集する:

学習目的で新しいシステムコールを追加するために、カーネルを次のように変更しました。

ファイルの生成

core-y          += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/ hello/

hello/フォルダを追加しました。

システムコール_64.tbl

546 x32 hello           sys_hello

システムコール.h

asmlinkage long sys_hello(void);

ファイルの生成

obj-y:= hello.o

こんにちはc

#include <linux/kernel.h>

asmlinkage long sys_hello(void)
{
    printk("Hello world\n");
    return 0;
}

ベストアンサー1

今日のnet-nextカーネルのコンパイル中に同じ問題が発生しました。

私の検索結果は次のとおりです。http://comments.gmane.org/gmane.comp.file-systems.lustre.devel/4032

Lustreモジュールは依存関係の問題を引き起こしており、その背後にある開発者は今のところパッチを作成してプッシュしなければなりませんが、パッチはまだnet-next(またはデフォルトのカーネル)rcツリーに含まれていないようです。

Lustreが必要ない場合は、2つの解決策があります。

  1. 上記のリンクと私の経験によると、問題のあるコードを削除することが1つのオプションです。 drivers/staging/lustre/lustre/libcfs/module.c(カーネルソースがあるディレクトリから)を編集して検索すると、IOC_LIBCFS_PING_TESTケースブロック全体を削除できます。 (Cコードを初めて使用する場合は、次の行が表示されるまで削除を続けますreturn 0;。)

    これが私がしたことで再コンパイルした後にモジュールをインストールできました。

  2. .configファイルの編集:.configでは、さまざまなLustreコンポーネントをモジュールにコンパイルするように指定できます。カーネルルートで .config を編集し、次の行を検索します。

    CONFIG_LUSTRE_FS=m

「m」を「n」に変更すると、モジュールはコンパイルされません。私はこの修正を直接テストしませんでした。

このパッチがカーネルソースに含まれるのを待つこともできますが、約1ヶ月が経過しました。

おすすめ記事