wallace lee的兴趣空间

会当击水三千里 自信人生二百年

LDD3笔记(2)

2006年6月12日星期一

第六章:高级字符驱动程序操作

设备驱动程序可以通过ioctl调用控制硬件设备。

ioctl在用户空间和驱动程序中有不同的函数原型。

大多数的ioctl实现都包含一个switch语句,来根据cmd参数选择对应的操作。通常在代码使用符号名来代替cmd数值。

ioctl的命令编号方法有旧方法和新方法。应该看看include/asm/ioctl.h Documentation/ioctl-number.txt文件。

定义新号码的方法在linux/ioctl.h中。

当命令号码不正确的时候,通常的返回值是-EINVAL

有一些ioctl调用,是用于文件操作的。

如果ioctl的可变参数是指针,应该先检查指针的有效性,用access_ok函数。在asm/uaccess.h中定义。

代码在switch之前,应该分析ioctl的命令号的位字段来检查参数。

可以用copy_from_usercopy_to_user来同用户空间交换数据。有经过优化的函数 put_userget-user,用于1248个字节的数据,定义在asm/uaccess.h中。


阅读更多
文章标签: user cmd access 优化
个人分类: Linux
上一篇备份CSDN BLOG的方法一则
下一篇Debian虚拟主机学习笔记
想对作者说点什么? 我来说一句

ldd3所有源码与示例

2017年11月16日 181KB 下载

没有更多推荐了,返回首页

关闭
关闭