Sejauh yang saya tahu, kernel mendeteksi perangkat keras, menambahkan informasi ke sysfs membuat perangkat di /dev dan kemudian menghasilkan acara udev. Pertanyaan saya adalah, apakah driver perangkat melakukan semua ini atau kernel itu sendiri? Jika driver melakukannya, maka mereka akan mengetahui nomor mayor dan minor perangkat untuk membuat file di devtmps.
Saya juga mengerti (mungkin salah) bahwa udev yang memanggil modprobe untuk memuat driver yang menangani perangkat.
Saya diberitahu bahwa mereka melakukannya dengan konten variabel lingkungan uevent MODALIAS, sehingga memuat semua modul yang aliasnya cocok dengan string ini (driver yang benar). Singkatnya:apa saja langkah-langkah pendeteksian perangkat keras di linux dan WHO melakukan setiap langkah:kernel itu sendiri, driver di dalam kernel atau udev di ruang pengguna. Terima kasih.
Jawaban yang Diterima:
Kernel mengetahui nomor perangkat karena menentukan nomor perangkat. Setiap driver mendaftarkan nomor perangkat yang dikelolanya. Angka-angka tersebut dikodekan dalam kode sumber, atau, dalam beberapa kasus, dialokasikan secara dinamis. Sistem file sysfs memungkinkan aplikasi seperti udev menemukan perangkat yang didukung oleh kernel. Lihat Bagaimana cara udev mendapatkan nomor perangkat untuk perangkat yang dibuatnya? untuk lebih jelasnya.
Kode inisialisasi driver memeriksa perangkat keras, dan mendaftarkan perangkat berdasarkan perangkat keras yang ditemukan selama pemeriksaan. Beberapa jenis perangkat keras tidak mendukung probing; misalnya, bus ISA (bus yang sebagian besar sudah ketinggalan zaman pada komputer tipe PC) tidak menyediakan cara untuk mendaftar perangkat keras yang terhubung, sehingga pengemudi hanya dapat mencoba berkomunikasi dan berdoa agar tidak ada perangkat lain yang terpasang di alamat yang sama. Pada beberapa platform, bootloader menyertakan pohon perangkat yang menjelaskan periferal yang tersedia dan di mana mereka dipetakan, dan kernel Linux mengaktifkan driver berdasarkan informasi ini. Ada tiga cara untuk memuat driver untuk periferal.
- Driver mungkin disertakan sebagai bagian dari citra kernel.
- Driver dapat dikompilasi sebagai modul, dan dimuat secara eksplisit (misalnya dengan memasukkannya ke dalam
/etc/modules
atau dalam initramfs). - Ada mekanisme untuk memuat driver tertentu secara otomatis berdasarkan informasi yang dilaporkan oleh jenis bus yang dapat mencantumkan periferal yang terhubung bersama dengan nomor identifikasi universal, seperti PCI (bus utama di PC modern) dan USB. Kernel menjalankan
modprobe
dan memberikannya nama simbolis yang mengkodekan identifikasi periferal, yang merupakan alias untuk nama "asli" dari modul driver. Lihat Apakah modul driver dimuat dan dibongkar secara otomatis?