GNU/Linux >> Belajar Linux >  >> Linux

Linux, AMD GPU, layar hitam saat boot

Baru-baru ini, saya mengalami masalah terkait perangkat keras baru dengan distro Linux. Di Linux Mint 20.2, saat mem-boot dengan daya baterai, yaitu, tidak ada stopkontak, proses boot akan berhenti di beberapa titik, dengan layar hitam yang tidak responsif ditampilkan. Satu-satunya resolusi adalah mem-boot ulang, atau menyalakan host dengan pengisi daya terpasang.

Yang menarik adalah hal ini terjadi pada laptop IdeaPad 3 yang relatif baru dengan grafis AMD Vega 8. Dan itu sangat mengganggu saya, karena sepertinya selalu ada masalah dengan perangkat keras. Nirkabel di mesin ini, grafik di sini, kontrol I/O di sini, kamera di sana, dan seterusnya. Selalu masalah, selalu alasan. Nah, mari kita lihat apa yang bisa kita lakukan di sini, dan bagaimana cara memperbaikinya.

Masalah lebih detail

Saya mengalami masalah dengan Linux Mint. Tapi saya menduga masalahnya mempengaruhi basis yang jauh lebih luas. Memang, jika Anda mencari "layar hitam boot AMD", Anda akan mendapatkan banyak hasil untuk utas forum, baik itu Ubuntu, Mint, Arch, Manjaro, atau Gentoo, sejak 2019, dengan banyak rekomendasi dan sangat sedikit solusi aktual . Mengapa? Karena memperbaiki masalah dengan driver membutuhkan keahlian, dan jika kernel dan/atau driver Anda tidak menawarkan fungsionalitas yang tepat, tidak banyak yang dapat Anda lakukan. Ini juga menyoroti pertanyaan tentang driver open-source versus closed-source, seolah-olah itu membuat perbedaan. Tidak, karena keahlian adalah keahlian.

Selain kata-kata kasar, mesin IdeaPad 3 memiliki konfigurasi triple-boot, termasuk juga MX-21 KDE dan Windows. Karena kedua sistem lainnya bekerja tanpa masalah, saya dapat mengesampingkan masalah perangkat keras, dan fokus pada apa yang salah (dan berbeda) dengan urutan boot Mint.

Untuk itu, saya mengambil file dmesg, kern.log, X.org.log dan log sistem dari Mint dan MX-21 dan membandingkannya, berdampingan, melakukan perbedaan yang sebenarnya. Satu-satunya perbedaan nyata adalah di log kernel, di mana Mint berhenti booting sementara distro lain dengan gembira melanjutkan. Kesalahan berbunyi sebagai berikut:

...
kernel:[] [drm:amdgpu_job_timedout [amdgpu]] *ERROR* Informasi proses:proses Xorg pid 790 thread Xorg:cs0 pid 824
kernel:[] amdgpu 0000:03:00.0:Reset GPU dimulai!
kernel:[] amdgpu 0000:03:00.0:Reset GPU berhasil, mencoba melanjutkan
kernel:[] [drm] PCIE GART 1024M diaktifkan (tabel di 0x000000F400900000).
kernel:[] [drm] PSP sedang melanjutkan...
kernel:[] [drm] cadangan 0x400000 dari 0xf47f800000 untuk PSP TMR
kernel:[] [drm] perintah psp gagal dan status respons adalah (0x7)
kernel:[] [drm] VCN decode dan encode berhasil diinisialisasi (di bawah Mode SPG).
kernel:[] amdgpu 0000:03:00.0:ring gfx menggunakan VM inv eng 0 pada hub 0
...

Akhirnya, reset GPU berhasil, tetapi tidak membantu. Layar tetap hitam. Sekarang, izinkan saya menunjukkan kepada Anda bagaimana Anda dapat menyelesaikan atau mengatasi masalah tersebut. Kami memiliki beberapa opsi yang kami miliki.

Solusi

Oke, jadi inilah yang dapat Anda lakukan:

Instal kernel baru (jika tersedia)

Tingkatkan kernel sistem dan/atau firmware. Di Linux Mint, yang biasanya menyematkan kernel, Anda dapat mengunduh yang baru secara manual melalui utilitas Pembaruan Sistem. Ini akan memperingatkan Anda, dan kemudian Anda dapat memilih versi yang diinginkan dan mengkonfigurasinya. Untuk Mint 20.2 Uma, Anda dapat naik dari kernel 5.4 ke kernel 5.13.

Ketika saya menginstal kernel baru dan melihat output konfigurasi, saya juga melihat serangkaian pesan peringatan selama pembuatan file initramfs:

...
W:Kemungkinan firmware hilang /lib/firmware/amdgpu/vangogh_vcn.bin untuk modul amdgpu
W:Kemungkinan firmware hilang /lib/firmware/amdgpu/navy_flounder_vcn.bin untuk modul amdgpu
W:Kemungkinan firmware hilang /lib/firmware/amdgpu/navi12_vcn.bin untuk modul amdgpu
W:Kemungkinan firmware hilang /lib/firmware/amdgpu/aldebaran_vcn.bin untuk modul amdgpu
...

Anda dapat mengabaikan ini JIKA arsitektur GPU AMD Anda tidak ditampilkan dalam daftar ini. Dalam kasus saya, Vega 8 didukung dengan benar (yaitu tidak ada dalam daftar ini). Bagaimana seseorang tahu? Nah, Anda dapat menjalankan perintah lspci -v, yang akan mencantumkan semua komponen perangkat keras Anda yang berbeda. Anda memerlukan entri yang cocok dengan driver kernel yang digunakan, dalam hal ini amdpu.

03:00.0 Pengontrol yang kompatibel dengan VGA:Advanced Micro Devices, Inc. [AMD/ATI] Picasso (rev c2) (prog-if 00 [pengontrol VGA])
Subsistem:Lenovo Picasso
...

Dengan cara ini, saya menemukan bahwa grafik Vega 8 saya sebenarnya sesuai dengan model arsitektur yang disebut Picasso. Saya kira itu menjelaskan nama yang digunakan, secara umum. Output ini hanya suara tidak rapi yang memberi tahu Anda tentang kernel baru yang tidak mendukung model GPU tertentu. Sekali lagi, ini membuka pertanyaan yang lebih luas tentang kompatibilitas mundur Linux dan semacamnya, tetapi kita tidak akan membahasnya sekarang. Nyalakan ulang, dan semoga ini berhasil.

Mulai host dengan daya terpasang

Ini menjengkelkan, tetapi ini adalah solusi sederhana jika Anda tidak nyaman dengan membuat perubahan sistem apa pun, atau jika Anda tidak ingin melakukan sesuatu yang istimewa sampai distro Linux Anda memperbaiki masalahnya. Namun, masalah ini menyoroti satu kelemahan (kecil) dari kebijakan kernel Mint, dan fenomena umum yang lebih luas dari dukungan perangkat keras di Linux. Karena, jika distro Anda tidak memiliki kernel yang diperbarui, Anda tidak dapat berbuat banyak.

Alasan "trik" ini bekerja adalah karena sistem dengan daya penuh (berlawanan dengan daya baterai) menggunakan profil daya yang berbeda. Jika Anda benar-benar paham, Anda dapat memainkan opsi performa daya BIOS, jika tersedia, atau mengubah setelan daya GPU, tetapi ini hanya dimaksudkan sebagai tindakan sementara.

Ubah parameter boot

Melanjutkan apa yang saya sebutkan sebelumnya, Anda dapat memulai sistem dengan meneruskan berbagai parameter berbeda ke modul kernel AMD GPU (amdgpu). Anda dapat memeriksa jenis parameter dan opsi yang didukung modul dengan menjalankan perintah modinfo:

modinfo amdgpu

nama file:/lib/modules/5.13.0-22-generic/kernel/drivers/gpu/drm/amd/amdgpu
/amdgpu.ko
lisensi:GPL dan hak tambahan
deskripsi:AMD GPU
penulis:tim driver linux AMD
...
parm:audio:Audio diaktifkan (-1 =otomatis, 0 =nonaktifkan, 1 =aktifkan) (int)
parm:disp_priority:Prioritas Tampilan (0 =otomatis, 1 =normal, 2 =tinggi) (int)
parm:hw_i2c:hw i2c engine enable (0 =nonaktifkan) ( int)
parm:pcie_gen2:PCIE Gen2 mode (-1 =otomatis, 0 =nonaktifkan, 1 =aktifkan) (int)
parm:msi:dukungan MSI (1 =aktifkan, 0 =nonaktifkan, - 1 =otomatis) (int)
...

Misalnya, beberapa opsi yang tersedia dapat Anda coba - tetapi JANGAN kecuali Anda memahami apa yang Anda lakukan!

amdgpu.noretry=0
amdgpu.dc=1

Ini perlu ditambahkan ke baris boot kernel di menu boot. Dengan distro Linux terbaru yang menggunakan bootloader GRUB2, maka urutan perintahnya adalah sebagai berikut:

  • Buka /etc/default/grub dalam editor teks, sebagai root atau sudo (buat cadangan terlebih dahulu)
  • Tambahkan satu atau beberapa opsi amdgpu ke baris GRUB_CMDLINE_LINUX_DEFAULT.
  • Simpan file dan perbarui konfigurasi GRUB dengan:

sudo update-grub

Atau, pada sistem yang tidak menggunakan skrip wrapper di atas:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Nyalakan ulang sistem Anda dan lihat apakah masalah Anda telah teratasi. Anda dapat memeriksa bagaimana sistem mem-boot dengan memeriksa baris perintah kernel - atau lebih tepatnya, jika boot dengan baterai baik-baik saja, ha ha!

cat /proc/cmdline

Sekarang, pertanyaan besarnya adalah, opsi amdgpu mana yang harus Anda tambahkan?

Tidak ada jawaban sederhana untuk ini, saya khawatir. Dalam kebanyakan kasus, kekurangan perbaikan kernel/firmware yang sebenarnya, Anda akan menebak, berdasarkan pesan kesalahan yang Anda lihat di log kernel, dan berharap opsi spesifik dapat melakukan trik. Ini karena pesan kesalahan sering kali bersifat umum, dan tanpa keahlian dalam tumpukan grafis dan driver tertentu, Anda tidak dapat benar-benar memahaminya dengan beberapa opsi modul kernel.

Melakukan pengeditan ini berpotensi menyebabkan masalah dan komplikasi tambahan, itulah sebabnya Anda tidak boleh menerapkannya secara membabi buta, atau hanya menyalin saran mana pun dari forum. Pengujian saya menunjukkan bahwa tidak ada opsi yang benar-benar membuat perbedaan besar. Dua yang tercantum di atas hanya untuk referensi. Namun, jika pembaruan kernel tidak berfungsi, dan Anda harus dapat menggunakan laptop dengan daya baterai, maka saya rasa Anda tidak akan rugi apa-apa, dan sebaiknya Anda bereksperimen dan melihat apa yang terjadi.

Kesimpulan

Di sana kita pergi. Mudah-mudahan, laptop grafis AMD Anda yang menjalankan Linux sekarang berfungsi dengan benar, dan Anda tidak lagi melihat masalah layar hitam saat boot saat menggunakan daya baterai (atau skenario lainnya). Tutorial saya menguraikan tiga pendekatan utama:peningkatan kernel, solusi penggunaan daya, dan beberapa peretasan dengan parameter modul kernel, yang berisiko dan kemungkinan besar tidak akan memberi Anda hasil terbaik, tapi hei.

Saya tidak suka masalah seperti ini. Mereka selalu mengingatkan saya betapa rapuhnya Linux. Ya, itu berjalan pada banyak perangkat keras, dan itu terpuji, tetapi selalu 95% atau 91%, tidak pernah 100% terus menerus. Dan itu menjengkelkan. Yah, bagaimanapun, itu saja. Sekarang, saya pergi ke rintangan Tuxy saya berikutnya. Sampai jumpa.


Linux
  1. Linux – Kernel:Dukungan Namespaces?

  2. Linux – Penerusan Ip Kernel?

  3. Linux – Kernel Tidak Dapat Menemukan File /dev/sda Saat Boot?

  1. Linux – Apakah Kernel Linux/unix yang Berbeda Dapat Dipertukarkan?

  2. Layar Ubuntu Menjadi Hitam Setelah Boot Menggunakan GPU Khusus?

  3. Apakah mungkin mem-boot kernel Linux tanpa membuat gambar initrd?

  1. Perintah Dmesg di Linux

  2. Layar Hitam Saat Boot Setelah Amdgpu-pro Instal (16.04)?

  3. Bagaimana cara memberikan nilai ke modul kernel Linux bawaan saat boot?