web-dev-qa-db-ja.com

setpciはブリッジデバイスのレジスタ値を変更しません(NVIDIAドライバーのブラックスクリーンの問題)

最近、Macbook Air(2010年後半)をUbuntu 16.04でデュアルブートOS 10.10に設定しました。もちろん、独自のNVIDIAドライバーを使用しているときにブラックスクリーンの問題が発生しました。アンドレアスの修正 ここ を試しました。ステップ4でリブートして確認するときにブリッジデバイスのPCI-Eレジスタの正しい結果が得られないことを除いて、すべてが泳いでいるようです。これがステップ2で得られるものです。

Bus info          Device     Class          Description
=======================================================
pci@0000:00:00.0             bridge         MCP89 Host Bridge
pci@0000:00:03.0             bridge         MCP89 LPC Bridge
pci@0000:00:15.0             bridge         NVIDIA Corporation
pci@0000:00:17.0             bridge         MCP89 PCI Express Bridge
pci@0000:02:00.0             display        MCP89 [GeForce 320M]

説明に従って、grubスクリプト/ etc/grub.d/01_enable_vga.confを作成しました。

cat << EOF
setpci -s "00:17.0" 3e.b=8
setpci -s "02:00.0" 04.b=7
EOF

...また、パーミッションを変更し、grubを更新しました...

~> Sudo chmod 755 /etc/grub.d/01_enable_vga.conf
~> Sudo update-grub

...しかし、マシンを再起動して確認すると、ブリッジデバイスの値が正しくありません。

~> Sudo setpci -s "00:17.0" 3e.b
00
~> Sudo setpci -s "02:00.0" 04.b
07

NVIDIAドライバーをインストールする前にこのセットを正しく取得するためにできることについての提案はありますか?間違ったブリッジデバイスを変更していますか?これを行うためのより良い方法はありますか?

前もって感謝します!

2
Jiffy

SetpciがPCI-Eブリッジの値を変更しない場合、私はついに問題を解決しました。

Apple MacBookマシンでnVidia GeForceドライバーを機能させるためにsetpciコマンドを使用してPCI-Eブリッジレジスタの値を設定できない場合は、次の手順を試してください。

1. PCI-Eバス識別子を見つける

lshw -businfo -class bridge -class display

[root@kernelLinux]# lshw -businfo -class bridge -class display
Bus info          Device      Class          Description
========================================================
pci@0000:00:00.0              bridge         MCP89 Host Bridge
pci@0000:00:03.0              bridge         MCP89 LPC Bridge
pci@0000:00:15.0              bridge         NVIDIA Corporation
pci@0000:00:17.0              bridge         MCP89 PCI Express Bridge
pci@0000:02:00.0              display        MCP89 [GeForce 320M]

PCI Express BridgeのIDと、displayのフォーマットが必要です。 XX:XX.X

IDは異なる場合があります。

この例では、PCI-EブリッジのIDは00:17.0および02:00.0[GPU]を表示します。

2. GRUBスクリプトを作成します

スクリプトは、上記の投稿とは少し異なります。

私は2つのことに気づきました。ディストリビューション(私の場合はCentos)インストールプロセスを使用してインストールされたGrub2には、setpcigrubモジュールが含まれていません。これが、grubがブート中にレジスタを変更しない理由です。次に、レジスタを変更するコマンドを実行する前に、setpciモジュールをgrubにロードする必要があります。

Grub2-efi-modulesをダウンロードする

Ubuntu Linux

Sudo apt-get install grub-efi-AMD64-bin

Fedora Linux

Sudo dnf install grub2-efi-modules

CentOS Linux

Sudo yum install grub2-efi-modules

モジュールは/ usr/lib/grub/x86_64-efi /にインストールされますが、setpciモジュールファイルは/ boot/efi/EFI/ubuntu/x86_64-efi /に存在する必要があります

X86_64-efiフォルダーを作成します。

/ boot/EFI /のUbuntuフォルダーは、OSインストールプロセスでの名前の付け方によってマシンによって異なる場合があります。貼り付けないでください。正しいパスに置き換えてください。

Sudo mkdir /boot/EFI/ubuntu/x86_64-efi

Setpciモジュールファイルをgrub2フォルダーにコピーします

Sudo cp /usr/lib/grub/x86_64-efi/setpci.* /boot/EFI/ubuntu/x86_64-efi

01_enable_vga.confファイルを作成します。

ファイルには次のコード行が含まれている必要があります。

PCIブリッジの場合は00:17.0を、ディスプレイ[GPU]の場合は02:00.0を値に置き換えてください。

Sudo nano /etc/grub.d/01_enable_vga.conf

cat << EOF
insmod setpci
setpci -s "00:17.0" 3e.b=8
setpci -s "02:00.0" 04.b=7
EOF

その後、権限を修復します

Sudo chmod 755 /etc/grub.d/01_enable_vga.conf

/boot/efi/EFI/ubuntu/grub.cfgを更新します

Ubuntu Linux

Sudo update-grub

このコマンドは、他のディストリビューションでのみ実行します(update-grub後のUbuntuでは必要ありません):

grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

3.システムを再起動し、レジスタを確認します

マシンを再起動し、動作しているかどうかを確認します。 IDを再度自分のものに置き換えます。端末には、最終的に08(PCI-Eブリッジ)および07(GPU)が表示されます。

Sudo setpci -s "00:17.0" 3e.b
08

Sudo setpci -s "02:00.0" 04.b
07

4. nVidiaドライバーをインストールする

スクリーンショット: http://imgur.com/a/YiBXi

1
ylwghst

私は同じ問題を抱えていて、グーグルのためにここに来ました。あなたと私は、ファイル/etc/grub.d/01_enable_vga.confに混乱していたようです。

ファイルにcatコマンドを含めたいが、catで作成したくない(ネストされたcatで作成できる)。だからこれを試してください:

Sudo bash -c "cat > /etc/grub.d/01_enable_vga.conf" << END
cat << EOF
setpci -s "00:17.0" 3e.b=8
setpci -s "02:00.0" 04.b=7
EOF
END

私はここで答えを得ました: MacBook Pro 7,1 + Ubuntu 16.04 LTS + nVidia drivers

0
Sandy