Linux
文章平均质量分 85
xphh
这个作者很懒,什么都没留下…
展开
-
Linux驱动编程 step-by-step (三)
字符设备中 重要的数据结构大部分字符驱动设计三个重要的数据结构struct file_operationsstruct filestruct inode 一、文件操作 在之前的一篇文章中已经有介绍了如何去生情字符设备设备号,但是没有做任何的工作,也就只能写一个不能工作的字符设备;struct file_operations 结构域用来转载 2011-11-26 21:44:44 · 282 阅读 · 0 评论 -
Linux驱动编程 step-by-step (四)
似乎每一章介绍的内容比较少,但学习是一个循序渐进的过程,不在于一天学多少,重要的一天能真正的学懂多少,所以我主张一步一步来,从多个渠道去学习知识,实现互补。本节测试代码传到此处了:char_step1 大家可以下载测试一下。字符设备的注册与设备节点的自动创建cdev 结构内核内部使用struct cdev来表示一个字符设备struct cdev { struc转载 2011-11-26 21:48:33 · 303 阅读 · 0 评论 -
Linux驱动编程 step-by-step (五)
主要的文件操作方法实现文件操作函数有很多的操作接口,驱动编程需要实现这些接口,在用户编程时候系统调用时候会调用到这些操作view plaincopy to clipboardprint?struct file_operations { ... loff_t (*llseek) (struct file *, loff_t, int);转载 2011-11-26 21:50:23 · 263 阅读 · 0 评论 -
Linux驱动编程 step-by-step (六)
说点上节没有讲完的话题用户地址检测 简单模块调试 以及一些杂项检测用户空间地址的有效性上一节中提到在read write时候要检测用户空间传递的参数地址是否是有效地址,有的内核函数会自行检测,但是在调用轻量级的内核函数时候,就可能不去检测用户空间的地址是否有效,如果此时用户无传递一个无效地址,而内核函数去操作了它,这时棘手的问题出现了,轻则内核oops 关机重启就OK了,在特别严重转载 2011-11-26 21:52:21 · 371 阅读 · 0 评论 -
Linux驱动编程 step-by-step (七)
并发 竞态 (信号量与自旋锁)代码传至并发竞态控制并发进程 导致竞态的一个例子前面所述的字符驱动都是没有考虑并发竟态的情况,想象一下一个进程去读一个字符设备,另一个进程在同一时间向这个设备写入(完全有这种情况)原来设备中存有 A B C D 要想设备写入1 2 3 4 每次读写一个字节t1t2t3t4t5t6t7t8转载 2011-11-26 21:54:01 · 408 阅读 · 0 评论 -
Linux驱动编程 step-by-step (八)
阻塞型字符设备驱动前面说到了 如何实现read write 等操作,但如果设备缓冲已满,现在想而用户此时又想写入设备,此请求就无法立即执行,那怎么办呢?第一种情况是:驱动程序想用户返回请求失败的信息。第二种情况是:使调用进程阻塞等待设备可以被操作。而用户更希望自己选择在请求无法满足时候如何操作,所以在用户空间有了O_NONBLOCK标志在打开设备的时候如果用户指定了此标志(转载 2011-11-26 21:55:17 · 348 阅读 · 0 评论 -
Linux驱动编程 step-by-step (一)
第三次看了LDD3了(虽然现在已经是kernel3.0但从这本书商还是能学到很多) 每次都有一些收获 现在终于能够些一些代码了驱动程序的作用:简单来说 驱动程序就是使计算机与设备通信的特殊的代码,在作单片机时候(无OS)我们自己定义接口及自定义的结构来操作相关硬件,而在有OS的模式下我们操作的硬件是去实现对应的接口(这些接口是已定义好的,我们需要实现这些接口)而无需自己定义接口,这样既能正转载 2011-11-26 21:41:39 · 321 阅读 · 0 评论 -
Linux驱动编程 step-by-step (二)
简单字符设备驱动1、主次设备号主设备号标识设备连接的的驱动,此设备好由内核使用,标识在相应驱动下得对应的设备在linux中设备号是一个32位的dev_t类型typedef __u32 __kernel_dev_t;typedef __kernel_dev_t dev_t;crw------- 1 root root 10, 1 Apr 1转载 2011-11-26 21:43:42 · 303 阅读 · 0 评论