Pemecahan Masalah
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) danrhgb(menonaktifkan boot grafis) dari flag boot. Jika teks keluaran terlalu cepat untuk dibaca, tambahkanboot_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=vgaterkadang 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=1ke baris perintah boot kernel. Lihat artikel wiki tentang SysRq untuk detail penggunaannya. -
Menetapkan
nmi_watchdog=1pada 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.
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. |
-
Temukan versi terbaru yang masih berfungsi. Ini akan menjadi versi "good" awal. Versi pertama yang Anda temukan tidak berfungsi akan menjadi versi "bad" awal.
-
Instal dependensi yang diperlukan untuk membangun kernel.
-
Selanjutnya, dapatkan kode sumber.
-
Siapkan berkas
.config. Dengan asumsi Anda memiliki kernel versi baik dan buruk yang sudah terpasang, konfigurasi keduanya akan ada di/boot/.[1] -
Mulai
git-bisectbaru dengangit bisect start. -
Tandai versi terbaru yang berfungsi sebagai "good" dengan
git bisect good <tag>. Contoh:git bisect good v4.16.8. -
Tandai versi pertama yang tidak berfungsi sebagai "bad" dengan
git bisect bad <tag>. Contoh:git bisect bad v4.17. -
Bangun kernel. Terkadang, beberapa commit tidak dapat dibangun. Jika hal ini terjadi, lewati commit tersebut dengan
git bisect skip. -
Lakukan reboot ke kernel baru dan uji apakah kernel tersebut berfungsi dengan baik.
-
Jika kernel baru berfungsi, tandai sebagai good dengan
git bisect good. Jika tidak, tandai sebagai bad dengangit bisect bad. -
Ulangi lima langkah sebelumnya hingga Anda menemukan commit yang menyebabkan masalah.
v4.16 dan v4.15), opsi konfigurasi baru akan ditambahkan dan dihapus seiring proses bisect. Biasanya aman untuk memilih pengaturan default.
Want to help? Learn how to contribute to Fedora Docs ›