linux驅動學習 linux中斷程式編寫流程

2021-10-10 10:32:49 字數 1708 閱讀 1972

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 只顯示驅動的主裝置號,且是分類顯示...