「Hello World」モジュール(およびNVIDIAおよびVirtualBox)を作成できません。

「Hello World」モジュール(およびNVIDIAおよびVirtualBox)を作成できません。

まず、詳細です。

今後:カーネル: 3.2.0-2-amd64, nvidia ドライバ: 295.59

後ろに:カーネル: 3.2.0-3-amd64, nvidia ドライバ: 302.17-3

私のDebian wheezyは常に最新の状態です。実は、毎日こうやってみるとapt-get upgrade -sそもそもこんな問題に封着するようになりました。

明らかに、一度後にapt-get upgrade私のDebianにビルドエコシステムおよび/またはDKMS自体に関連する「欠陥」がありました。

NVIDIAドライバは、公式Wikiが推奨するどのような方法でも構築できません。公式NVIDIAバイナリ(アップデートの1つのログフラグメント)が含まれています。

出力は次のとおりですdpkg-reconfigure nvidia-kernel-dkms

# dpkg-reconfigure nvidia-kernel-dkms

------------------------------
Deleting module version: 302.17
completely from the DKMS tree.
------------------------------
Done.
Loading new nvidia-302.17 DKMS files...
Building only for 3.2.0-3-amd64
Building initial module for 3.2.0-3-amd64
Error!  Build of nvidia.ko failed for: 3.2.0-3-amd64 (x86_64)
Consult the make.log in the build directory
/var/lib/dkms/nvidia/302.17/build/ for more information.

関連スニペットは/var/lib/dkms/nvidia/302.17/build/make.log次のとおりです。問題はいいえ編集中に私はそれを保証することができます。

  LD [M]  /var/lib/dkms/nvidia/302.17/build/nvidia.o
  Building modules, stage 2.
  MODPOST 0 modules
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-3-amd64'
make: Leaving directory `/var/lib/dkms/nvidia/302.17/build'

それはすべてです。同じディレクトリ内の他のファイルには何の説明もありません(少なくとも私が確認した限り)。

質問する前に:私は今nouveauドライバを使用しています(とにかく選択肢はありません)、私にとってはあまりうまくいきません。私は3つのデスクトップを持っていますが、1つは映画を再生し続け、もう2つは非常に忙しい開発者です。 nouveauドライバーは少し失敗します(2番目の画面の映画は常に水平ストライプになり、XFCEコンソールはスクロールなどで少し遅れます)。

質問:

  • カーネルのバージョンを変更する必要がありますか?試しましたが成功しません3.2.0-2-amd64でした3.2.0-3-amd64。コンピュータを実行しよう3.2.0-3-rt-amd64とした後、数分後にコンピュータがハングして再インストールするのが怖かったです。
  • 私のビルド環境でバージョンを変更する必要がありますか? (アップデートで述べたように、これはNVIDIAの問題ではないことがわかりました)。
  • 私のリンカーに問題があると仮定する必要がありますか(私はいいえを使用してパッケージで使用していますgold。それでは、DKMSアプローチが最終的に機能するようにするにはどうすればよいですか?接続フェーズで問題が発生しているようです(そしてMODPOSTには0つのモジュールが表示されます)。ldbinutils

個人的には、これは私が一般的に認めるよりも深いレベルで私を邪魔します。私は一度Debianに対する大きな尊敬、今彫刻。さて、apt-get upgradeすべてのオープンソースカーネルドライバのコンパイル/リンクを中断する簡単な方法はありますか?

とても残念です。

アップデート#1:

私は実際に公式304.22 NVIDIAドライバをインストールしようとしましたが、ここにログファイルがあります。リンクが失敗したようですが、そうですか?

また、DKMS統合を同時に有効にしようとすると、スクリプトは現在のカーネルバージョンを確認できないというメッセージが表示されます(3番目の更新のテキスト)。

nvidia-installer ログファイル '/var/log/nvidia-installer.log'
作成時間:2012年7月21日土曜日22:59:30
インストーラバージョン:304.22

パス:/usr/local/rvm/gems/ruby-1.9.3-p194/bin:/usr/local/rvm/gems/ruby-1.9.3-p194@global/bin:/usr/local/rvm/rubies /ruby-1.9.3-p194/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

NVIDIAインストーラのコマンドライン:
    ./nvidia - インストールプログラム

使用: nvidia-installer ncurses ユーザーインターフェイス
->ライセンスが承認されました。
-> NVIDIAドライババージョン304.22をインストールします。
->ドライバ(バージョン:304.22)がシステムにすでにインストールされているようです。このドライバ(バージョン:304.22)をインストールすると、既存のドライバが削除されます。あなたは本当に続けたいですか? (「いいえ」を選択するとインストールが中断されます。)(回答:はい)
->カーネルモジュールソースをDKMSに登録しますか?これにより、後で別のカーネルをインストールすると、DKMSは自動的に新しいモジュールを構築できます。 (答え:いいえ)
-> CC = "gcc-4.6"を使用してCCの健全性チェックを実行します。
-> CC = "gcc-4.6"を使用してCCバージョンチェックを実行します。
-> カーネルソースパス: '/lib/modules/3.2.0-3-amd64/source'
-> カーネル出力パス: '/lib/modules/3.2.0-3-amd64/build'
-> rivafbチェックを実行します。
-> nvidiafbチェックを実行します。
-> Xenチェックを実行します。
-> カーネルモジュールのビルドディレクトリをクリーンアップします。
   実行: 'cd ./kernel;make clean'...
->カーネルモジュールの構築:
   実行: 'cd ./kernel;make module SYSSRC=/lib/modules/3.2.0-3-amd64/source SYSOUT=/lib/modules/3.2.0-3-amd64/build'...
   NVIDIA:KBUILDに電話しています...
   make -C /lib/modules/3.2.0-3-amd64/build \
    KBUILD_SRC=/usr/src/linux-headers-3.2.0-3-common \
    KBUILD_EXTMOD="/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel" -f /usr/src/linux-headers-3.2.0-3-common/Makefile \
    基準寸法
   test -e include/ generate/autoconf.h -a -e include/config/auto.conf ||
    エコ;
    echo "エラー:誤ったカーネル構成。";
    echo "include/generated/autoconf.h または include/config/auto.conf がありません。";\
    echo "この問題を解決するには、カーネル src で 'make oldconfig && make prepare' を実行してください。";
    エコ;
    /空/偽)
   mkdir -p /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/.tmp_versions ; rm -f /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/.tmp_versions/*
   make -f /usr/src/linux-headers-3.2.0-3-common/scripts/Makefile.build obj=/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel
     gcc-4.6 -Wp, -MD, /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/.nv.od -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.6/include -I /usr/src/linux-headers-3.2.0-3-common/arch/x86/include -Iarch/x86/include/ 作成済み -Iinclude -I/usr/src/linux-headers-3.2.0-3-common /include -include /usr/src/linux-headers-3.2.0-3-common/include/linux/kconfig.h -I/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit 関数宣言 -Wno-format-security -fno-delete-null-pointer-checks -Os -m64 -mtune=generic - mno -red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG -fno-async-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=2048 -Wno-unused-but-set-variable -fomit-frame-pointer - g -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -I/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel -Wall -MD -Wsign-compare - Wno -俳優-
   qual -Wno-error -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"304.22\" -Wno-unused-function -Wuninitialized -mno-red-zone -mcmodel=kernel -UDEBUG -U_DEBUG -DNDEBUG -DMODULE s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(nv)" -D"KBUILD_MODNAME=KBUILD_STR(nvidia)" -c -o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/.tmp_nv. tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv.c
   /usr/src/linux-headers-3.2.0-3-common/include/linux/kernel.h:17:0 に含まれるファイルで、
                    /usr/src/linux-headers-3.2.0-3-common/include/linux/sched.h:55で、
                    /usr/src/linux-headers-3.2.0-3-common/include/linux/utsname.h:35で、
                    /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-linux.h:38で、
                    /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv.c:13から:
   /usr/src/linux-headers-3.2.0-3-common/include/linux/bitops.h: "hweight_long" 関数で:
   /usr/src/linux-headers-3.2.0-3-common/include/linux/bitops.h:49:41: 警告: 条件式 [-Wsign-compare] の符号付き型と符号なし型
   /usr/src/linux-headers-3.2.0-3-common/arch/x86/include/asm/uaccess.h:575:0 に含まれるファイルで、
                    /usr/src/linux-headers-3.2.0-3-common/include/linux/poll.h:14で、
                    /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-linux.h:97で、
                    /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv.c:13から:
   /usr/src/linux-headers-3.2.0-3-common/arch/x86/include/asm/uaccess_64.h: "copy_from_user" 関数で:
   /usr/src/linux-headers-3.2.0-3-common/arch/x86/include/asm/uaccess_64.h:53:6: 警告: 符号付き整数式と符号なし整数式の比較 [-Wsign - compare]

...同じ警告のため、多くのコンパイル出力が削除されます...

     ld -m elf_x86_64 -r -o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nvidia.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel /NVIDIA-Linux-x86_64-304.22/kernel/nv.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-acpi.o /tmp/selfgz10141/NVIDIA-Linux-x86 -chrdev.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-cray.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-g14/NVIDIA -Linux-x86_64-304.22/kernel/nv-i2c.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-mempool.o /tmp/selfgz10141/NVI
   DIA-Linux-x86_64-304.22/kernel/nv-mlock.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-mmap.o /tmp/selfgz10141/NVIDIA-Linux-x86 nv-p2p.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-pat.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-procf1 NVIDIA-Linux-x86_64-304.22/kernel/nv-usermap.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-vm.o /tmp/selfgz10141/NVIDIA-2-Linux nv-vtophys.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/os-agp.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/os-interfaceo NVIDIA-Linux-x86_64-304.22/kernel/os-mtrr.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/os-registry.o /tmp/selfgz10141/NVIDIA-2-3-8 os-smp.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/os-usermap.o
   (cat /dev/null; echo kernel//tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nvidia.ko;) > /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/ker
   make -f /usr/src/linux-headers-3.2.0-3-common/scripts/Makefile.modpost
     スクリプト /mod/modpost -m -i /usr/src/linux-headers-3.2.0-3-amd64/Module.symvers -I /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/Module.symvers - /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/Module.symvers -S -w -s
   NVIDIA:KBUILDを離れました。
   nvidia.koのビルドに失敗しました!
   make[1]: *** [モジュール] エラー 1
   make: *** [モジュール]エラー2
->エラー。
エラー:NVIDIAカーネルモジュールを構築できません。
エラー:インストールに失敗しました。詳細については、「/var/log/nvidia-installer.log」ファイルを参照してください。 www.nvidia.comのLinuxドライバのダウンロードページにある追加情報ファイルで、インストールのトラブルシューティングに関する提案を見つけることができます。

アップデート#2:

提案によるとスターネーマー、再インストールしましたlinux-headers-3.2.0-3-amd64。完了すると、DKMS が起動し、NVIDIA ドライバーのコンパイルを再試行します。ファイルの内容は次のとおりです/var/lib/dkms/nvidia/304.22/build/make.log

カーネル3.2.0-3-amd64(x86_64)用nvidia-304.22用DKMS make.log
2012年7月22日日曜日14:50:58 EST
Linux 2.4カーネルを使用している場合は、次の点を確認してください。
以下に一致するカーネルソースを設定しました。
カーネルまたは正しいカーネルヘッダセットがインストールされました。
あなたのシステムから。

Linux 2.6カーネルを使用している場合は、次の点を確認してください。
カーネルと一致するカーネルソースを設定しました。
あなたのシステムにインストールされました。別途指定する場合
「KBUILD_OUTPUT」の出力ディレクトリを使用するか、
"O" KBUILD パラメーター、このパラメーターを指定する必要があります。
SYSOUT環境変数を含むディレクトリまたは
同等のnvidia-installerコマンドラインオプション。

カーネルがどこでどのように供給されるかに応じて(または
カーネルヘッダファイル)がインストールされている場合は、指定する必要があります。
その場所はSYSSRC環境変数に対応します。
同等のnvidia-installerコマンドラインオプション。

***ターゲットカーネルのバージョンを確認できません。 ***

make: *** [select_makefile]エラー1

アップデート#3:

数日間のインターネット検索の終わりに、これがNVIDIAの間違いであるかどうか疑問になり始めました。その結果、そうではありません。 (testingリポジトリから)Virtual Box 4.1をインストールしようとしましたが、偶然発見しました。これはまた:

#cat /var/lib/dkms/virtualbox/4.1.18/build/make.log
カーネル 3.2.0-3-amd64(x86_64) を使用する virtualbox-4.1.18 用 DKMS make.log
2012年7月24日火曜日17:58:57 EST
make: "/usr/src/linux-headers-3.2.0-3-amd64" ディレクトリを入力します。
  LD /var/lib/dkms/virtualbox/4.1.18/build/build-in.o
  LD /var/lib/dkms/virtualbox/4.1.18/build/vboxdrv/built-in.o
  CC [M] /var/lib/dkms/virtualbox/4.1.18/build/vboxdrv/linux/SUPDrv-linux.o
...チラシ...
  CC[M] /var/lib/dkms/virtualbox/4.1.18/build/vboxpci/SUPR0IdcClientComponent.o
  CC[M] /var/lib/dkms/virtualbox/4.1.18/build/vboxpci/linux/SUPR0IdcClient-linux.o
  LD [M] /var/lib/dkms/virtualbox/4.1.18/build/vboxpci/vboxpci.o
  ビルディングブロック、ステップ2。
  MODPOST 0モジュール
make: "/usr/src/linux-headers-3.2.0-3-amd64" ディレクトリから出る

もちろん、もっと詳しくはありません(すでに言ったように、〜らしいリンカーの問題に似ていますが、まだはっきりしません。しかし、何も触れなかったと誓います。私はちょうどapt-get upgrade-sを毎日します。それから明らかにそれはうまくいかなかった。

アップデート#4:

私は以下に説明するように小さなモジュールを作ろうとしました。https://stackoverflow.com/questions/4715259/linux-modpost-does-not-build-anything。実際に私はまだ見ているMODPOST 0 modulesV=1Makefileに入れたときの出力は次のとおりです。

#作る
make -C /lib/modules/3.2.0-3-amd64/build M=/home/dimi/code/hello V=1 モジュール
make[1]: `/usr/src/linux-headers-3.2.0-3-amd64' ディレクトリを入力します。
make -C /usr/src/linux-headers-3.2.0-3-amd64\
    KBUILD_SRC=/usr/src/linux-headers-3.2.0-3-common \
    KBUILD_EXTMOD="/home/dimi/code/hello" -f /usr/src/linux-headers-3.2.0-3-common/Makefile \
    基準寸法
test -e include/ generate/autoconf.h -a -e include/config/auto.conf ||
    エコ;
    echo "エラー:誤ったカーネル構成。";
    echo "include/generated/autoconf.h または include/config/auto.conf がありません。";\
    echo "この問題を解決するには、カーネル src で 'make oldconfig && make prepare' を実行してください。";
    エコ;
    /空/偽)
mkdir -p /home/dimi/code/hello/.tmp_versions rm -f /home/dimi/code/hello/.tmp_versions/*
make -f /usr/src/linux-headers-3.2.0-3-common/scripts/Makefile.build obj=/home/dimi/code/hello
   gcc-4.6 -Wp, -MD, /home/dimi/code/hello/.hello.od -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.6/include -I/usr/src/linux -headers-3.2.0-3-common/arch/x86/include -Iarch/x86/include/ 生成 -Iinclude -I/usr/src/linux-headers-3.2.0-3-common/include -include /usr /src/linux-headers-3.2.0-3-common/include/linux/kconfig.h -I/home/dimi/code/hello -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict -aliasing -fno-common -Werror-暗黙的な関数宣言-Wno-format-security -fno-delete-null-pointer-checks -Os -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit - at -a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno no - sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=2048 -Wno-unused-but-set-variable -fomit-frame-pointer -g -Wdeclaration-after-statement -Wno-pointer - sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(hello)" -D"KBUILD_MODNAME=KBUILD_STR(hello)" -c -ホーム /dimi/code/hello/.tmp_hello.o /home/dimi/code/hello/hello.c
(cat /dev/null; echo kernel//home/dimi/code/hello/hello.ko;) > /home/dimi/code/hello/modules.order
make -f /usr/src/linux-headers-3.2.0-3-common/scripts/Makefile.modpost
  スクリプト /mod/modpost -m -i /usr/src/linux-headers-3.2.0-3-amd64/Module.symvers -I /home/dimi/code/hello/Module.symvers -o /home/dimi/コード/hello/Module.symvers -S -w -c -s
make[1]: `/usr/src/linux-headers-3.2.0-3-amd64' ディレクトリを終了します。

削除すると、次のように表示されますV=1

#作る
make -C /lib/modules/3.2.0-3-amd64/build M=/home/dimi/code/hello モジュール
make[1]: `/usr/src/linux-headers-3.2.0-3-amd64' ディレクトリを入力します。
  CC[M] /home/dimi/code/hello/hello.o
  ビルディングブロック、ステップ2。
  MODPOST 0モジュール
make[1]: `/usr/src/linux-headers-3.2.0-3-amd64' ディレクトリを終了します。

ベストアンサー1

解決しました!

とても簡単です。/root/.bashrc以下の内容があります。

 export GREP_OPTIONS='--color=always'

次に変更してください。

 export GREP_OPTIONS='--color=never'

...そしてルートシェルを再起動します(確かに; このステップは省略しないでください)。すべてが再び機能し始めました。 NVIDIAとVirtualBoxカーネルモジュールの両方が最初の試みで構築されました。本当に嬉しいです! :-)

しかし、もう一度カーネルビルドツールに少しがっかりしました。彼らはよりよく認識し、以前の値を--color=never使用するたびに渡す必要がありますgrep。あるいは、以前の値を保存し、GREP_OPTIONSビルドプロセスが進行中に上書きして復元する必要があります。

この問題に対する私の一週間の壮大な戦いが、コミュニティとカーネルビルドツール開発者の両方にとって貴重なものになることを願っています。

私と一緒に滞在しながら助けを与えようと努力してくださった方々に心から感謝します。

(すべてのクレジットはここにあります:http://forums.gentoo.org/viewtopic-p-4156366.html#4156366)

おすすめ記事