Biasanya digunakan untuk mendukung hot-plugging, dengan memuat/memasukkan driver untuk perangkat jika belum dimuat.
Ada pertanyaan serupa di sini:Mendeteksi keberadaan perangkat saat dicolokkan panas di Linux
(Dari ans saya)
Cara kerjanya sebagai berikut:
-
Setiap driver dalam kode memperlihatkan id vendor/perangkatnya menggunakan:
MODULE_DEVICE_TABLE(of, omap_mcspi_of_match); -
Pada waktu kompilasi, proses pembangunan mengekstrak informasi ini dari semua driver dan menyiapkan tabel perangkat.
-
Saat Anda memasukkan perangkat, tabel perangkat dirujuk oleh kernel dan jika ditemukan entri yang cocok dengan id perangkat/vendor dari perangkat yang ditambahkan, maka modulnya dimuat dan diinisialisasi.
Menurut Driver Perangkat Linux:
MODULE_DEVICE_TABLEdigunakan untuk menghasilkan file peta dengandepmodprogram;- Saat perangkat dicolokkan saat panas, pengemudi bus menghasilkan peristiwa hotplug. Kernel memanggil
/sbin/hotplugdengan set variabel lingkungan yang sesuai; - Mengingat file peta dan informasi dari lingkungan,
/sbin/hotplugmemutuskan modul mana yang akan dimuat dan benar-benar memuatnya. Jika modul sudah dimuat, tidak apa-apa.
Saya harus menyebutkan lagi bahwa mekanisme ini hanya memastikan bahwa modul yang diperlukan sudah terpasang saat perangkat dicolokkan. Itu tidak menghubungkan modul dengan perangkat itu atau apa pun. Cukup muat modul.
Untuk memeriksa apakah driver OK untuk perangkat tertentu, match() fungsi dari bus_type digunakan.
Inilah cara saya memahami hal-hal [kompatibel dengan Xbuntu 14.04].
Setelah kami menulis modul, kami dapat memuatnya secara manual, atau otomatis.
- Secara manual ->
insmodmodulename.ko ataumodprobmodulename.ko -
Otomatis-> Ada beberapa cara.
-
salin ke /lib/modules/`uname -r`/kernel/modulename.ko dan perbarui
/etc/modules. Sistem akan memuat modul saat booting. -
Tulis skrip/perintah untuk memuat module.ko untuk perangkat keras tertentu
add/change/removeperistiwa dalamudevaturan/etc/udev/rules.d/10-local.rules. Anda dapat melakukan keduanya memuat/membongkar menggunakan metode ini. - Kodekan modul Anda dengan
MODULE_DEVICE_TABLERegistrasi. Kemudian muat modulename.ko Anda sekali dan jalankandepmodperintah [sudo depmod -a] untuk menambahkan modul baru ke/lib/modules/3.16.0-34-generic/modules.alias/lib/modules/3.16.0-34-generic/modules.depfile. Seperti yang saya tahu, sistem hanya akan memuat jika modul tidak dimuat.
-
Anda dapat memantau pemuatan/pembongkaran modul menggunakan acara udev menggunakan :
monitor udevadm
perintah.