2011-11-02 43 views

Trả lời

4

Có , nhưng xử lý vẫn nên được thực hiện trong kernelspace. OTOH, nếu bạn chỉ cần thông báo ngắt, bạn không cần phần hạt nhân.

5

Kinh nghiệm cho biết có thể viết trình điều khiển không gian người dùng tốt và ổn định cho hầu như mọi bộ điều hợp PCI. Nó chỉ đòi hỏi một số tinh tế và một lớp proxy nhỏ trong hạt nhân. UIO là một bước theo hướng đó, nhưng nếu bạn muốn xử lý chính xác các ngắt trong không gian người dùng thì UIO có thể không đủ, ví dụ nếu thiết bị không hỗ trợ bit vô hiệu hóa ngắt PCI-spec mà UIO dựa vào.

Lưu ý rằng thời gian chờ của quá trình wakeup là một vài microsec nên nếu việc triển khai của bạn yêu cầu độ trễ rất thấp thì không gian người dùng có thể là sự kéo trên đó.

Nếu tôi triển khai trình điều khiển không gian người dùng, tôi sẽ giảm ISR hạt nhân thành một thao tác "vô hiệu hóa hoạt động của người dùng wakeup-userpace", xử lý ngắt trong quá trình waked-up và sau đó bật lại ngắt (tất nhiên, bằng cách ghi vào bộ nhớ PCI được ánh xạ từ quá trình không gian người dùng).

+0

Khi chúng tôi làm tài xế userspace, Liệu nó có ý nghĩa để xóa gián đoạn trong kernel hoặc trong userspace? Tôi nghĩ rằng nó sẽ được rõ ràng khi xử lý được thực hiện (vì vậy trong userspace), phải không? – ransh

1

Phải kích hoạt gián tiếp mã người dùng.

ISR hạt nhân cho biết gián đoạn bằng cách ghi tệp/thiết lập đăng ký/báo hiệu. Ứng dụng không gian người dùng thăm dò ý kiến ​​này và tiếp tục với mã thích hợp. Các trường hợp cạnh: nhiều hoặc ít ngắt hơn dự kiến ​​(thời gian chờ/quá nhiều ngắt trong một khoảng thời gian)

Tệp trừu tượng Linux được sử dụng để kết nối không gian hạt nhân và người dùng. Điều này được thực hiện bằng các thiết bị ký tự và các cuộc gọi ioctl(). Một số có thể thích mục sysfs cho mục đích này.

Điều này có thể trông kỳ lạ vì thông báo thiết bị kích hoạt sự kiện (ngắt) được nối với cuộc thăm dò 'kích hoạt thời gian', nhưng nó thực sự là chặn không đồng bộ (đọc/chọn). Dù sao một số câu hỏi đang phát sinh theo hiệu suất.

Vì vậy, ngắt không thể được xử lý trực tiếp bên ngoài hạt nhân. Ví dụ: bộ nhớ chia sẻ có thể ở trong không gian người dùng và với một số địa chỉ cài đặt quyền I/O có thể được ánh xạ, vì vậy U-I/O hoạt động, nhưng không phải để xử lý ngắt trực tiếp.

Tôi đã tìm thấy chỉ có một 'báo cáo thiểu số' trong chủ đề vfio (http://lxr.free-electrons.com/source/Documentation/vfio.txt): https://stackoverflow.com/a/21197797/5349798

câu hỏi tương tự:

Running user thread in context of an interrupt in linux

Is it possible in linux to register a interrupt handler from any user-space program?

Linux Kernel: invoke call back function in user space from kernel space

Linux Interrupt vs. Polling

Linux user space PCI driver

How do I inform a user space application that the driver has received an interrupt in linux?

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