linux驱动多中断进程,有关Linux驱动开发字符设备与中断总结

查看某个函数的用法man 2 function:

如man 2 mknod

1.linux字符设备驱动回顾

ioctl

自动创建设备结点

1.mdev->busybox(默认)

fg.which is mdev //查看mdev命令在哪个目录下

which is arm-linux-gcc

2.etc/init.d/rcS脚本

mount -a

echo /sbin/mdev > /proc/sys/kernel/hotplug

3.etc/fstab

proc /proc proc defaults 0 0 //proc和sysfs是两种不同的虚拟文件系统

sysfs /sys sysfs default 0 0 //proc和sysfs是两种不同的虚拟文件系统

4.在驱动程序调用

class_create

device_create

device_destroy

class_destroy

手动创建

2.中断

为什么有中断?

CPU的运行速率远远快于外设的运行速率

轮询,定期检查设备,但做不少无用功

中断的触发流程

外设:有操作或者有数据可用,那么就会产生一个电信号,这个电信号就会给中断控制器

中断控制器:中断控制器接收到外设发来的电信号以后,进行进一步的处理,判断这个中断是否

使能或者禁止,判断它的优先级等,如果需要发送给CPU一个信号,那么这时中断

控制器就给CPU发送一个电信号

CPU:CPU接收到中断控制器发送来的电信号以后,CPU就无条件的跳转到异常微量表的入口(异常向

量表自己来定义),后续CPU就处理对就的中断.

中断的处理流程:

主程序

中断服务程序

响应(保存现场)

中断的优先级问题

返回(恢复现场)

3.linux内核是如何处理中断的呢?

3.1内核已经在它初始化的时候,将异常微量表建立好了,异常微量表的地址在0xffff0000

3.2内核关于保护现场和恢复现场这些事也都帮你做好

3.3对于驱动程序来说,只需要完成中断服务程序即可.

4.linux内核中如何注册中断服务程序呢?

request_irq(中断号, 中断处理函数...)

每当中断号对应的中断发生以后,内核就会执行对应的中断处理函数

5.中断处理程序在编程的时候要注意哪能些事情?

1.中断处理函数不属于任何进程,所以也就不参与进程之间的调度

2.中断处理函函数的速度要快,如果不快,其它任务无法获取CPU的

资源,影响系统的并发

3.中断处理函数不能与用户空间进行数据的往来, 如果要想让中断给用户发送,

进行数据的往来,要配合系统调用函数(file_operations)

4.在中断处理函数中, 不能调用引起休眠的函数

copy_to_user, copy_from_user, kmalloc, 国为这些函数会引起进行内存的拷贝,

在拷贝的时候,有可以空闲页不够,就会引起拷贝过程进入休眠状态,等待空闲页的出现。

共享中断

硬件连接

多个外设都接到同一根中断线,这个中断线接中断控制器,这个噗断控制器接CPU

一旦中断给CPU发信号, CPU会把对应的中断程序逐个执行一遍.

request_irq(..., irqflags,...,...,device_id)

irqflags必须是IRQ_SHARED

device_id必须是唯一的

注册的中断处理程序不能使用disable_irq(unsigned int irq)

中断处理程序中必须能够区分它的设备是否产生中断,这个需要硬件的支持,

然后中需要中断处理程序中判断处理即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值