Linux嵌入式驱动初体验(七)--- LED驱动之字符设备篇
来源:互联网 发布:美元指数软件 编辑:程序博客网 时间:2024/04/30 02:18
Linux中的设备可以分为三类:字符设备、块设备、网络设备,对于上一篇文章中的驱动编写的方法,是基于platform结构的,下面我们把它改变成字符设备的驱动编写模式,原理和方法基本是一样的,只是换了一个外壳而已。
首先还是看一下依照字符设备驱动编写所设计的数据结构:
很眼熟也很简单,对于后面的两个东西的定义,你可以理解成是我多此一举了,不过其实这只是因为这个设备比较简单的原因,如果是其他设备,led_dev_t里面的内容会更多的。对于cdev这个结构体大家可能不熟悉,我先贴出来给大家看看:
它在/include/linux/cdev.h中定义,其实也都是一些大家“喜闻乐见”的东西了。好了,下面我们就又要开始填充这些函数了:
其实只看上一篇文章就可以知道这些函数的实现原理和过程了,而且上面的这些函数写的更加简短了,因为我们的目的明确,而且“不拘小节”(就是忽略了一些除错处理,不要学我,呵呵。。。)。好了,其实上面也不是重点,它们还体现不出来我们在写一个字符驱动,真正能让我们有所区别的是init和exit的编写:
MKDEV,用来给设备分配设备号,然后使用register_chrdev_region来进行字符设备的注册,使用cdev_add向系统中添加这个字符设备,使用cdev_del删除字符设备,这些也都是系统中已经有的宏定义。
最后我再把代码的剩余部分贴出来:
不用说明,只是为了保持代码的完整性。当然,这还不是字符驱动开发的全部,我们还要有测试程序:
其实和上一篇的那个测试程序是一样的,只是更好看了一点。。。不过还有一点不同时体现在代码之外的,就是对于一个字符设备来说,它还需要一个/dev下的对应的结点文件,这个文件是自己手动加入的,而且重启开发板后,这个手动创建的文件就没有了,所以为了方便起见,我写了一个简单的shell脚本,在运行这个测试程序之前运行脚本文件,就可以了:
其中的248是我自己设置的主设备号,这个号码要和驱动程序中的LED_MAJOR保持一致,而且要保证这个主设备号是空闲的。
好了,一个LED的字符驱动就写好了,之所以写的比较简单,分析的比较少,是因为其实它们和上一篇的驱动是比较类似的,在那里已经做了比较详细的分析,这里只是说明了一下字符设备驱动的编写和platform体系驱动的编写的不同,两者可以达到同样的目的,只是platform有一些面向对象的感觉,更加有章法一些。现在的学习都是在学习方法,其实对于简单的事物,我们千万不要看不起它,如果我们可以很重视的把它解决,那么遇到难的问题,用同样的方法还是可以行得通的。综上所述吧,就是学会举一反三,有很多东西,解决的模式是一定的,而且是一样的,都有相通的地方,我们学习的时候就要抓住重点,学习方法,而不是只针对一个事物学习,这样就真的是要“活到老学到老了”。
- Linux嵌入式驱动初体验(七)--- LED驱动之字符设备篇
- linux设备驱动(一)---字符设备之led驱动
- 嵌入式Linux字符设备入门之--LED驱动详解
- Linux字符设备驱动之LED驱动
- 07-S3C2440驱动学习(一)嵌入式linux字符设备驱动-LED字符设备驱动
- 嵌入式Linux驱动开发(二)——字符设备驱动之控制LED
- Linux嵌入式驱动初体验(五)--- LED驱动解析
- 嵌入式Linux字符设备驱动LED驱动编写
- 嵌入式Linux字符设备驱动LED驱动编写
- linux字符设备驱动之LED
- Linux 字符设备驱动 LED
- 嵌入式Linux字符设备LED驱动-基于树莓派
- 字符设备驱动之LED-混杂设备驱动(misc)
- 字符设备驱动之LED
- Linux字符设备驱动之Tiny6410 LED驱动分析
- linux设备驱动篇之LED驱动(一)
- linux设备驱动篇之LED驱动(二)
- linux字符设备驱动-LED驱动
- 自定义WPF 窗口样式
- 下载
- 来自7-Eleven的十条管理经验
- QR Code
- Net Framework各版本(2)-vs2010添加引用页和CLR side-by-side的变化
- Linux嵌入式驱动初体验(七)--- LED驱动之字符设备篇
- 用C#复制文件到另一磁盘
- Linux酷命令
- CString,string,char*之间的转换
- JQuery 等价性
- Padding Oracle Attack,ASP.NET 最新安全漏洞
- 是时候该写点什么了...
- PeopleCode取组件缓冲区(Component Buffer)数据小结
- Android中Intent传递对象的两种方法(Serializable,Parcelable)