Saya baru-baru ini melalui Unpacking kernel-source rpm off-system (OpenSuse)? ; dan ketika butuh> 10 jam pada mesin saya, bayangkan keterkejutan saya setelah melakukan proses yang dijelaskan di sana, saya tidak menemukan Module.symvers
tempat!
Ketika saya mencari "menghasilkan Module.symvers", saya mendapatkan ini:
CATATAN: "modules_prepare" tidak akan membangun Module.symvers bahkan jika
CONFIG_MODVERSIONS diatur; oleh karena itu, build kernel penuh perlu
dijalankan untuk membuat versi modul berfungsi.
( Dokumentasi Kernel Linux :: kbuild: modules.txt )
... tapi saya tidak benar-benar mendapatkannya - bukankah kernel dibangun pada langkah sebelumnya (dijelaskan dalam tautan yang diberikan di atas? Saya yakin tahu butuh> 10 jam untuk CC untuk menghasilkan sejumlah besar * .o file, dan LD untuk menautkannya, jadi pasti ada sesuatu yang dibangun. Tetapi jika demikian, lalu di mana Module.symvers
?
Dalam istilah yang lebih eksplisit, perintah apa yang harus saya panggil untuk menghasilkan Module.symvers? Saya tahu itu make prepare
tidak akan berhasil - tapi apa perintahnya?
sumber
Module.symvers
olehzypper install kernel-source
, dan yang sejenis di linux distro lain. File ini terletak dilib/modules/xxx/build
.Jawaban:
Ini
Module.symvers
(kembali) dihasilkan ketika Anda (kembali) menyusun modul. Jalankanmake modules
, dan Anda harus mendapatkanModule.symvers
file di root pohon kernel.Perhatikan bahwa jika Anda hanya berlari
make
dan tidakmake modules
, Anda belum membangun modul apa pun. Simbol dari kernel itu sendiri (vmlinux
atau salah satu format gambar yang bergantung pada arsitektur) ada diSystem.map
.sumber
make modules
memang membuatModule.symvers
. Terima kasih juga telah menjelaskan perbedaan antaramake
danmake modules
, dan hubungan denganSystem.map
. Bersulang!insmod
.untuk orang-orang yang menemukan pertanyaan ini dengan googling peringatan yang Anda dapatkan ketika menyusun salah satu LKM sampel Derek Molloy: Anda dapat membuatnya dengan kosong
touch Modules.symvers
. jika kernel Anda tidak menggunakan modifikasi (CRC yang digunakan oleh sistem operasi untuk membantu memastikan modul cocok dengan kernel) dan modul Anda tidak memiliki dependensi pada modul lain, ini akan cukup baik untuk menekan peringatan.file kosong sama baiknya dengan yang dihasilkan oleh gcc, yang hanya memiliki simbol-simbol yang sama
0x00000000
CRC yang , pada sistem tanpa modifikasi.sumber
Pada CentOS, dan mungkin varian RedHat lainnya, cukup ekstrak file yang sesuai untuk kernel Anda yang sedang berjalan:
Di Ubuntu dan mungkin varian Debian lainnya, berkasnya dapat ditemukan secara otomatis. Namun, jika Anda membutuhkannya, file ada di sini:
sumber
linux-headers-$(uname -r)
folder