1.1 中斷概述 ARM 架構(gòu) linux 內(nèi)核中,有 5 種常見的異常,其中中斷異常是其一,Linux 內(nèi)核將所 有中斷統(tǒng)一編號,使用一個 irq_desc 結(jié)構(gòu)體來描述這些中斷,里面記錄了中斷名稱、中斷狀 態(tài)、中斷標記、并提供了中斷的底層硬件訪問函數(shù)(如:清除、屏蔽、使能中斷),提供了這 個中斷的處理函數(shù)入口,通過它還可以調(diào)用用戶注冊的的中斷處理函數(shù)。linux 內(nèi)核的中斷體 系已經(jīng)很完善了,驅(qū)動工程師需要做的就是調(diào)用 request_irq 函數(shù)向內(nèi)核注冊中斷處理函 數(shù),下面我們來看看 request_irq 函數(shù)的定義: static inline int __must_check request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) 第一個參數(shù) irq:中斷號,與平臺架構(gòu)相關(guān); 第二個參數(shù) handler:用戶中斷處理函數(shù); 第三個參數(shù) flags:中斷標記 第四個參數(shù) devname:中斷名字,可以通過 cat /proc/interrupts 查看; 第五個參數(shù) dev_id:在 free_irq 中有用,也用做區(qū)分中斷處理函數(shù); 有注冊就得對應(yīng)著有注銷,驅(qū)動的注銷函數(shù)是 free_irq,其定義如下: void free_irq(unsigned int irq, void *dev_id) 第一個參數(shù) irq:中斷號,與 request_irq 中的 irq 一致,用于定位 action 鏈表; 第二個參數(shù) dev_id:用于在 action 鏈表中找到要卸載的表項;同一個中斷的不同中斷 處理函數(shù)必須使用不通的 dev_id 來區(qū)分,這就要求在注冊中斷共享時參數(shù) dev_id 必須唯 一。 1.2 設(shè)備樹文件修改 這里我們選用 back 按鍵用于測試,它的網(wǎng)絡(luò)標號是“DISP0_WR”,對應(yīng)的 IO 管腳編 號是“NANDF_WP”,對應(yīng)的宏定義為“MX6QDL_PAD_NANDF_WP_B__GPIO6_IO09 ” 這個管腳在 gpio-keys 驅(qū)動中已經(jīng)使用,我們需要在設(shè)備樹中將其屏蔽,然后在設(shè)備樹 文件中增加測試例程的設(shè)備樹代碼。 打開“arch/arm/boot/dts/imx6qdl-sabresd.dtsi”設(shè)備樹文件。 將 gpios = <&gpio6 9 GPIO_ACTIVE_LOW>; 屏蔽掉,如下圖所示。
01.jpg (13.91 KB, 下載次數(shù): 60)
下載附件
2019-8-29 10:56 上傳
在“itop_max485_ctl”之后添加以下代碼: key_int{ compatible = "itop,key_int_name"; pinctrl-names = "default"; gpio_key_int = <&gpio6 9 GPIO_ACTIVE_LOW>; status = "okay"; }; 添加完成之后如下圖所示,
03.jpg (23.24 KB, 下載次數(shù): 56)
下載附件
2019-8-29 10:56 上傳
重新燒寫設(shè)備樹文件,在開發(fā)板“/sys/bus/platform/device”目錄下會有 key_int 文件 夾生成,表明設(shè)備注冊完成。 1.3 測試驅(qū)動 驅(qū)動源碼在壓縮包“獨立中斷例程_V1.0”中。 使用“insmod key_int.ko”命令加載驅(qū)動模塊。如下圖。
04.jpg (13.84 KB, 下載次數(shù): 61)
下載附件
2019-8-29 10:56 上傳
按下按鍵“Back”,會有打印信息,如下圖所示。
05.jpg (14.74 KB, 下載次數(shù): 56)
下載附件
2019-8-29 10:56 上傳
卸載驅(qū)動如下圖。
06.jpg (9.23 KB, 下載次數(shù): 50)
下載附件
2019-8-29 10:56 上傳
測試完成。
9911245-4af7a16ceefa7f25.webp.jpg (105.36 KB, 下載次數(shù): 64)
下載附件
2019-8-29 10:56 上傳
|