UIO 驅動中斷

2021-07-29 17:57:46 字數 590 閱讀 1820

uio 是怎麼工作的?

乙個裝置驅動的主要任務有兩個:

1. 訪問裝置的記憶體

2. 處理裝置產生的中斷

對於第乙個任務,uio 核心實現了mmap()可以處理物理記憶體(physical memory),邏輯記憶體(logical memory), 虛擬記憶體(virtual memory)。uio驅動的編寫是就不需要再考慮這些繁瑣的細節。

第二個任務,對於裝置中斷的應答必須在核心空間進行。所以在核心空間有一小部分**用來應答中斷和禁止中斷,但是其餘的工作全部留給使用者空間處理。

如果使用者空間要等待乙個裝置中斷,它只需要簡單的阻塞在對 /dev/uiox的read()操作上。 當裝置產生中斷時,read()操作立即返回。uio 也實現了poll()系統呼叫,你可以使用 select()來等待中斷的發生。select()有乙個超時引數可以用來實現有限時間內等待中斷。

read()操作還必須是讀取乙個32-bit長度的整數,返回值是發生中斷的計數器。

所以read()操作的呼叫為

read(uio_fd, &irq_count, 4);

通過irq count 返回發生的中斷次數。

參考:

ZYNQ Linux 使用UIO中斷

zynq中的uio驅動和中斷程式學習 xilinx petalinux學習 testing uio with interrupt on zynq ultrascale 何曄 當zynq遇到linux userspace i o uio 在kernel drivers uio uio pdrv gen...

裝置驅動 中斷

1 關於裝置驅動中的中斷問題 作業系統為了使得快速裝置和慢速裝置合適工作,需要中斷來提高效率,乙個外設要使用乙個中斷就必須註冊中斷號,獲得跟這個中斷號相關的一些資源,並且在中斷發生的時候核心可以進行一些處理,例如 呼叫中斷處理例程來真正的處理裝置中斷。linux處理中斷的方式很大程度上與它在使用者空...

驅動互斥中斷

互斥機制 1 遮蔽中斷 2 原子操作 定義原子變數 atomic t v 初始化 atomic t v atomic init 0 操作atomic t v atomic init 1 open else release 自旋鎖使用 自旋鎖是忙鎖 系統開銷較大,為了減小系統開銷,需要減少等待時間而減...