GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara membangun modul kernel Linux agar kompatibel dengan semua rilis kernel?

Singkatnya :kamu sulit dapat menulis modul kernel yang berguna, yang dapat dimuat ke kernel dengan rentang versi yang relatif luas.

Saat Anda membangun modul terhadap kernel yang dikompilasi dengan CONFIG_MODVERSIONS (seperti dalam kasus Anda), untuk setiap simbol, yang diekspor dari kernel, CRC untuk simbol ini disimpan dalam file modul. CRC adalah semacam jumlah kontrol , yang memperhitungkan, antara lain, tata letak tipe, yang digunakan untuk parameter fungsi. Misalnya, jika tata letak hipotetis struct A berbeda dalam dua kernel, CRC untuk fungsi f(struct A *a) di kernel ini juga berbeda.

Ketika sebuah modul dimuat ke dalam kernel yang sedang berjalan, CRC untuk semua fungsi dalam modul dibandingkan dengan fungsi untuk kernel. Jika berbeda, kernel menolak memuat modul. Untuk membaca lebih lanjut tentang mekanisme ini, lihat dokumentasi kernel (Documentation/kbuild/modules.txt).

Jadi, untuk membuat modul dapat dimuat ke dalam dua kernel yang berbeda, Anda hanya dibatasi dengan fungsi yang parameternya memiliki tata letak yang sama di kedua kernel. Khususnya, jika layout bertipe struct module berbeda, tidak ada modul tunggal yang dapat dimuat untuk kedua kernel.

Ada beberapa pendekatan untuk memberikan driver yang cocok untuk beberapa kernel. Cara termudah adalah mengirimkan sumber driver dan tambahkan ke dkms . Dengan demikian, jika menjalankan kernel tidak memiliki driver built-in, driver akan dikompilasi secara otomatis menggunakan sumbernya.


Linux
  1. Cara Menggunakan Perintah RMmod Di Linux Dengan Contoh

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

  3. Linux – Kernel Tercemar Di Linux?

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

  2. Bagaimana menemukan semua file/folder dengan izin 777 di Linux?

  3. Bagaimana cara membuat kode modul kernel Linux?

  1. Cara Menulis Modul Kernel Linux Anda Sendiri dengan Contoh Sederhana

  2. Bagaimana menemukan semua file yang diakhiri dengan .rb dengan Linux?

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