GNU/Linux >> Belajar Linux >  >> Linux

Tidak setuju tentang versi simbol symbol_name setelah insmod

Anda perlu membangun modul kernel Anda dengan kernel versi yang sama yang akan Anda jalankan. Jadi jika Anda memiliki sumber kernel 4.3 yang telah Anda unduh, Anda perlu mengkompilasi itu versi kernel dan boot dengan yang berjalan sebelum mencoba memuat kernel Anda.

Anda memiliki dua solusi:

  1. Unduh sumber kernel untuk kernel yang sedang Anda jalankan (Anda dapat menginstalnya dengan zypper install kernel-source di SLES atau perintah yang setara di distribusi lain.)
  2. Kompilasi dan instal kernel 4.3 ke dalam sistem operasi Anda. Jika Anda memerlukan bantuan dengan ini, ajukan pertanyaan terpisah (dan mungkin itu milik superuser bukan di sini). Perhatikan bahwa jika kernel dan glibc digabungkan dengan erat, dan Anda mungkin tidak dapat menjalankan kernel baru jika Anda memiliki pustaka C yang sangat lama.

make -C /lib/modules/$(uname -r)/build M=$PWD modules,"$(uname -r)" menunjukkan bahwa Anda mengkompilasi terhadap versi kernel yang Anda jalankan sekarang sehingga Anda harus dapat melakukan insmod modul di kernel saat ini jika Anda belum mengubah header.

Dari teks Anda, "Hanya untuk memeriksa, saya telah menyalin beberapa file dari direktori kernel ke direktori proyek saya. Membuat perubahan dan menyisipkan beberapa kode lagi ke dalamnya."

Jika Anda telah melakukan modifikasi pada sumber kernel maka Anda mungkin perlu mengkompilasi ulang kernel baru dan melakukan booting dengan kernel baru yang diperbarui. Maka Anda harus dapat mengkompilasi modul kernel Anda dengan header yang dimodifikasi.


Masalahnya di sini adalah bahwa modul Kernel Anda menggunakan simbol yang diekspor dari modul kernel lain yang dalam hal ini tampaknya merupakan metode atau simbol yang diekspor tumpukan linux InfiniBand RDMA.

Untuk mengatasi masalah versi simbol, salin Module.symvers file dari

/usr/src/ofa-kernel

direktori dan rekatkan ke direktori kerja Anda saat ini. Kemudian Anda membuat modul Anda lagi. Sekarang insmod harus bekerja dengan sangat baik.

CATATAN:File Module.symvers berisi informasi dari semua simbol kernelmodule yang diekspor. Jadi dengan menyalinnya ke direktori kerja Anda, Anda membantu kbuild untuk mengetahui lebih banyak tentang simbol yang diekspor.

Dan jika Anda tidak menemukan Module.symvers atau kosong, buatlah menggunakan create_Module.symvers.sh


Linux
  1. Cara memeriksa versi Kernel di Linux

  2. Linux – Kernel Tercemar Di Linux?

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

  1. Bagaimana cara menggunakan ioctl() untuk memanipulasi modul kernel saya?

  2. Bagaimana menemukan versi modul kernel yang dikompilasi?

  3. Bagaimana cara membuat kode modul kernel Linux?

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

  2. Apa itu kernel tercemar di Linux?

  3. Linux Kernel.org menyesatkan tentang kepanikan kernel