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_TABLE
digunakan untuk menghasilkan file peta dengandepmod
program;- Saat perangkat dicolokkan saat panas, pengemudi bus menghasilkan peristiwa hotplug. Kernel memanggil
/sbin/hotplug
dengan set variabel lingkungan yang sesuai; - Mengingat file peta dan informasi dari lingkungan,
/sbin/hotplug
memutuskan 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 ->
insmod
modulename.ko ataumodprob
modulename.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
/remove
peristiwa dalamudev
aturan/etc/udev/rules.d/10-local.rules
. Anda dapat melakukan keduanya memuat/membongkar menggunakan metode ini. - Kodekan modul Anda dengan
MODULE_DEVICE_TABLE
Registrasi. Kemudian muat modulename.ko Anda sekali dan jalankandepmod
perintah [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.dep
file. 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.