linux中斷:
1、確定中斷號
2、申請中斷號、request_irq 不用一定要釋放free_irq
3、編寫中斷服務函式
request_irq
(unsigned
int irq, irq_handler_t handler,
unsigned
long flags,
const
char
*name,
void
*dev)
中斷的上下部:
request_irq 裡的函式指標就是上部分
上部用於處理數度快的,系統占用不多的,這樣可以使系統中斷快進快出,下部分用於處理比較耗時的任務,類似於freertos中斷中呼叫通知函式來通知任務函式來處理耗時任務,使得系統中斷處理快速完成。
處理內容不能被打斷,對時間敏感,與硬體相關這三類盡量放置在上部分,其他優先下部分。
軟中斷誰先觸發誰執行
softirq_action 結構體定義在檔案 include/linux/interrupt.h
在 kernel/softirq.c 檔案中一共定義了 10 個軟中斷
tasklet
//上半部
irqfuc()
//下半部
tasklet_fuc()
//初始化
init_***()
工作佇列
將任務交給程序的上下文,交給核心的乙個執行緒處理,對於任務可以休眠推後執行的可以使用工作佇列,否則只能使用軟中斷
//上半部
irqfuc()
//下半部
workqueue_fuc()
//初始化
init_***()
中斷執行緒化
裝置樹中斷節點資訊 documentation\devicetree\bindings\arm gic.tx下有詳細介紹
1、interrupt-cells<
3> :每個interrupt有三個成員
gpio5: gpio@020ac000
;fxls8471@1e
;interrupt-parent表示父中斷,interrupts 第乙個是cells是gpio的編號即此時使用的是goio5_io00 第二個是中斷觸發方式 低電平觸發
the 3rd cell is the flags, encoded as follows:
bits[3:
0] trigger type and level flags.
1= low-to-high edge triggered
2= high-to-low edge triggered (invalid for spis)
4= active high level-sensitive
8= active low level-sensitive (invalid for spis)
.
函式unsigned int irq_of_parse_and_map(struct device_node *dev, int index)
用於獲取中斷號,如果是使用gpio中斷的話int gpio_to_irq(unsigned int gpio)
來獲取中斷號
Linux驅動學習 Linux裝置驅動概述
linux裝置驅動概述 以點亮led為例 包括應用程式 庫 作業系統 核心 驅動程式。而開發人員中 只要關注自己的那一層,相鄰層只關注介面就可以了 應用程式使用庫提供的open函式開啟led的裝置檔案 庫根據open函式傳入的引數執行 swi 指令,這是軟中斷,這條指令會引起 cpu異常,進入核心 ...
linux驅動學習
1.在dev目錄下用ls l檢視字元裝置,輸出第一列為c的的標識的裝置,其中有主裝置號,和次裝置號 裝置檔案對應裝置驅動,linux將每個裝置對映成為乙個檔案,如果訪問檔案,那麼對應的訪問就是相應的io驅動程式,檔案和驅動主要是通過主裝置號聯絡起來的,次裝置號就是反應了具體是那個裝置 核心中 dev...
Linux驅動學習
1.make時使用make arch arm cross compile arm linux gnueabihf 命令而不是make命令 2.編譯.c檔案使用arm linux gnueabihf gcc o c生產可執行檔案 3.cat proc devices 只顯示驅動的主裝置號,且是分類顯示...