GNU/Linux >> Belajar Linux >  >> Linux

Sulit memahami penggunaan MODULE_DEVICE_TABLE(usb, id_table).

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:

  1. Setiap driver dalam kode memperlihatkan id vendor/perangkatnya menggunakan:

      MODULE_DEVICE_TABLE(of, omap_mcspi_of_match);
    
  2. Pada waktu kompilasi, proses pembangunan mengekstrak informasi ini dari semua driver dan menyiapkan tabel perangkat.

  3. 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:

  1. MODULE_DEVICE_TABLE digunakan untuk menghasilkan file peta dengan depmod program;
  2. Saat perangkat dicolokkan saat panas, pengemudi bus menghasilkan peristiwa hotplug. Kernel memanggil /sbin/hotplug dengan set variabel lingkungan yang sesuai;
  3. 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 atau modprob modulename.ko
  • Otomatis-> Ada beberapa cara.

    1. salin ke /lib/modules/`uname -r`/kernel/modulename.ko dan perbarui /etc/modules . Sistem akan memuat modul saat booting.

    2. Tulis skrip/perintah untuk memuat module.ko untuk perangkat keras tertentu add /change /remove peristiwa dalam udev aturan /etc/udev/rules.d/10-local.rules . Anda dapat melakukan keduanya memuat/membongkar menggunakan metode ini.

    3. Kodekan modul Anda dengan MODULE_DEVICE_TABLE Registrasi. Kemudian muat modulename.ko Anda sekali dan jalankan depmod 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.


Linux
  1. Memahami Persistensi Perangkat dan Oracle ASMLib

  2. Memahami stempel waktu file Mac

  3. apakah mungkin untuk membangunkan perangkat Linux pada waktu tertentu

  1. Bagaimana Cara Menemukan Modul Kernel Untuk Perangkat yang Diberikan?

  2. Linux – Bagaimana Cara Menghubungkan Kembali Perangkat Usb yang Terputus Secara Logis?

  3. Cara menentukan USB Versi 1.1 atau 2.0

  1. Mendapatkan nama perangkat yang ramah dengan python

  2. menyiapkan perangkat untuk pengembangan (???????????? tidak ada izin)

  3. perubahan parameter modul kernel (menggunakan /sys/module)