Linux / Unix Command: insmod

Perintah Linux / Unix insmod menginstal modul yang dapat dimuat di kernel yang sedang berjalan. insmod mencoba menghubungkan modul ke kernel yang berjalan dengan menyelesaikan semua simbol dari tabel simbol yang diekspor kernel.

Jika nama file modul diberikan tanpa direktori atau ekstensi, insmod akan mencari modul di beberapa direktori default umum. Variabel lingkungan MODPATH dapat digunakan untuk mengganti default ini. Jika file konfigurasi modul seperti /etc/modules.conf ada, maka akan menggantikan jalur yang ditentukan dalam MODPATH .

Variabel lingkungan MODULECONF juga dapat digunakan untuk memilih file konfigurasi yang berbeda dari default /etc/modules.conf (atau /etc/conf.modules (deprecated)). Variabel lingkungan ini akan mengesampingkan semua definisi di atas.

Ketika variabel lingkungan UNAME_MACHINE diset, modutils akan menggunakan nilainya sebagai ganti bidang mesin dari syscall uname (). Ini terutama digunakan ketika Anda menyusun modul 64-bit di ruang pengguna 32-bit atau sebaliknya, atur UNAME_MACHINE ke jenis modul. Modutils saat ini tidak mendukung mode full cross build untuk modul, terbatas untuk memilih antara versi 32-dan 64-bit dari arsitektur host.

Pilihan

-e persist_name , --persist = persist_name

Menentukan di mana setiap data persisten untuk modul dibaca dari pada pemuatan dan ditulis ke saat ini Instansiasi modul dibongkar. Pilihan ini diam-diam diabaikan jika modul tidak memiliki data persisten. Data persisten hanya dibaca oleh insmod jika opsi ini ada, oleh default insmod tidak memproses data persisten.

Sebagai bentuk singkatan , -e "" (string kosong) ditafsirkan oleh insmod sebagai nilai persistdir sebagaimana didefinisikan dalam modules.conf , diikuti oleh nama file dari modul relatif terhadap jalur pencarian modul yang ditemukan di, dikurangi tertinggal ".gz", ".o" atau ".mod". Jika modules.conf menetapkan " persistdir = " (yaitu persistdir adalah bidang kosong) maka bentuk tulisan singkat ini diam-diam diabaikan. (Lihat modules.conf (5).)

-f , --force

Coba muat modul bahkan jika versi kernel yang sedang berjalan dan versi kernel yang modulnya dikompilasi tidak cocok. Ini hanya menimpa pemeriksaan versi kernel, ini tidak berpengaruh pada pemeriksaan nama simbol. Jika nama simbol dalam modul tidak cocok dengan kernel maka tidak ada cara untuk memaksa insmod untuk memuat modul.

-h , --help

Tampilkan ringkasan opsi dan segera keluar.

-k , --autoclean

Setel bendera auto-clean pada modul. Bendera ini akan digunakan oleh kerneld (8) untuk menghapus modul yang belum digunakan dalam beberapa periode waktu - biasanya satu menit.

-L , --lock

Gunakan flock (2) untuk mencegah beban simultan dari modul yang sama.

-m , --map

Outputkan peta beban pada stdout, sehingga lebih mudah untuk men-debug modul jika terjadi kepanikan kernel.

-n , --noload

Dummy run, lakukan semuanya kecuali muat modul ke kernel. Jika diminta oleh -m atau -O , run akan menghasilkan file peta atau gumpalan. Karena modul tidak dimuat, alamat beban kernel yang sebenarnya tidak diketahui sehingga file peta dan gumpalan didasarkan pada alamat pemuatan 0x12340000.

-o module_name , --name = module_name

Secara eksplisit beri nama modul, daripada mendapatkan nama dari nama dasar dari file objek sumber.

-O blob_name , --blob = blob_name

Simpan objek biner di blob_name . Hasilnya adalah gumpalan biner (tidak ada header ELF) yang menunjukkan dengan tepat apa yang dimuat ke dalam kernel setelah manipulasi bagian dan relokasi. Opsi- m direkomendasikan untuk mendapatkan peta objek.

-p , --probe

Siapkan modul untuk melihat apakah itu bisa berhasil dimuat . Ini termasuk mencari file objek di jalur modul, memeriksa nomor versi, dan menyelesaikan simbol. Itu tidak memeriksa relokasi juga tidak menghasilkan file peta atau gumpalan.

-P prefix , --prefix = prefix

Opsi ini dapat digunakan dengan modul berversi untuk kernel SMP atau bigmem, karena modul tersebut memiliki awalan tambahan yang ditambahkan pada nama simbolnya. Jika kernel dibangun dengan versi simbol maka insmod akan secara otomatis mengekstrak awalan dari definisi "get_module_symbol" atau "inter_module_get", salah satunya harus ada di kernel yang mendukung modul. Jika kernel tidak memiliki versi simbol tetapi modul dibangun dengan versi simbol maka pengguna harus menyediakan -P .

-q , --quiet

Jangan cetak daftar simbol yang belum terselesaikan. Jangan mengeluh tentang ketidakcocokan versi. Masalahnya hanya akan tercermin dalam status keluar dari insmod .

-r , - root

Beberapa pengguna mengkompilasi modul di bawah userid non-root kemudian menginstal modul sebagai root. Proses ini dapat meninggalkan modul yang dimiliki oleh userid non-root, meskipun direktori modul dimiliki oleh root. Jika userid non-root dikompromikan, penyusup dapat menimpa modul yang ada yang dimiliki oleh userid itu dan menggunakan eksposur ini untuk bootstrap ke akses root.

Secara default, modutils akan menolak upaya untuk menggunakan modul yang tidak dimiliki oleh root. Menentukan -r akan mengubah cek dan memungkinkan root untuk memuat modul yang tidak dimiliki oleh root. Catatan: nilai default untuk pemeriksaan root dapat diubah ketika modutils dikonfigurasi.

Penggunaan -r untuk menonaktifkan pemeriksaan root atau pengaturan default ke "no root check" pada waktu konfigurasi adalah paparan keamanan utama dan tidak disarankan.

-s , - syslog

Output semuanya ke syslog (3) bukan terminal.

-S , --kallsyms

Memaksa modul yang dimuat untuk memiliki data kallsyms , bahkan jika kernel tidak mendukungnya. Opsi ini untuk sistem kecil di mana kernel dimuat tanpa data kallsyms tetapi modul yang dipilih membutuhkan kallsyms untuk debugging. Opsi ini adalah default pada Red Hat Linux.

-v , --verbose

Jadilah verbose.

-V , --versi

Tampilkan versi insmod .

-X , --ekspor ; -x , --noexport

Lakukan dan jangan ekspor semua simbol eksternal modul, masing-masing. Standarnya adalah simbol yang akan diekspor. Opsi ini hanya efektif jika modul tidak secara eksplisit mengekspor tabel simbol terkontrolnya sendiri, dan karenanya tidak lagi digunakan.

-Y , --ksymoops ; -y , --noksymoops

Lakukan dan jangan tambahkan simbol ksymoops ke ksyms. Simbol-simbol ini digunakan oleh ksymoops untuk memberikan debug yang lebih baik jika ada Oops dalam modul ini. Standarnya adalah untuk menentukan simbol ksymoops . Opsi ini tidak bergantung pada opsi -X / -x .

simbol ksymoops menambahkan sekitar 260 byte per modul yang dimuat. Kecuali Anda benar-benar kekurangan ruang kernel dan mencoba mengurangi ksyms ke ukuran minimumnya, ambil default dan dapatkan Oops debugging yang lebih akurat. simbol ksymoops diperlukan untuk menyimpan data modul persisten.

-N , --numerik saja

Hanya periksa bagian numerik dari versi modul terhadap versi kernel, yaitu abaikan EXTRAVERSION ketika memutuskan apakah modul milik kernel. Bendera ini secara otomatis diatur untuk kernel 2.5 dan seterusnya, itu opsional untuk kernel sebelumnya.

Parameter Modul

Beberapa modul menerima parameter load-time untuk menyesuaikan operasi mereka. Parameter ini sering berupa port I / O dan nomor IRQ yang bervariasi dari mesin ke mesin dan tidak dapat ditentukan dari perangkat keras.

Dalam modul yang dibangun untuk kernel seri 2.0, simbol integer atau karakter pointer apa pun dapat diperlakukan sebagai parameter dan dimodifikasi. Mulai dari kernel seri 2.1, simbol secara eksplisit ditandai sebagai parameter sehingga hanya nilai tertentu yang dapat diubah. Selanjutnya, informasi jenis disediakan untuk memeriksa nilai-nilai yang diberikan pada waktu buka.

Dalam kasus bilangan bulat, semua nilai mungkin dalam desimal, oktal atau heksadesimal a la C: 17, 021 atau 0x11. Elemen array adalah urutan yang ditentukan dipisahkan oleh koma. Elemen dapat dilewati dengan menghilangkan nilai.

Dalam modul seri 2.0, nilai-nilai yang tidak dimulai dengan angka dianggap string. Mulai dari 2.1, informasi jenis parameter menunjukkan apakah menginterpretasikan nilai sebagai string. Jika nilai dimulai dengan tanda kutip ganda ( " ), string ditafsirkan seperti dalam C, urutan escape dan semua. Perhatikan bahwa dari prompt shell, tanda kutip itu sendiri mungkin perlu dilindungi dari interpretasi shell.

GPL Modul Berlisensi dan Simbol

Dimulai dengan kernel 2.4.10, modul harus memiliki string lisensi, didefinisikan menggunakan MODULE_LICENSE () . Beberapa string diakui sebagai kompatibel GPL; string lisensi lain atau lisensi apa pun tidak berarti bahwa modul tersebut diperlakukan sebagai hak milik.

Jika kernel mendukung flag / proc / sys / kernel / tainted maka insmod akan ATAU bendera tercemar dengan '1' saat memuat modul tanpa lisensi GPL. Peringatan dikeluarkan jika kernel mendukung tainting dan modul dimuat tanpa lisensi. Peringatan selalu dikeluarkan untuk modul yang memiliki MODULE_LICENSE () yang tidak kompatibel dengan GPL, bahkan pada kernel lama yang tidak mendukung tainting. Ini meminimalkan peringatan ketika modutils baru digunakan pada kernel yang lebih tua.

mode insmod -f (force) akan ATAU bendera tercemar dengan '2' pada kernel yang mendukung tainting. Itu selalu mengeluarkan peringatan.

Beberapa pengembang kernel mengharuskan simbol yang diekspor oleh kode mereka hanya boleh digunakan oleh modul dengan lisensi yang kompatibel GPL. Simbol ini diekspor oleh EXPORT_SYMBOL_GPL, bukan EXPORT_SYMBOL normal. Hanya simbol GPL yang diekspor oleh kernel dan oleh modul lain hanya dapat dilihat oleh modul dengan lisensi yang kompatibel dengan GPL, simbol-simbol ini muncul di / proc / ksyms dengan awalan ' GPLONLY_ '. insmod mengabaikan awalan GPLONLY_ pada simbol saat memuat modul berlisensi GPL sehingga modul hanya merujuk ke nama simbol normal, tanpa awalan. Hanya simbol GPL yang tidak tersedia untuk modul tanpa lisensi GPL yang kompatibel, ini termasuk modul tanpa lisensi sama sekali.

Bantuan Ksymoops

Untuk membantu debugging kernel Oops saat menggunakan modul, default insmod untuk menambahkan beberapa simbol ke ksyms, lihat opsi -Y. Simbol-simbol ini dimulai dengan __insmod_modulename_ . Nama modul diperlukan untuk membuat simbol-simbol itu unik. Adalah legal untuk memuat objek yang sama lebih dari satu kali di bawah nama modul yang berbeda. Saat ini, simbol yang didefinisikan adalah:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile adalah nama file yang memuat objek. Ini memastikan bahwa ksymoops dapat mencocokkan kode ke objek yang benar. mtime adalah cap waktu termodifikasi terakhir pada file tersebut dalam hex, nol jika stat gagal. versi adalah versi kernel yang dikompilasi modul, -1 jika tidak ada versi yang tersedia. Simbol _O memiliki alamat awal yang sama dengan judul modul.

__insmod_modulename_Ssectionname_Llength

Simbol ini muncul di awal bagian ELF yang dipilih, saat ini .text, .rodata, .data, .bss, dan .sbss. Hanya muncul jika bagian memiliki ukuran bukan nol. sectionname adalah nama bagian ELF, panjangnya adalah panjang bagian dalam desimal. Simbol ini membantu ksymoops memetakan alamat ke bagian ketika tidak ada simbol yang tersedia.

__insmod_modulename_Ppersistent_filename

Hanya dibuat oleh insmod jika modul memiliki satu atau lebih parameter yang ditandai sebagai data persisten dan nama file untuk menyimpan data persisten (lihat -e , di atas) tersedia.

Masalah lain dengan debugging kernel Oops dalam modul adalah bahwa isi dari / proc / ksyms dan / proc / modules dapat berubah antara Oops dan ketika Anda memproses file log. Untuk membantu mengatasi masalah ini, jika direktori / var / log / ksymoops ada maka insmod dan rmmod akan secara otomatis menyalin / proc / ksyms dan / proc / modules ke / var / log / ksymoops dengan awalan `tanggal +% Y% m % d% H% M% S`. Administrator sistem dapat memberi tahu ksymoops file snapshot yang akan digunakan ketika melakukan debug pada suatu Ups. Tidak ada tombol untuk menonaktifkan salinan otomatis ini. Jika Anda tidak ingin itu terjadi, jangan membuat / var / log / ksymoops . Jika direktori itu ada, itu harus dimiliki oleh root dan mode 644 atau 600 dan Anda harus menjalankan skrip ini setiap hari atau lebih. Skrip di bawah ini dipasang sebagai insmod_ksymoops_clean .

Informasi Dasar untuk Diketahui

NAMA

insmod - instal modul kernel yang dapat dimuat

RINGKASAN

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o module_name ] [-O blob_name ] [-P prefix ] module [ simbol = nilai ...]