簡體   English   中英

用戶空間中的Linux中斷處理

[英]Linux Interrupt Handling in User Space

在Linux中,在用戶空間代碼而不是內核空間中處理設備中斷的選項有哪些?

經驗告訴我們可以為幾乎任何PCI適配器編寫良好且穩定的用戶空間驅動程序。 它只需要一些復雜性和內核中的小代理層。 UIO是朝着這個方向邁出的一步,但是如果你想正確處理用戶空間中的中斷,那么UIO可能還不夠,例如,如果設備不支持UIO所依賴的PCI規范的中斷禁用位。

請注意,進程喚醒延遲只有幾微秒,因此如果您的實現需要非常低的延遲,那么用戶空間可能會拖累它。

如果我要實現一個用戶空間驅動程序,我會將內核ISR簡化為“disable&ack&wakeup-userpace”操作,處理喚醒過程中的中斷,然后重新啟用中斷(當然,通過從用戶空間進程寫入映射的PCI內存)。

UIO ,但仍應在內核空間中進行處理 OTOH,如果你只是需要注意中斷,你不需要內核部分。

必須間接觸發userland代碼。

內核ISR通過寫入文件/設置寄存器/信令來指示中斷。 用戶空間應用程序輪詢這個並繼續使用適當的代碼。 邊緣情況:比預期更多或更少的中斷(每個時間間隔超時/中斷太多)

Linux文件抽象用於連接內核和用戶空間。 這是由字符設備和ioctl()調用執行的。 為此,有些人可能更喜歡sysfs條目。

這可能看起來很奇怪,因為事件觸發的設備通知(中斷)與“時間觸發”輪詢掛鈎,但它實際上是異步阻塞(讀/選)。 無論如何,根據表現產生了一些問題。

因此,無法在內核之外直接處理中斷。 例如,共享內存可以在用戶空間中,並且可以映射一些I / O權限設置地址,因此UI / O可以工作,但不能用於直接中斷處理。

我已經找到了話題vfio只有一個“少數派報告”( http://lxr.free-electrons.com/source/Documentation/vfio.txt ): https://stackoverflow.com/a/21197797/5349798

類似的問題:

在linux中斷的上下文中運行用戶線程

在linux中是否可以從任何用戶空間程序注冊中斷處理程序?

Linux內核:從內核空間調用用戶空間中的回調函數

Linux中斷與輪詢

Linux用戶空間PCI驅動程序

如何通知用戶空間應用程序驅動程序已在linux中收到中斷?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM