Linux中斷處理 利用鍵盤中斷線

2021-09-24 04:18:38 字數 1601 閱讀 3018

驅動**:使用中斷線號1(x86體系中,該中斷線用於鍵盤)

chardev.c

#include#include#include#include#include#include#include#include#includestruct char_devmy_dev;

irqreturn_t my_interrupt(int irq, void *dev_id, struct pt_regs *regs)

static int char_open(struct inode *inode, struct file *file)else if(ret == -ebusy)

printk(kern_emerg"******open end*****\n");

return 0;

}static int __init chardev_init(void)

//add cdev to kernel

cdev_init(&my_dev.dev_cdev, &my_dev.dev_fops);

cdev_add (&my_dev.dev_cdev, my_dev.dev_number, 1);

printk(kern_emerg"############chardev_init end############\n");

return 0;

}static void __exit chardev_exit(void)

module_init(chardev_init);

module_exit(chardev_exit);

module_license("gpl");

makefile:

ifneq ($(kernelrelease),)

obj-m := chardev.o

else

pwd := $(shell pwd)

kver := $(shell uname -r)

kdir := /lib/modules/$(kver)/build

all:

$(make) -c $(kdir) m=$(pwd) modules

clean:

rm -fr .*.cmd *.o *.mod.c *.ko .tmp_versions modules.* module.*

endif

載入模組的指令碼:其中引數1是主編號,需要通過cat /proc/devices 獲取

#!/bin/sh

insmod chardev.ko

mknod /dev/chardev c $1 0

chmod 777 /dev/chardev

解除安裝模組指令碼

#!/bin/sh

rm -rf /dev/chardev

rmmod chardev.ko

測試**:test.c,執行測試程式後,每次按鍵都都會觸發中斷,列印出資訊,解除安裝模組後,取消列印

#include#include #includeint main(void)

else

}

Linux中斷和中斷處理

眾所周知,處理器的速度跟外圍的硬體裝置的速度往往不在乙個數量級上,因此,如果核心採取讓處理器傳送乙個請求,然後專門等待回應的辦法,顯然差強人意。既然硬體處理的這麼慢,那麼核心就應該在這期間去處理其他事務,等待硬體真正完成了請求的操作後,再回過頭來對它進行處理。輪詢 polling 可能會是一種解決辦...

Linux中斷處理

裝置管理過程中,中斷號的申請是乙個非常重要的操作。當裝置發出中斷之後,硬體裝置根據intel cpu的通用處理過程,跳轉到了該中斷號對應的中斷相應函式處。在linux作業系統中,必定要跳到do irq函式處。在do irq 函式中,進行了一部分公共的中斷響應處理之後,根據已經入棧了的中斷號查詢裝置中...

Linux學習 中斷和中斷處理

2 中斷處理程式 3 上半部和下半部的對比 處理器的速度和外圍裝置的速度相差太遠,為了解決讓核心不做過多的無用功 使用輪詢 這是就需要一種機制在硬體需要時再向核心發出訊號 中斷機制 中斷機制可以更好的協同處理器和外部裝置,並且提高機器的效能 中斷 指的是可以使得硬體得以發出通知給處理器,中斷可以隨時...