GNU/Linux >> Belajar Linux >  >> Linux

Linux – Bagaimana Kernel Linux Mengetahui Nomor Mayor dan Minor Perangkat?

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?
Terkait:Linux – Bagaimana cara membuat tambalan yang mengabaikan perbedaan lekukan dalam kode?
Linux
  1. Cara memeriksa Versi OS dan Linux

  2. Apakah Nomor Mayor, Nomor Minor Unik?

  3. Linux – Bagaimana Cara Menemukan Driver (modul) yang Berhubungan Dengan Perangkat Di Linux?

  1. Linux – Bagaimana Kernel Linux Menjadwalkan Cpu, Antara Proses/Utas Ruang Pengguna dan Tugas/Pekerjaan Kernel?

  2. Bagaimana cara kerja copy_from_user dari kernel Linux secara internal?

  3. Bagaimana cara men-debug kernel Linux dengan GDB dan QEMU?

  1. Cara menginstal driver perangkat di Linux

  2. Bagaimana dukungan perangkat keras baru ditambahkan ke kernel linux?

  3. Bagaimana cara Linux mempertahankan kendali CPU pada mesin single-core?