Linux 下裝置 中斷號進行共享 WT

2021-10-05 02:02:20 字數 4572 閱讀 7421

在 linux中可以實現乙個中斷號來驅動兩套的驅動程式.

int

request_irq

(unsigned

int irq, irq_handler_t handler,

unsigned

long irqflags,

const

char

*devname,

void

*dev_id)

irq:中斷號,可以通過cat /proc/interrupts來檢視你要在哪乙個中斷號上面實現共享

cpu0       cpu1       cpu2       cpu3       

0:45

000 io-apic 2

-edge timer

1:42019

1034

994 io-apic 1

-edge i8042

8:000

0 io-apic 8

-edge rtc0

9:18

1921

20 io-apic 9

-fasteoi acpi

12:182

11995

6077

6096 io-apic 12

-edge i8042

16:0

000 io-apic 16

-fasteoi mmc0

18:129

34365

17253

17413 io-apic 18

-fasteoi ehci_hcd:usb1, ehci_hcd:usb2

25:0

140 pci-msi 34816

-edge pcie pme, pciehp

27:0

000 pci-msi 38912

-edge pcie pme, pciehp

29:0

000 pci-msi 40960

-edge pcie pme

30:0

000 pci-msi 262144

-edge xhci_hcd

31:0

000 pci-msi 262145

-edge xhci_hcd

33:0

000 pci-msi 262146

-edge xhci_hcd

34:0

000 pci-msi 262147

-edge xhc

那麼這裡的i8042就是響應鍵盤的中斷號.

irq_handler:中斷處理函式

irqflags:中斷型別標記,表示怎麼觸發.在這裡設定為irqf_shared標誌則可以實現乙個中斷響應兩套或多套中斷服務函式的功能.

*devname:中斷的名字,顯示在/proc/interrupts等檔案中

void *dev_id: 裝置id,需要使用乙個獨特的裝置號dev_id,讓核心能夠通過dev_id對應註冊時的中斷處理函式。

我們實驗在響應中斷的中斷號上新增兩套驅動函式,讓兩套驅動函式一旦檢測到有鍵按下便列印相關的資訊,我們可以通過開乙個終端鍵入 watch 「dmesg | tail -20」 命令來實時檢視dmesg中的實時的最後20條列印資訊.

share1.c源**如下;

#include

#include

#include

#include

#include

#include

#include

#include

#include

int id=1;

int irq =1;

static irqreturn_t irq_handle_function

(int irq,

void

*device_id)

intinit_module()

printk

("[ok] inte***ce=share1 irq=1\n");

return0;

}void

cleanup_module()

module_license

("dual bsd/gpl");

module_version

("v0.1");

module_author

("sikander"

);

share2.c 如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

int id=1;

int irq=1;

static irqreturn_t irq_handle_function

(int irq,

void

*device_id)

intinit_module()

printk

("[ok] inte***ce=share1 irq=1\n");

return0;

}void

cleanup_module()

module_license

("dual bsd/gpl");

module_version

("v0.1");

module_author

("sikander"

);

編譯完成後我們動態載入這樣兩的驅動到1號中斷線,等待鍵盤的中斷,

sudo insmod share1.ko

sudo insmod share2.ko

我們通過cat /proc/interrupts以看到在中斷號1後面增加share1 與 share 2模組.

上圖顯示的為dmesg的最後20條的列印資訊,可以看出沒敲擊鍵盤上任意乙個鍵,都會觸發這兩個中斷程式進行運作.

裝置樹中獲取中斷號

裝置樹中有一部分與中斷有關的節點描述 eint 看如下的 片斷 node of find compatible node null,null,mediatek,eint 獲取中斷對應的compatible的節點 of property read u32 array node,debounce int...

linux下設定共享目錄

linux系統的檔案或目錄的共享功能是非常強大,而且是非常靈活的,其對許可權的控制可以做到非常的細緻,當然如果你是通過命令列方式進行設定的 話,那麼對於剛接觸linux系統的使用者來說將是一件十分頭痛的事。但如果你所處的網路環境對安全要求不高的話,那麼只要簡單的幾個步驟就可以建立乙個 linux系統...

linux主裝置號和從裝置號

裝置號是在驅動module中分配並註冊的,也就是說,驅動module擁有這個裝置號 我的理解 而 dev目錄下的裝置檔案是根據這個裝置號建立的,因此,當訪問 dev目錄下的裝置檔案時,驅動module就知道,自己該出場服務了 當然是由核心通知 在linux核心看來,主裝置號標識裝置對應的驅動程式,告...