GNU/Linux >> Belajar Linux >  >> Linux

Apa itu kernel tercemar di Linux?

Ketika kernel tercemar, itu berarti dalam keadaan yang tidak didukung oleh komunitas . Sebagian besar pengembang kernel akan mengabaikan laporan bug yang melibatkan kernel tercemar, dan anggota komunitas mungkin meminta Anda memperbaiki kondisi tercemar sebelum mereka dapat melanjutkan dengan mendiagnosis masalah yang terkait dengan kernel. Selain itu, beberapa fungsi debug dan panggilan API mungkin dinonaktifkan saat kernel tercemar.

Dalam sebagian besar kasus yang melibatkan driver berpemilik, Anda dapat dengan aman mengabaikan kondisi noda , tetapi beberapa skenario yang menyebabkan kernel tercemar mungkin merupakan indikasi masalah sistem yang serius.

Fitur ini dimaksudkan untuk mengidentifikasi kondisi yang mungkin mempersulit pemecahan masalah kernel dengan benar. Misalnya, pemuatan modul berpemilik dapat membuat keluaran debug kernel tidak dapat diandalkan karena pengembang kernel tidak memiliki akses ke kode sumber modul dan oleh karena itu tidak dapat menentukan apa yang mungkin telah dilakukan modul terhadap kernel. Demikian pula, jika kernel sebelumnya mengalami kondisi kesalahan atau jika terjadi kesalahan perangkat keras yang serius, informasi debug yang dihasilkan oleh kernel mungkin tidak dapat diandalkan.

Kernel dapat tercemar karena salah satu dari beberapa alasan , termasuk (namun tidak terbatas pada) berikut ini:

  • Penggunaan modul kernel berpemilik (atau tidak kompatibel dengan GPL)—ini adalah penyebab paling umum kernel tercemar dan biasanya dihasilkan dari pemuatan driver video NVIDIA atau AMD berpemilik
  • Penggunaan pementasan driver, yang merupakan bagian dari kode sumber kernel tetapi belum teruji sepenuhnya
  • Penggunaan di luar pohon modul yang tidak disertakan dengan kode sumber kernel Linux
  • Pemuatan paksa atau pembongkaran modul kernel (seperti memasukkan paksa modul yang tidak dibuat untuk versi kernel saat ini)
  • Penggunaan kernel SMP (multiprosesor) pada CPU uniprosesor tertentu yang tidak didukung, terutama prosesor AMD Athlon yang lebih lama
  • Penggantian DSDT ACPI, terkadang diperlukan untuk memperbaiki bug manajemen daya (lihat di sini untuk detailnya)
  • Kondisi kesalahan kritis tertentu, seperti pengecualian pemeriksaan mesin dan oopses kernel
  • Bug serius tertentu dalam firmware sistem (BIOS, UEFI) yang harus diatasi oleh kernel

Masing-masing kondisi ini diwakili oleh flag tertentu di kernel. Beberapa vendor Linux, seperti SUSE, menambahkan flag taint tambahan untuk menunjukkan kondisi seperti memuat modul yang tidak didukung oleh vendor.

Informasi lebih lanjut tersedia di dokumentasi kernel. Bendera noda yang tercantum di sana adalah (dengan _ pengganti 'kosong')

  • G|P :G jika semua modul yang dimuat memiliki GPL atau lisensi yang kompatibel, jika tidak, modul berpemilik telah dimuat. Modul tanpa MODULE_LICENSE atau dengan MODULE_LICENSE yang tidak dikenali oleh insmod sebagai kompatibel dengan GPL dianggap sebagai hak milik.
  • F|_ :jika ada modul yang dimuat paksa oleh "insmod -f" sebaliknya jika semua modul dimuat secara normal.
  • S|_ :jika oops terjadi pada kernel SMP yang berjalan pada perangkat keras yang belum disertifikasi aman untuk menjalankan multiprosesor. Saat ini hal ini hanya terjadi pada berbagai Athlon yang tidak mampu SMP.
  • R|_ :jika modul diturunkan paksa oleh rmmod -f , sebaliknya jika semua modul dibongkar secara normal.
  • M|_ :jika ada prosesor yang melaporkan Pengecualian Pemeriksaan Mesin, jika tidak, tidak ada Pengecualian Pemeriksaan Mesin yang terjadi.
  • B|_ :jika fungsi pelepas halaman menemukan referensi halaman yang buruk atau beberapa tanda halaman yang tidak diharapkan.
  • U|_ :jika pengguna atau aplikasi pengguna secara khusus meminta bendera Tainted disetel.
  • D|_ :jika kernel mati baru-baru ini, misalnya ada OOPS atau BUG.
  • A|_ :jika tabel ACPI telah diganti.
  • W|_ :jika peringatan sebelumnya telah dikeluarkan oleh kernel (Meskipun beberapa peringatan mungkin menyetel flag taint yang lebih spesifik.)
  • C|_ :jika driver pementasan telah dimuat.
  • SAYA|_ :jika kernel mengatasi bug parah di firmware platform (BIOS atau sejenisnya).
  • O|_ :jika modul yang dibangun secara eksternal ("di luar pohon") telah dimuat.
  • E|_ :jika modul yang tidak ditandatangani telah dimuat dalam tanda tangan modul yang mendukung kernel.
  • L|_ :jika soft lockup sebelumnya telah terjadi pada sistem.
  • K|_ :jika kernel telah ditambal langsung.

Linux
  1. Linux – Bagaimana Cara Menentukan Modul Yang Menodai Kernel?

  2. Apa perbedaan antara module_init dan init_module dalam modul kernel Linux?

  3. Apa artinya mengatakan kernel linux bersifat preemptive?

  1. perubahan parameter modul kernel (menggunakan /sys/module)

  2. Apa sumber kernel Linux saat ini?

  3. Apakah mungkin untuk mengembangkan modul kernel linux di CLion?

  1. Apa itu pengguna Linux?

  2. Linux – Kernel Tercemar Di Linux?

  3. Linux – Bagaimana Cara Memuat Ulang Modul Kernel dengan Benar?