Trình điều khiển thiết bị trong Linux có phải là chương trình / quy trình hay nó chỉ là một thư viện?


23

Trình điều khiển thiết bị là chương trình tự chạy hay chỉ là thư viện (một nhóm chức năng) được tải trong bộ nhớ và các chương trình có thể gọi một trong các chức năng của nó (vì vậy nó không tự chạy).

Và nếu đó là một chương trình, nó có ID tiến trình không, ví dụ tôi có thể chấm dứt trình điều khiển thiết bị giống như cách tôi có thể chấm dứt bất kỳ quy trình nào khác không?


1
Bạn có thể "dỡ" trình điều khiển bằng rmmod, nhưng chỉ khi nó không được sử dụng.
pjc50

Câu trả lời:


35

Trên Linux, nhiều trình điều khiển thiết bị là một phần của kernel, không phải thư viện hoặc quy trình. Chương trình tương tác với những tập tin sử dụng điện thoại (thường là trong /dev) và hệ thống khác nhau gọi như open, read, write, ioctl...

Tuy nhiên, vẫn có ngoại lệ. Một số trình điều khiển thiết bị sử dụng hỗn hợp các trình điều khiển kernel và thư viện không gian người dùng ( ví dụ: sử dụng UIO). Những người khác được triển khai hoàn toàn trong không gian người dùng, thường là trên đầu của một số giao diện đập (UART hoặc GPIO). Trong cả hai trường hợp, chúng thường đang trong quá trình xử lý, vì vậy bạn sẽ không thấy một quy trình riêng biệt, chỉ là quá trình sử dụng thiết bị.

Để chấm dứt một trình điều khiển thiết bị, bạn phải dừng tất cả các quy trình sử dụng nó, sau đó loại bỏ các mô-đun hạt nhân của nó (giả sử nó được xây dựng dưới dạng các mô-đun) và tùy chọn bất kỳ mô-đun nào khác mà nó sử dụng và không còn cần thiết nữa. Bạn có thể liệt kê các mô-đun trên hệ thống của mình bằng cách sử dụng lsmodvà hủy tải chúng bằng cách sử dụng rmmodhoặc modprobe -rcả hai mô-đun sẽ chỉ hoạt động nếu lsmodcho biết chúng không có người dùng.


2
Nếu bạn đủ can đảm và nhân của bạn đã được biên dịch CONFIG_MODULE_FORCE_UNLOAD, bạn có thể cố gắng rmmod -fhủy bỏ các mô-đun đang sử dụng / không được thiết kế để loại bỏ / vv .. Điều này, ngoài việc đơn giản dẫn đến một hạt nhân ở trạng thái không đáng tin cậy, cũng làm hỏng hạt nhân.
Ruslan

9

Trước tiên bạn phải xác định trình điều khiển là gì. Tôi sẽ định nghĩa nó là chương trình hoặc chương trình con điều khiển một thiết bị (như máy ảnh của bạn) hoặc hệ thống con (như hệ thống tệp). Cho dù nó thực hiện trực tiếp thông qua chương trình hệ thống hoặc thông qua các máy chủ kernel hoặc quy trình sử dụng đất không phải là vấn đề chính đối với câu hỏi cơ bản về ngữ nghĩa này.

Trong một số trường hợp, Linux chỉ cung cấp một giao thức chung được viết bằng phần mềm trong đó "trình điều khiển" thực tế là một cây thiết bị. Đó là cấu hình của các tham số phần cứng và phần mềm nào sẽ sử dụng để tạo nên trình điều khiển.

Nói chung, các giao diện và giao thức trình điều khiển được triển khai bằng các mô-đun hạt nhân được tải khi cần được xác định bởi các cây thiết bị hoặc quy tắc udev. Một mô-đun hạt nhân không theo nghĩa chặt chẽ nhất là một quá trình hoặc thư viện.

Một thư viện chỉ là một bộ mã tĩnh có thể được tải vào bất kỳ quy trình nào. Các hệ điều hành hiện đại tải các thư viện này vào bộ nhớ dùng chung. Một quá trình có thể tự liên kết đến bất kỳ số lượng thư viện chia sẻ.

Một tiến trình là một chương trình đang chạy trong đó chương trình hệ thống hoặc kernel đã phân bổ các tài nguyên như bộ nhớ hệ thống và thời gian cpu. Các mô-đun hạt nhân có thể hoặc không thể tự theo mô hình này nhưng bất kể không được coi là một quy trình defacto trong Linux.

Vì vậy, để trả lời câu hỏi của bạn, một trình điều khiển không cần phải xử lý nhưng nó có thể. Mặc dù mã có thể tồn tại trong thư viện, trình điều khiển vẫn được tải vào memery thông qua một chương trình cho dù đó là kernel ở dạng mô-đun hạt nhân hoặc các quy trình người dùng.

Nó trở thành một cuộc tranh luận ngữ nghĩa nhiều hơn khi xem xét tổng số của một trình điều khiển thực sự là gì. Bạn có thể nói rằng trình điều khiển luôn là một chương trình nhưng đôi khi nó không giống như trong trường hợp cây thiết bị, nó thực sự có thể là một quy trình người dùng, tệp cây thiết bị, quy tắc udev và mô-đun hạt nhân trong đó cả quy trình và mô-đun đều sử dụng tất cả các thư viện để tạo nên logic của một trình điều khiển.


0

Trình điều khiển thiết bị Linux, về cơ bản là một thư viện không gian hạt nhân . Các cuộc gọi của nó được bắt đầu chủ yếu bởi các trình điều khiển cấp cao hơn hoặc bởi các quy trình không gian người dùng sử dụng nó.

Chỉ có một vài ngoại lệ từ điều này:

  • Các luồng nhân có thể được khởi động / dừng bởi trình điều khiển, đây thực chất là các quá trình không có phần không gian người dùng.
  • Trình xử lý ngắt được khởi tạo bởi phần cứng chứ không phải bởi các quy trình không gian người dùng.

Trong các hệ thống khác, như trong GNU Hurd, các trình điều khiển về cơ bản là trình nền với chúng, các quy trình có thể tương tác. Trong Linux, trình điều khiển là thư viện. Cả hai khái niệm đều có ưu điểm và nhược điểm của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.