LDD3笔记(2)

原创 2006年06月12日 21:12:00
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中。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

LDD3学习笔记(2):建立和运行模块

1、建立开发环境在开始编写代码以及研究代码之前,你需要有一个开发环境,也就是一个linux系统。通常我们的做法是在windows下安装一个虚拟机软件,然后在虚拟机软件中安装一个linux系统的发行版本...

LDD3学习笔记(4):字符驱动2

1、重要的数据结构注册设备编号仅仅是驱动代码需要完成的任务之一,还有很多基础性的驱动操作需要驱动代码来完成,这里有3个重要的内核数据结构需要了解一下分别是:file_operations、file、i...

ldd3笔记-第6章-高级字符程序操作part2

6.2 阻塞IO     当无法立即响应某个请求时,应该阻塞进程,将其休眠直到响应。     6.2.1 休眠简介         当一个进程被置为睡眠,它被标识并...

LDD3 study note 2

这篇文章在note1的基础上,进一步记录实现一个ioctl要注意的地方。相关的代码在:https://github.com/wangzhou/scull.git, tag: scull_2

(LDD3读书记录)Chapter-2:建立和运行模块

/*  纯粹是学习记录,无意侵权~^ _ ^  */ /*  感觉LDD3已经很精简了,完全不知道该删简哪些部分...  *  so,copy了全部!只能说,处于“书越读越厚”的阶段....菜鸟一...

LDD3读书笔记(第8章 时间、延迟及延缓操作)

计时 #include HZ     HZ符号指出每秒钟产生的时钟滴答数。 #include volatile unsigned long jiffies u64 jiffies_64...

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...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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