저는 Intel 560과 Nvidia GTX 1050을 탑재한 Asus GL553을 가지고 있으며, nvidia-prime을 사용하여 하이브리드 카드를 구성하려고 합니다. Ubuntu Gnome 17.04를 설치한 다음 nvidia-381을 설치하고 프라임 셀렉트 인텔을 실행했는데 하드 재부팅을 해야 했고 로그인하려고 하면 시스템이 정지되었습니다. 이 모든 주제를 조사하고 읽었지만 해결책을 찾을 수 없습니다.
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
엔비디아를 올바르게 구성할 수 있는 사람이 있나요?
답변1
드디어 해냈습니다.
1.- SSDT 파일을 저장할 폴더를 만듭니다. 그런 다음 ACPI 테이블에서 추출합니다(이 부분을 루트로 실행).
# 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이 설치되어 있는지 확인하십시오. 우분투에서는 sudo apt 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을 찾으세요. 해당 줄에 보이는 숫자에 1을 더하세요.
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