第1页共49页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共49页LinuxDeviceDriver书籍(6)并发和竞争情况(2008-09-2816:28)分类:LDD3第6章高级字符驱动操作在第3章,我们建立了一个完整的设备驱动,用户可用来写入和读取
但是一个真正的设备常常提供比同步读和写更多的功能
现在我们已装备有调试工具如果发生错误,并且一个牢固的并发的理解来帮助避免事情进入错误--我们可安全地前进并且创建一个更高级的驱动
本章检查几个你需要理解的概念来编写全特性的字符设备驱动
我们从实现ioctl系统调用开始,它是用作设备控制的普通接口
接着我们进入各种和用户空间同步的方法;在本章结尾,你有一个充分的认识对于如何使进程睡眠(并且唤醒它们),实现非阻塞的I/O,并且通知用户空间当你的设备可用来读或写
我们以查看如何在驱动中实现几个不同的设备存取策略来结束
这里讨论的概念通过scull驱动的几个修改版本来演示
再一次,所有的都使用内存中的虚拟设备来实现,因此你可自己试验这些代码而不必使用任何特别的硬件
到此为止,你可能在想亲手使用真正的硬件,但是那将必须等到第9章
ioctl接口大部分驱动需要--除了读写设备的能力--通过设备驱动进行各种硬件控制的能力
大部分设备可进行超出简单的数据传输之外的操作;用户空间必须常常能够请求,例如,设备锁上它的门,弹出它的介质,报告错误信息,改变波特率,或者自我销毁
这些操作常常通过ioctl方法来支持,它通过相同名子的系统调用来实现
在用户空间,ioctl系统调用有下面的原型:intioctl(intfd,unsignedlongcmd,
);这个原型由于这些点而凸现于Unix系统调用列表,这些点常常表示函数有数目不定的参数
在实际系统中,但是,一个系统调用不能真正有变数目的参数
系统调用必须有