Apakah driver perangkat di Linux adalah program / proses atau hanya pustaka?


23

Apakah driver perangkat program yang berjalan sendiri, atau hanya pustaka (sekelompok fungsi) yang dimuat dalam memori dan program dapat memanggil salah satu fungsinya (sehingga tidak berjalan sendiri).

Dan jika itu adalah sebuah program, apakah itu memiliki ID proses, jadi bisakah saya misalnya menghentikan driver perangkat dengan cara yang sama saya dapat menghentikan proses lainnya?


1
Anda dapat "membongkar" driver dengan rmmod, tetapi hanya jika itu tidak digunakan.
pjc50

Jawaban:


35

Di Linux, banyak driver perangkat adalah bagian dari kernel, bukan pustaka atau proses. Program berinteraksi dengan ini menggunakan file perangkat (biasanya dalam /dev) dan berbagai sistem panggilan seperti open, read, write, ioctl...

Namun ada pengecualian. Beberapa driver perangkat menggunakan campuran rintisan driver kernel dan perpustakaan ruang-pengguna ( mis. Menggunakan UIO). Lainnya diimplementasikan sepenuhnya di ruang pengguna, biasanya di atas beberapa antarmuka bit-banging (UART atau GPIO). Dalam kedua kasus, mereka umumnya dalam proses, sehingga Anda tidak akan melihat proses terpisah, hanya proses yang menggunakan perangkat.

Untuk "mengakhiri" driver perangkat, Anda harus menghentikan semua proses menggunakannya, kemudian menghapus modul kernelnya (dengan asumsi itu dibangun sebagai modul), dan secara opsional modul lain yang digunakan dan yang tidak lagi diperlukan. Anda dapat membuat daftar modul pada sistem Anda menggunakan lsmod, dan membongkar menggunakan rmmodatau modprobe -r, keduanya hanya akan bekerja jika lsmodmenunjukkan mereka tidak memiliki pengguna.


2
Jika Anda cukup berani, dan kernel Anda telah dikompilasi CONFIG_MODULE_FORCE_UNLOAD, Anda dapat mencoba rmmod -funtuk memaksa membongkar modul yang sedang digunakan / tidak dirancang untuk dihapus / dll. Ini akan, selain hanya menghasilkan kernel dalam keadaan tidak dapat diandalkan, juga mencemari kernel.
Ruslan

9

Anda harus terlebih dahulu menentukan apa itu driver. Saya akan mendefinisikannya sebagai program atau subrutin yang mengontrol perangkat (seperti kamera Anda) atau subsistem (seperti sistem file). Apakah itu melakukannya secara langsung melalui program sistem atau melalui server kernel atau proses pengguna-tanah seharusnya tidak menjadi masalah utama untuk pertanyaan yang pada dasarnya bersifat semantik ini.

Dalam beberapa kasus Linux hanya menyediakan protokol umum yang ditulis dalam perangkat lunak di mana "driver" yang sebenarnya adalah pohon perangkat. Itu adalah konfigurasi parameter perangkat keras dan perangkat lunak mana yang digunakan yang membentuk driver.

Secara umum antarmuka dan protokol driver diimplementasikan menggunakan modul kernel yang dimuat sesuai kebutuhan yang ditentukan oleh pohon perangkat atau aturan udev. Modul kernel bukanlah proses atau pustaka yang paling ketat.

Pustaka hanyalah seperangkat kode statis yang dapat dimuat ke dalam proses apa pun yang diberikan. Sistem operasi modern memuat pustaka ini ke dalam memori bersama. Suatu proses dapat dengan sendirinya menautkan ke sejumlah perpustakaan bersama.

Suatu proses adalah program yang sedang berjalan di mana program sistem atau kernel telah mengalokasikan sumber daya seperti memori sistem dan waktu cpu. Modul kernel mungkin atau mungkin tidak mengikuti pola ini sendiri tetapi terlepas dari itu tidak dianggap sebagai proses defacto di Linux.

Jadi untuk menjawab pertanyaan Anda seorang pengemudi tidak perlu proses tetapi bisa. Sementara kode dapat ada di perpustakaan, driver masih dimuat ke dalam memery melalui program apakah itu kernel dalam bentuk modul kernel atau proses userland.

Ini menjadi lebih dari argumen semantik ketika mempertimbangkan apa totalitas pengemudi sebenarnya. Anda bisa mengatakan driver selalu sebuah program tetapi kadang-kadang tidak seperti dalam kasus pohon perangkat juga sebenarnya bisa menjadi proses userland, file pohon perangkat, aturan udev dan modul kernel di mana proses dan modul keduanya menggunakan perpustakaan semua untuk membuat logika pengemudi.


0

Driver perangkat Linux, pada dasarnya adalah a pustaka ruang-kernel . Panggilannya sebagian besar diinisiasi oleh driver tingkat yang lebih tinggi atau oleh proses ruang pengguna yang menggunakannya.

Hanya ada beberapa pengecualian dari ini:

  • Utas kernel dapat dimulai / dihentikan juga oleh driver, ini pada dasarnya adalah proses tanpa bagian ruang pengguna.
  • Penangan interupsi diprakarsai oleh perangkat keras, dan bukan oleh proses ruang pengguna.

Dalam sistem lain, seperti pada GNU Hurd, driver pada dasarnya adalah daemon dengan mereka proses dapat berinteraksi. Di Linux, drivernya adalah perpustakaan. Kedua konsep tersebut memiliki kelebihan dan kekurangan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.