在 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核心看來,主裝置號標識裝置對應的驅動程式,告...