Ubuntu 在 nvidia-prime intel 之后登录时冻结

Ubuntu 在 nvidia-prime intel 之后登录时冻结

我有一台配备 Intel 560 和 Nvidia GTX 1050 的华硕 GL553,我尝试使用 nvidia-prime 配置我的混合卡。我安装了 Ubuntu Gnome 17.04,然后安装了 nvidia-381 并运行 prime-select intel,我不得不硬重启,当我尝试登录时,系统冻结了。我研究并阅读了所有这些主题,但找不到解决方案。

https://devtalk.nvidia.com/default/topic/991853/complete-freeze-with-nvidia-prime/?offset=8 https://devtalk.nvidia.com/default/topic/991853/complete-freeze-with-nvidia-prime/?offset=18 https://askubuntu.com/questions/831928/edited-to-shutdown-hangs-on-intel-grapics-on-16-04-with-4-7-2-kernel https://askubuntu.com/questions/879856/nvidia-prime-cant-switch-to-intel https://bugs.launchpad.net/lightdm/+bug/1637733 https://bugs.launchpad.net/ubuntu/+source/nvidia-prime/+bug/1663926

有谁可以正确配置nvidia吗?

答案1

我终于做到了。

1.- 创建一个文件夹来存储 SSDT 文件。然后从 ACPI 表中提取它(以 root 身份运行这部分):

# mkdir dsdt
# cd dsdt
# SSDT_FILES=`ls /sys/firmware/acpi/tables/ | grep SSDT`
# for file in $SSDT_FILES ; do cat "/sys/firmware/acpi/tables/$file" > "$file.dat"; done
# cat /sys/firmware/acpi/tables/DSDT > DSDT.dat

2.- 确保您已安装 IASL。在 ubuntu 上,sudoapt install iasl就足够了。我下载了源代码并自己编译以获得最新版本,但我认为没有必要。

3.- 在一个 SSDT 文件中有一个重复的定义,我们无法对其进行反汇编。找出它是哪一个并将其删除:

# grep PRT0 *.dat
Binary file DSDT.dat matches
Binary file SSDT1.dat matches
# mv SSDT1.dat SSDT1.bak

所以就我而言,它是 SSDT1。用你得到的任何东西替换它。不要碰 DSDT.dat

4.- 接下来,我们找到包含我们需要更改的代码的 SSDT 文件。我们查找同时存在“NVID”和“OSYS”的文件:(在 grep 中可能有更好的方法来执行此操作)

# grep NVID *.dat
Binary file SSDT10.dat matches
Binary file SSDT3.dat matches
# grep OSYS SSDT10.dat
# grep OSYS SSDT3.dat
Binary file SSDT3.dat matches

因此,就我而言,它是 SSDT3,如果它不同,您可以用您获得的任何内容替换 SSDT3 的所有其他实例。

5.- 拆卸!

# iasl -e *.dat -d SSDT3.dat

6.- 希望此时您没有看到任何错误。将除声明之外的 OSYS 的所有实例替换为 Windows 7 的常量,并将定义块编号增加 1:

# sed -i '/^ *External/! s/OSYS/0x07D9/g' SSDT3.dsl
# sed -i '/^ *DefinitionBlock/ s/0x00001000/0x00001001/g' SSDT3.dsl

如果您有不同的 BIOS,定义块编号可能不是 1000。只需在文本编辑器中打开 SSDT3.dsl 并查找 DefinitionBlock。无论您在该行看到什么数字,都将其加一。

7.- 编译所有内容并希望没有错误。

# iasl -ve -tc -p SSDT3 SSDT3.dsl

8.- 制作图像:

# mkdir -p kernel/firmware/acpi
# cp SSDT3.aml kernel/firmware/acpi/ssdt3.aml
# find kernel | cpio -H newc --create > acpi_gpufix

8.- 以下所有说明均对应于 Ubuntu 和 GRUB2。将其复制到启动文件夹。 initrd.img 它是启动文件夹中的默认 img:

# cp acpi_gpufix /boot/

您可以通过编辑 /etc/grub.d/10_linux 将其永久添加到 GRUB 中。我不得不将线路更改initrd ${rel_dirname}/${initrd}initrd ${rel_dirname}/acpi_gpufix ${rel_dirname}/${initrd}.然后运行 ​​update-grub2。

9.- 检查它是否有效:

$ dmesg | grep ACPI | grep override
[    0.000000] ACPI: Table Upgrade: override [SSDT-PegSsd- PegSsdt]
[    0.000000] ACPI: SSDT 0x000000007A715080 Physical table override, new table: 0x0000000079493000

现在您可以更改 GPU 而不会冻结

来源:

https://github.com/Bumblebee-Project/Bumblebee/issues/764#issuecomment-306543064 https://devtalk.nvidia.com/default/topic/1012369/linux/laptop-freezes-changing-video-cards

相关内容