029 中斷註冊

2021-09-27 12:57:17 字數 3799 閱讀 6271

按鍵按下(產生了中斷)--------》跳轉到異常向量入口,執行中斷函式。

中斷函式要做的工作:

1、保護現場

2、執行中斷處理函式

3、恢復現場

request_irq

(unsigned

int irq, irq_handler_t handler,

unsigned

long flags,

const

char

*name,

void

*dev)

引數2:中斷處理函式

引數3:中斷標記。上公升/下降沿,高/低電平

引數4:中斷名字。cat /proc/interrupts

引數5:使用裝置的裝置結構體或者null。**

home和back

exynos4_gpx1[1]和exynos4_gpx1[2]

→kp_col[1]和kp_col[2]

→xeint_9和xeint_10

irq_eint(9)和irq_eint(10)

1、在平台檔案中註冊裝置:keyirq

2、在driver/char/kconfig中新增位置選單項

config keyirq_ctl

bool "enable keyirq config"

default y

help

enable keyirq config!

3、在menuconfig中進行配置

4、重新編譯燒寫核心

key_irq.c

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define dprintk(x...) printk("keyirq debug:" x)

#define driver_name "keyirq"

static irqreturn_t eint9_interrupt

(int irq,

void

*dev_id)

static irqreturn_t eint10_interrupt

(int irq,

void

*dev_id)

static

intkeyirq_probe

(struct platform_device *pdev)

static

int keyirq_remove (

struct platform_device *pdev)

static

int keyirq_suspend (

struct platform_device *pdev, pm_message_t state)

static

int keyirq_resume (

struct platform_device *pdev)

static

struct platform_driver keyirq_driver =,}

;static

int __init keyirq_init

(void

)static

void __exit keyirq_exit

(void

)module_init

(keyirq_init)

;module_exit

(keyirq_exit)

;module_license

("dual bsd/gpl"

);

#!/bin/bash

$(warning kernelrelease =

$(kernelrelease)

)ifeq (

$(kernelrelease)

,)#核心的原始碼路徑, ?= 條件賦值, uname -r 得到核心版本號

kerneldir ?= /home/mint/itop/linux_3.0

# := 立即賦值, 得到當前的絕對路徑

pwd :=

$(shell pwd

)# -c 切換工作路徑, $(make) = make

modules:

$(make)

-c $(kerneldir)

m=$(pwd)

modules

clean:

rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions module* modules*

.phony: modules clean

else

# 生成模組

obj-m := key_irq.o

endif

1、載入驅動

2、按鍵按下後

3、cat /proc/interrupts檢視中斷

4、解除安裝驅動

rmmod ke_irq

GIC600中斷未寫到裝置樹中斷註冊失敗問題

除錯 檢視核心 發現 irqdomain.c if irq domain is hierarchy domain else gicv3走的是上面流程,通過irq domain alloc irq去完成對映,目前還不知道判斷為irq domain is hierarchy是什麼意思。除錯發現寫入裝置樹...

x86中斷(一) 中斷分類

一 中斷分類 x86系統支援256個中斷源,每個中斷源使用0 255數字標識,該標識稱作中斷向量號 即cpu中斷源的中斷號,要與外部中斷的中斷號irq n相區別 cpu通過獲取中斷向量號識別中斷源。256個中斷源可以分為 其中 1 內部中斷 由cpu內部事件及執行軟中斷指令產生,由除法中斷 溢位中斷...

6 中斷系統

外部中斷0實驗 include reg52.h 此檔案中定義了微控制器的一些特殊功能暫存器 typedef unsigned int u16 對資料型別進行宣告定義 typedef unsigned char u8 sbit k3 p3 2 定義按鍵k3 sbit led p2 0 定義p20口是l...