
C/C++
文章平均质量分 95
jshazk1989
这个作者很懒,什么都没留下…
展开
-
两种描述瑞年的方法 以及由此引申的一些思考
/*看起来比较生硬*/int is_leap_year(int year){ if( ((year%400)==0) || ( ((year%4)==0) && ((year%100)!=0)) ) ) return 1;原创 2011-10-10 20:24:18 · 2933 阅读 · 0 评论 -
Linux驱动编程 step-by-step (四)
似乎每一章介绍的内容比较少,但学习是一个循序渐进的过程,不在于一天学多少,重要的一天能真正的学懂多少,所以我主张一步一步来,从多个渠道去学习知识,实现互补。本节测试代码传到此处了:char_step1 大家可以下载测试一下。字符设备的注册与设备节点的自动创建cdev 结构内核内部使用struct cdev来表示一个字符设备struct cdev { struc原创 2011-11-05 23:48:54 · 4320 阅读 · 5 评论 -
Linux驱动编程 step-by-step (十一)
Linux 内核链表(2)之前描述了如何创建内核链表(INIT_LIST_HEAD)向链表中添加节点(list_add)删除一个链表节点(list_del)获取一个链表节点对应的结构体(list_entry)等接下来会介绍几种操作替换一个链表节点,合并两个链表,将一个链表分成两段,遍历链表。替换链表节点替换节点很好理解,就是将新的节点替换老节点,将新的节点的对应的prev,ne原创 2012-06-05 14:47:08 · 3326 阅读 · 0 评论 -
Linux驱动编程 step-by-step (十)
终于可以清闲下来打理一下我的blog了,台资企业真的事情很多很烦……前几篇文章对字符设备有个简单介绍,并以简单的一个字符设备驱动作结尾,其实linux上大部分驱动程序都是字符设备程序,Linux源码中也可以看到很多的字符设备驱动,所以供学习的代码还是很多的。这一节本想说一下如何测试设备驱动,但是因为最近看了看内核链表,所以趁还记的比较清楚赶紧记录下来。有不到位的地方烦请指正。Lin原创 2012-03-15 13:39:16 · 2778 阅读 · 0 评论 -
Linux驱动编程 step-by-step (九)
字符设备模拟pipe的驱动程序让我们用一个”pipe“的设备驱动去结束简单字符设备吧(这里所说的pipe并非标准的pipe只是模拟了一个从一端写入从另一端写入的设备)测试代码1 测试代码2设计思路用一个图来说明(可是画了很久哟)简单说来就是一个进程写入缓冲区,另一个进程可以读出,读出后原buffer中的数据被置为无效值,自定义一个结构#defi原创 2011-11-29 23:17:13 · 3996 阅读 · 2 评论 -
Linux驱动编程 step-by-step (六)
说点上节没有讲完的话题用户地址检测 简单模块调试 以及一些杂项检测用户空间地址的有效性上一节中提到在read write时候要检测用户空间传递的参数地址是否是有效地址,有的内核函数会自行检测,但是在调用轻量级的内核函数时候,就可能不去检测用户空间的地址是否有效,如果此时用户无传递一个无效地址,而内核函数去操作了它,这时棘手的问题出现了,轻则内核oops 关机重启就OK了,在特别严重原创 2011-11-13 00:47:50 · 4126 阅读 · 3 评论 -
Linux驱动编程 step-by-step (五)
主要的文件操作方法实现文件操作函数有很多的操作接口,驱动编程需要实现这些接口,在用户编程时候系统调用时候会调用到这些操作struct file_operations { ... loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char __user *, size_t, lo原创 2011-11-11 00:35:40 · 8769 阅读 · 15 评论 -
Linux驱动编程 step-by-step (三)
字符设备中 重要的数据结构大部分字符驱动设计三个重要的数据结构struct file_operationsstruct filestruct inode 一、文件操作 在之前的一篇文章中已经有介绍了如何去生情字符设备设备号,但是没有做任何的工作,也就只能写一个不能工作的字符设备;struct file_operations 结构域用来原创 2011-11-05 16:11:31 · 4020 阅读 · 5 评论 -
Linux驱动编程 step-by-step (八)
阻塞型字符设备驱动前面说到了 如何实现read write 等操作,但如果设备缓冲已满,现在想而用户此时又想写入设备,此请求就无法立即执行,那怎么办呢?第一种情况是:驱动程序想用户返回请求失败的信息。第二种情况是:使调用进程阻塞等待设备可以被操作。而用户更希望自己选择在请求无法满足时候如何操作,所以在用户空间有了O_NONBLOCK标志在打开设备的时候如果用户指定了此标志(原创 2011-11-24 00:31:18 · 3476 阅读 · 0 评论 -
Linux驱动编程 step-by-step (七)
并发 竞态 (信号量与自旋锁)代码传至并发竞态控制并发进程 导致竞态的一个例子前面所述的字符驱动都是没有考虑并发竟态的情况,想象一下一个进程去读一个字符设备,另一个进程在同一时间向这个设备写入(完全有这种情况)原来设备中存有 A B C D 要想设备写入1 2 3 4 每次读写一个字节t1t2t3t4t5t6t7t8原创 2011-11-17 00:24:33 · 6820 阅读 · 4 评论 -
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-10-30 16:00:06 · 4902 阅读 · 9 评论