关闭

LDD3笔记(2)

644人阅读 评论(0) 收藏 举报
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中。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:103285次
    • 积分:1672
    • 等级:
    • 排名:千里之外
    • 原创:53篇
    • 转载:45篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论