Pemecahan Masalah

Brandon Nielsen, Jibec Versi unknown Last review: 2021-02-22

Kernel, seperti perangkat lunak lainnya, memiliki bug. Ini adalah proyek besar dan kompleks yang dapat menyulitkan proses pemecahan masalah. Dokumen ini membahas beberapa teknik pemecahan masalah dasar untuk membantu mempersempit penyebab utama suatu masalah.

Kegagalan Boot

Terkadang kernel gagal melakukan booting. Tergantung pada posisi masalah dalam proses boot, mungkin ada atau tidak ada keluaran yang ditampilkan. Beberapa langkah awal yang baik adalah:

  • Hapus quiet (mengaktifkan lebih banyak pesan log) dan rhgb (menonaktifkan boot grafis) dari flag boot. Jika teks keluaran terlalu cepat untuk dibaca, tambahkan boot_delay=1000 (jumlah milidetik untuk jeda antar printk saat boot). Anda dapat menggunakan kamera untuk mengambil foto tampilan keluaran.

  • Boot dengan vga=791 (atau bahkan vga=1 jika kartu grafis tidak mendukung 791) akan menempatkan framebuffer dalam mode resolusi tinggi agar lebih banyak baris teks muncul di layar, sehingga memungkinkan analisis bug dengan konteks yang lebih luas.

  • Tambahkan parameter initcall_debug, yang akan menelusuri initcall saat dijalankan.

  • Jika Anda tidak mendapatkan keluaran sama sekali dari kernel, boot dengan earlyprintk=vga terkadang dapat memberikan informasi yang berguna.

Hang dan Beku

  • Memeriksa apakah tombol CapsLock (atau NumLock atau ScrollLock) menyebabkan lampu pada keyboard berubah status dapat digunakan sebagai indikasi apakah kernel benar-benar macet total, atau jika ada hal lain yang terjadi.

  • Tombol ajaib SysRq mungkin masih dapat digunakan. Anda mungkin perlu menambahkan sysrq_always_enabled=1 ke baris perintah boot kernel. Lihat artikel wiki tentang SysRq untuk detail penggunaannya.

  • Menetapkan nmi_watchdog=1 pada baris perintah kernel akan menyebabkan panic saat terjadi batas waktu NMI watchdog.

Log yang Perlu Dikumpulkan

Saat melaporkan masalah dengan kernel, Anda harus selalu menyertakan log kernel, yang biasanya dikumpulkan menggunakan perintah dmesg. Untuk beberapa jenis masalah, mungkin Anda perlu mengumpulkan log tambahan.

Masalah Input (touchpad dan sejenisnya)

Informasi mengenai cara mengumpulkan log didokumentasikan di situs web libinput.

Masalah Suara

alsa-info.sh menyediakan informasi tentang komponen kernel dan ruang pengguna. Jika Anda memiliki kernel yang berfungsi dan yang tidak berfungsi, Anda harus menyediakan keluaran alsa-info.sh untuk kedua kasus tersebut.

Bisecting Kernel

Jika masalah yang Anda temui tidak ada pada versi kernel yang lebih lama, sangat membantu untuk menggunakan git-bisect guna menemukan commit yang memperkenalkan masalah tersebut. Untuk tinjauan umum tentang git-bisect, lihat dokumentasinya. Panduan tentang cara melakukan bisect kernel disertakan dalam dokumentasi kernel. Panduan ini berisi detail khusus untuk Fedora.

Proses bisect memakan waktu, tetapi sangat mudah dilakukan dan sering kali merupakan cara terbaik untuk menemukan penyebab masalah. Jika Anda benar-benar tertarik agar masalah Anda cepat diperbaiki, proses bisect akan mempercepatnya secara signifikan dalam banyak kasus.

  1. Temukan versi terbaru yang masih berfungsi. Ini akan menjadi versi "good" awal. Versi pertama yang Anda temukan tidak berfungsi akan menjadi versi "bad" awal.

  2. Instal dependensi yang diperlukan untuk membangun kernel.

  3. Selanjutnya, dapatkan kode sumber.

  4. Siapkan berkas .config. Dengan asumsi Anda memiliki kernel versi baik dan buruk yang sudah terpasang, konfigurasi keduanya akan ada di /boot/.[1]

  5. Mulai git-bisect baru dengan git bisect start.

  6. Tandai versi terbaru yang berfungsi sebagai "good" dengan git bisect good <tag>. Contoh: git bisect good v4.16.8.

  7. Tandai versi pertama yang tidak berfungsi sebagai "bad" dengan git bisect bad <tag>. Contoh: git bisect bad v4.17.

  8. Bangun kernel. Terkadang, beberapa commit tidak dapat dibangun. Jika hal ini terjadi, lewati commit tersebut dengan git bisect skip.

  9. Instal kernel.

  10. Lakukan reboot ke kernel baru dan uji apakah kernel tersebut berfungsi dengan baik.

  11. Jika kernel baru berfungsi, tandai sebagai good dengan git bisect good. Jika tidak, tandai sebagai bad dengan git bisect bad.

  12. Ulangi lima langkah sebelumnya hingga Anda menemukan commit yang menyebabkan masalah.


1. Saat melakukan bisect antar versi utama (misalnya antara v4.16 dan v4.15), opsi konfigurasi baru akan ditambahkan dan dihapus seiring proses bisect. Biasanya aman untuk memilih pengaturan default.