按鍵按下(產生了中斷)--------》跳轉到異常向量入口,執行中斷函式。
中斷函式要做的工作:
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...