LDD3笔记(3)

原创 2006年06月17日 23:41:00

2006617星期六

当被调用的驱动程序无法满足调用者的请求,它应该阻塞该进程,进程置于休眠状态直到其请求可继续。

把进程置于休眠时,注意两条规则:1.不要在原子上下文中进入休眠。原子上下文是指:在执行多个步骤的时候,不能有并发的访问。 2. 被唤醒之后,必须检查,以确保我们等待的条件真正为真。

linux中,等待队列通过“等待队列头”来管理,它是一个wait_queue_head_t的结构体,定义在 linux/wait.h中。可以用静态或者动态的方法来初始化一个等待队列头。

可以用四种wait_event宏来把进程置于休眠。它需要的参数是queue(等待队列头)和condition(布尔表达式,条件为真时,将被唤醒)。

唤醒用的宏是两种wake_up宏。

有时调用者进程会通知我们它不想被阻塞。显式的非阻塞的I/Ofilp->f_flags中的O_NONBLOCK标志决定。 Linux/fcntl.h  linux/fs.h

在驱动程序中使用输出缓冲区可以提高性能。

注意 scull例子中如何使用while循环来实现 休眠和唤醒。

LDD3读书笔记----调试技术

内核编程带有它自己的, 独特的调试挑战性. 内核代码无法轻易地在一个调试器下运行, 也无法轻易的被跟踪, 因为它是一套没有与特定进程相关连的功能的集合. 内核代码错误也特别难以重现, 它们会牵连整个系...
  • wuye110
  • wuye110
  • 2013年02月28日 14:10
  • 556

LDD3笔记:第三章 字符设备驱动

平凡的我们不能预见虚无且略带迷茫的明天,唯有着眼当下做好我们手边的事,这才是王道。   初来咋到不敢造次,追寻伟人,以期借肩膀一用,弱弱的陈述,积极的整理。举网络资源之海量,去迷茫众生之浮躁。新...

LDD3驱动学习笔记1---Hello World

原创文章:转载请说明出处:http://blog.csdn.net/crzy_sparrow/article/details/7367288 本文目录: 1.  构建内核源码树     1.1U...

[LDD3阅读笔记]中断处理

中断处理 1. 安装中断程序 #include  typedef irqreturn_t (*irq_handler_t)(int, void *); extern i...
  • v2nero
  • v2nero
  • 2013年06月13日 17:49
  • 494

LDD3笔记:第二章 构造和运行模块

在正式进行驱动开发前,需要了解有关模块编程和内核编程的一些基本概念。在本节中将会构造几个完整的(但绝对没啥功用的)模块。设置测试系统一般的发行版本都会装好内核代码树的,用过的Red Hat Enter...

LDD3读书笔记(第16章 USB驱动程序)

本节总结本章中介绍的符号: #include     和USB相关的所有内容所在的头文件。所有的USB设备驱动程序都必须包括该文件。 struct usb_driver     描述USB驱...

LDD3读书笔记(第15章 Linux设备模型)

kobject #include     包含文件中包含了对kobject的定义,以及相关的结构和函数。 void kobject_init(struct kobject *kobj); i...

LDD3笔记——字符设备驱动简单分析

在学习字符设备驱动时,尝试理解下列问题。1、  什么是字符设备?什么是字符设备驱动?这是两个完全不同的概念,字符设备是以字节为单位进行顺序访问的一类设备的总称,常见的字符设备有键盘、串口、控制台等。而...

ldd3学习笔记:调试技术

1.内核中支持的调试选项打开:kernel hacking菜单 CONFIG_DEBUG_KERNEL:使其他调试选项可用; 但不激活任何特性. CONFIG_DEBUG_DRIVER:在"Dev...

LDD3读书笔记(第10章 内核数据类型)

#include typedef u8; typedef u16; typedef u32; typedef u64;     确保是8、16、32和64位的无符号整数值类型。对应的有符号...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LDD3笔记(3)
举报原因:
原因补充:

(最多只允许输入30个字)