2010-05-25 17 views
10

Các cách giao tiếp với mô-đun hạt nhân từ không gian người dùng là gì? Bằng cách liên lạc tôi có nghĩa là gửi thông tin và lệnh giữa các mô-đun hạt nhân và một quá trình không gian người dùng.Làm thế nào để giao tiếp với một mô-đun hạt nhân Linux từ không gian người dùng mà không cần xả rác/dev với các nút mới?

Tôi hiện biết hai cách:

  1. mở/đóng/đọc/ghi/ioctl vào nút thiết bị công bố.
  2. đọc/ghi trên tệp được xuất và ghép/proc.

Cụ thể hơn, ai đó có thể tư vấn cách tốt nhất để giao tiếp với mô-đun hạt nhân không thực sự truyền bất kỳ phần cứng nào và do đó không được xả rác/dev với các nút chỉ tồn tại cho các cuộc gọi ioctl? Tôi chủ yếu cần kiểm tra các biến trạng thái khác nhau của nó và gửi cho nó một khối dữ liệu với một thẻ loại yêu cầu và xem liệu yêu cầu đã thành công chưa.

Trả lời

2

Thứ ba là thêm một syscall mới, nhưng hai bạn đã viết là những người ưa thích, tôi nghĩ. Tôi đã tìm thấy tài liệu này có thể hữu ích, nhưng tôi vẫn cho rằng tùy chọn này không được đề cập: http://www.csee.umbc.edu/courses/undergraduate/CMSC421/fall02/burt/projects/howto_add_systemcall.html

Một tùy chọn có thể chấp nhận khác có thể là chia sẻ bộ nhớ.

+0

tôi biết về thay thế một syscall bởi vá bảng, nhưng làm thế nào để thêm một cái mới? –

+0

Tôi nghĩ rằng tôi đã đọc về điều đó trong cuốn sách Trình điều khiển thiết bị Linux một lần, hãy để tôi xem xét ... – fortran

+4

Việc thêm các syscalls mới được khuyến khích mạnh mẽ bởi các nhà phát triển hạt nhân. Trong hạt nhân mới hơn, họ đã cố ý làm cho nó khó khăn hơn. –

3

Bạn cũng có thể đọc/ghi từ/dev các nút thiết bị.

IMHO,/dev đã được rải rác với nội dung và thêm các nút của riêng bạn không có vấn đề gì lớn. Đừng quên rằng bạn có thể có rất nhiều mã ioctl cho một nút thiết bị duy nhất và thông số ioctl được chuyển qua tham chiếu để có thể lớn như bạn muốn.

8

Ngoài ra còn có hệ thống tập tin/sys (sysfs):

sysfs xuất khẩu thông tin về thiết bị và trình điều khiển từ mô hình thiết bị hạt nhân để userspace, và cũng là sử dụng cho cấu hình.

(từ Wikipedia)

0

debugfs là một khả năng tốt cho các API mà ít ổn định hơn sysfs, nhưng API về cơ bản là giống nhau. Đây là minimal runnable example.

configfs là một số khác.Nó cho phép tạo các đối tượng hạt nhân động dễ dàng từ không gian người dùng thông qua hệ thống tập tin: https://www.kernel.org/doc/Documentation/filesystems/configfs/configfs.txt

Trong mọi trường hợp, bạn sẽ phải nhập không gian tên một số hệ thống tập tin trong trường hợp sysfs và debugfs. Chỉ cần chọn chất độc của bạn.

Ngoài ra, udev quy tắc làm /dev rất giống với sysfs và debugfs: How to create a device in /dev automatically upon loading of the kernel module for a device driver?

Các vấn đề liên quan