Perintah Linux / Unix: insmod

Perintah Linux / Unix tidak memasukkan modul yang boleh dimuatkan dalam kernel yang sedang berjalan. Insmod cuba menghubungkan modul ke dalam kernel yang dijalankan dengan menyelesaikan semua simbol dari jadual simbol yang dieksport oleh kernel.

Jika nama fail modul diberikan tanpa direktori atau sambungan, insmod akan mencari modul dalam beberapa direktori lalai biasa. Pembolehubah persekitaran MODPATH boleh digunakan untuk mengatasi lalai ini. Jika fail konfigurasi modul seperti /etc/modules.conf wujud, ia akan menimpa laluan yang ditakrifkan dalam MODPATH .

Pembolehubah persekitaran MODULECONF juga boleh digunakan untuk memilih fail konfigurasi yang berbeza dari default /etc/modules.conf (atau /etc/conf.modules (usang)). Pembolehubah persekitaran ini akan mengatasi semua definisi di atas.

Apabila pembolehubah persekitaran UNAME_MACHINE ditetapkan, modutils akan menggunakan nilainya berbanding medan mesin dari systall uname (). Ini terutamanya digunakan apabila anda menyusun modul 64-bit dalam ruang pengguna 32-bit atau sebaliknya, tetapkan UNAME_MACHINE kepada jenis modul. Modutil semasa tidak menyokong mod pembina silang penuh untuk modul, ia adalah terhad untuk memilih antara 32- dan 64-bit versi seni bina tuan rumah.

Pilihan

-e persist_name , --persist = persist_name

Menentukan mana-mana data berterusan untuk modul dibaca dari pada beban dan ditulis kepada apabila instansiasi modul ini diturunkan. Pilihan ini diabaikan secara diam-diam jika modul tidak mempunyai data berterusan. Data berterusan hanya dibaca oleh insmod jika opsyen ini hadir, oleh insmod lalai tidak memproses data berterusan.

Sebagai bentuk ringkas , "" (rentetan kosong) ditafsirkan oleh insmod sebagai nilai persistdir seperti yang ditakrifkan dalam modules.conf , diikuti dengan nama fail modul berbanding laluan carian modul yang ditemui dalam, tolak mana-mana trailing ".gz", ".o" atau ".mod". Sekiranya modules.conf menyatakan " persistdir = " (iaitu persistdir adalah medan kosong) maka bentuk singkat ini diam-diam diabaikan. (Lihat modules.conf (5).)

-f , --force

Siasat memuat modul walaupun versi kernel yang sedang berjalan dan versi kernel yang modulnya dikompilkan tidak sepadan. Ini hanya mengesahkan semakan versi kernel, ia tidak mempunyai kesan pada semakan nama simbol. Jika nama simbol dalam modul tidak sepadan dengan kernel maka tidak ada cara untuk memaksa orang untuk memodenkan modul.

-h , - membantu

Paparkan ringkasan pilihan dan segera keluar.

-k , --autoclean

Tetapkan bendera automatik bersih pada modul. Bendera ini akan digunakan oleh kerneld (8) untuk menghapuskan modul yang tidak digunakan dalam beberapa tempoh masa - biasanya satu minit.

-L , - kunci

Gunakan kawanan (2) untuk menghalang beban serentak modul yang sama.

-m , --map

Output peta beban pada stdout, menjadikannya lebih mudah untuk debug modul sekiranya terjadi panik kernel.

-n , --noload

Jalankan dummy, lakukan segala-galanya kecuali memuat modul ke dalam kernel. Jika diminta oleh -m atau -O , run akan menghasilkan fail peta atau gumpalan. Oleh kerana modul tidak dimuatkan, alamat beban kernel sebenar tidak diketahui jadi fail peta dan gumpalan didasarkan pada alamat beban sewenang-wenang 0x12340000.

-o module_name , --name = module_name

Secara jelas namanya modul, bukannya mendapatkan nama dari nama asas fail objek objek.

-O blob_name , --blob = blob_name

Simpan objek binari dalam blob_name . Hasilnya adalah gumpalan binari (tiada tajuk ELF) yang menunjukkan apa yang dimuatkan ke dalam kernel selepas manipulasi seksyen dan penempatan semula. Pilihan -m disyorkan untuk mendapatkan peta objek tersebut.

-p , --probe

Siasat modul untuk melihat apakah ia dapat dimuatkan dengan jayanya . Ini termasuk mencari fail objek dalam laluan modul, menyemak nombor versi, dan menyelesaikan simbol. Ia tidak memeriksa penempatan semula dan tidak menghasilkan fail peta atau gumpalan.

-P awalan , --prefix = awalan

Pilihan ini boleh digunakan dengan modul versi untuk SMP atau kernel besar, kerana modul tersebut mempunyai awalan tambahan ditambah dalam nama simbol mereka. Jika kernel dibina dengan versi simbol maka insmod akan secara automatik mengeluarkan awalan dari definisi "get_module_symbol" atau "inter_module_get", salah satunya mesti wujud dalam mana-mana kernel yang menyokong modul. Jika kernel tidak mempunyai versi simbol tetapi modul dibina dengan versi simbol maka pengguna mesti membekalkan -P .

-q , --quiet

Jangan cetak senarai sebarang simbol yang tidak dapat diselesaikan. Jangan mengadu tentang ketidakpadanan versi. Masalahnya hanya akan tercermin dalam status exit of insmod .

-r , - akar

Sesetengah pengguna menyusun modul di bawah userid bukan root kemudian memasang modul sebagai root. Proses ini boleh meninggalkan modul yang dimiliki oleh pengguna bukan root, walaupun direktori modul dimiliki oleh root. Jika pengguna tidak root dikompromi, penyusup boleh menimpa modul sedia ada yang dimiliki oleh pengguna tersebut dan menggunakan pendedahan ini untuk bootstrap sehingga akses root.

Secara lalai, modutils akan menolak cubaan menggunakan modul yang tidak dimiliki oleh root. Menentukan -r akan menukar cek dan membenarkan root memuat modul yang tidak dimiliki oleh root. Nota: nilai lalai untuk pemeriksaan root boleh ditukar apabila modutils dikonfigurasi.

Penggunaan -r untuk mematikan pemeriksaan root atau menetapkan lalai kepada "tiada pemeriksaan root" pada masa konfigurasi adalah pendedahan keselamatan utama dan tidak disyorkan.

-s , - syslog

Output semuanya kepada syslog (3) dan bukannya terminal.

-S , - malas

Paksakan modul yang dimuatkan untuk mempunyai data kallsyms , walaupun kernel tidak menyokongnya. Pilihan ini adalah untuk sistem kecil di mana kernel dimuatkan tanpa data kallsyms tetapi modul yang dipilih memerlukan kallsyms untuk debugging. Pilihan ini adalah lalai di Red Hat Linux.

-v , --verbose

Berhati-hati.

-V , --versi

Paparkan versi insmod .

-X , - eksport ; -x , --noexport

Lakukan dan jangan mengeksport semua simbol luaran modul, masing-masing. Lalai adalah untuk simbol yang akan dieksport. Pilihan ini hanya berkesan sekiranya modul tidak mengeksploitasi jadual simbol terkawalnya secara eksplisit, dan oleh itu tidak digunakan.

-Y , - nota ; -y , --noksymoops

Lakukan dan jangan tambahkan simbol ksymoops untuk nyenyak. Simbol-simbol ini digunakan oleh ksymoops untuk menyediakan debugging yang lebih baik jika terdapat Oops dalam modul ini. Lalai adalah untuk simbol ksymoops ditakrifkan. Pilihan ini adalah bebas daripada pilihan -X / -x .

simbol ksymoops menambah kira-kira 260 bait setiap modul yang dimuatkan. Kecuali jika anda benar-benar kekurangan ruang kernel dan cuba mengurangkan ksyms ke saiz minimum, ambil lalai dan dapatkan lebih tepat Oops debugging. simbol ksymoops diperlukan untuk menyimpan data modul yang berterusan.

-N , - hanya angka sahaja

Hanya periksa bahagian angka versi modul terhadap versi kernel, iaitu mengabaikan EXTRAVERSION apabila memutuskan jika modul milik kernel. Bendera ini ditetapkan secara automatik untuk kernel 2.5 dan seterusnya, ia adalah pilihan untuk biji awal.

Parameter Modul

Sesetengah modul menerima parameter beban masa untuk menyesuaikan operasi mereka. Parameter ini sering kali pelabuhan I / O dan nombor IRQ yang berbeza dari mesin ke mesin dan tidak dapat ditentukan dari perkakasan.

Dalam modul yang dibina untuk kernel siri 2.0, sebarang simbol penunjuk integer atau simbol boleh dianggap sebagai parameter dan diubah suai. Bermula dalam kernel siri 2.1, simbol ditandakan secara jelas sebagai parameter supaya hanya nilai tertentu boleh diubah. Selain itu, taip maklumat disediakan untuk menyemak nilai-nilai yang disediakan pada masa beban.

Dalam kes bilangan bulat, semua nilai mungkin dalam perpuluhan, oktaf atau heksadesimal a la C: 17, 021 atau 0x11. Unsur Array adalah urutan yang dipisahkan mengikut koma. Elemen boleh dilangkau dengan menghilangkan nilai.

Dalam modul siri 2.0, nilai yang tidak bermula dengan nombor dianggap sebagai rentetan. Bermula dalam 2.1, maklumat jenis parameter menunjukkan sama ada untuk menafsirkan nilai sebagai rentetan. Jika nilai bermula dengan petikan berganda ( " ), rentetan ditakrifkan seperti dalam C, melarikan jujukan dan semua. Sila ambil perhatian bahawa dari petikan shell, petikan sendiri mungkin perlu dilindungi daripada tafsiran shell.

Modul dan Simbol Berlesen GPL

Bermula dengan kernel 2.4.10, modul harus mempunyai rentetan lesen, ditakrifkan menggunakan MODULE_LICENSE () . Beberapa rentetan diiktiraf sebagai GPL yang serasi; apa-apa tali lesen lain atau tiada lesen sama sekali bermakna modul itu diperlakukan sebagai proprietari.

Jika kernel menyokong bendera / proc / sys / kernel / tercemar maka insmod akan ATAU bendera tercemar dengan '1' ketika memuat modul tanpa lesen GPL. Amaran dikeluarkan jika kernel menyokong tainting dan modul dimuat tanpa lesen. Amaran sentiasa dikeluarkan untuk modul yang mempunyai MODULE_LICENSE () yang tidak kompatibel dengan GPL, walaupun pada kernel lama yang tidak menyokong tainting. Ini mengurangkan amaran apabila modutils baru digunakan pada kernel lama.

mod insmod -f (force) akan ATAU bendera tercemar dengan '2' pada kernel yang menyokong dicemari. Ia sentiasa mengeluarkan amaran.

Sesetengah pemaju kernel memerlukan simbol yang dieksport oleh kod mereka hanya boleh digunakan oleh modul dengan lesen yang sesuai GPL. Simbol-simbol ini dieksport oleh EXPORT_SYMBOL_GPL daripada biasa EXPORT_SYMBOL . Simbol-simbol hanya GPL yang dieksport oleh kernel dan oleh modul lain hanya boleh dilihat dengan modul dengan lesen yang bersesuaian GPL, simbol-simbol ini muncul dalam / proc / ksma dengan awalan ' GPLONLY_ '. insmod mengabaikan awalan GPLONLY_ pada simbol semasa memuatkan modul berlesen GPL jadi modul itu hanya merujuk kepada nama simbol biasa, tanpa awalan. Simbol hanya GPL tidak disediakan untuk modul tanpa lesen serasi GPL, ini termasuk modul tanpa lesen sama sekali.

Bantuan Ksymoops

Untuk membantu debugging kernel Oops apabila menggunakan modul, insmod lalai untuk menambah beberapa simbol untuk nyenyak, lihat pilihan -Y . Simbol-simbol ini bermula dengan __insmod_modulename_ . Nama modul diperlukan untuk menjadikan simbol unik. Ia adalah sah untuk memuat objek yang sama lebih daripada sekali di bawah nama modul yang berbeza. Pada masa ini, simbol yang ditakrifkan ialah:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile adalah nama fail yang dimuatkan oleh objek tersebut. Ini memastikan bahawa ksymoops boleh memadankan kod ke objek yang betul. mtime adalah timestamp terakhir diubah suai pada fail itu dalam hex, sifar jika stat gagal. versi ialah versi kernel yang modul disusun untuk, -1 jika tiada versi tersedia. Simbol _O mempunyai alamat permulaan yang sama sebagai header modul.

__insmod_modulename_Ssectionname_Llength

Simbol ini muncul pada permulaan bahagian ELF yang dipilih, pada masa ini .text, .rodata, .data, .bs dan .sbss. Ia hanya muncul jika seksyen mempunyai saiz bukan sifar. Nama seksyen adalah nama bahagian ELF, panjang ialah panjang bahagian dalam perpuluhan. Simbol-simbol ini membantu alamat peta ksymoops ke seksyen apabila tiada simbol tersedia.

__insmod_modulename_Ppersistent_filename

Hanya dibuat oleh insmod jika modul mempunyai satu atau lebih parameter yang ditandakan sebagai data berterusan dan nama fail untuk menyimpan data yang berterusan (lihat -e , di atas) boleh didapati.

Masalah lain dengan kernel debugging Oops dalam modul ialah kandungan / proc / ksyms dan / proc / modul boleh berubah antara Oops dan ketika Anda memproses file log. Untuk membantu mengatasi masalah ini, jika direktori / var / log / ksymoops wujud maka insmod dan rmmod akan secara automatik menyalin / proc / ksyms dan / proc / modul kepada / var / log / ksymoops dengan awalan `date +% Y% m % d% H% M% S`. Pentadbir sistem boleh memberitahu ksymoops yang fail snapshot digunakan semasa debug Oops. Tiada suis untuk melumpuhkan salinan automatik ini. Jika anda tidak mahu ia berlaku, jangan buat / var / log / ksymoops . Jika direktori itu ada, ia harus dimiliki oleh root dan menjadi 644 atau 600 mod dan anda harus menjalankan skrip ini setiap hari atau lebih. Skrip di bawah ini dipasang sebagai insmod_ksymoops_clean .

Maklumat Asas Tahu

NAME

insmod - pasangkan modul kernel boleh dimuatkan

SINOPSIS

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o modul_name ] [-O blob_name ] [-P awalan ] modul [ simbol = nilai ...]