- 博客(4)
- 资源 (20)
- 收藏
- 关注
原创 中断下半部-工作队列
中断下半部-工作队列<br /><br /><br />工作队列(work queue)是另外一种将中断的部分工作推后的一种方式,它可以实现一些tasklet不能实现的工作,比如工作队列机制可以睡眠。这种差异的本质原因是,在工作队列机制中,将推后的工作交给一个称之为工作者线程(worker thread)的内核线程去完成(单核下一般会交给默认的线程events/0)。因此,在该机制中,当内核在执行中断的剩余工作时就处在进程上下文(process context)中。也就是说由工作队列所执行的中断代码会表现出
2011-04-22 08:49:00 674
原创 irq_request()
<br />Request_irq参数dev_id的真正作用 <br /> <br />注:若对kernel中断处理模型不是很清楚的话(如:irqaction的作用)可以先参考一下这篇文档: <br />http://blog.chinaunix.net/u2/60011/showart.php?id=1079281<br />这里主要讲request_irq的参数dev_id的作用,内容会涉及到少许上面文档提到的内容。 <br /> <br />Request_irq的作用是申请使用IRQ并注册中断处
2011-04-22 08:32:00 2235
原创 class_create()
<br />在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。<br />内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_create(…)函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建好了这个类,再调
2011-04-21 19:52:00 16498 6
原创 IS_ERR
<br /> 像struct class *cls = class_create();这种语句,其中返回的指针值并不行kmalloc一样这么简单,只判断是否为NULL就可以了,内核是返回其错误值。那么我怎么来判断它呢,总不能用if()来将每个错误例出来吧,这里我们的IS_ERR()宏就发挥作用了。先看源代码,再讲原理,看看内核中的巧妙设计思路。<br /><br />/* include/linux/err.h */<br />static inline long __must_check IS
2011-04-21 19:34:00 7393 4
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人