总结字符设备

Posted on 2015-02-16 18:16  Bumble_Bee  阅读(162)  评论(0编辑  收藏  举报

  今天来总结一下这几天字符设备驱动的学习吧。
  首先要明白这几天的学习是围绕哪些角色展开的。我认为主角有这三个:驱动程序、字符设备文件、用户应用程序。而这些角色的出场顺序应该也是这样:应该先有 驱动程序,然后有字符设备文件,最后才有用户应用程序。驱动程序要做的事情有这么几个:

  1、初始化好驱动,分到该分的东西:主设备号,cdev神马的,然 后再驻入内核。

  2、实现一套函数来接应从应用程序传过来的系统调用函数,没有接口的话应用程序拿设备也没辙。

  3、收尾工作,删除设备,释放设备号,不能一 直占着茅坑不拉屎。至此,驱动程序的任务就圆满完成了。接下来就该字符设备文件登场了,有设备名称,有设备数,有主设备号,建个字符设备文件就不成问题 了。其实他的任务就是方便用户应用程序来操纵驱动程序进而控制设备而已。然后就是用户应用程序了,接下来再反着讲回去应该更好理解。额咳咳:假如说用户应 用程序调用了一个read的内核系统调用函数下面就是read函数的一段旅程:read函数通过处理器执行一个svc指令来到一个固定的入口,从此进入了 内核,然后内核取到read函数的编号,查表得read函数原来是内核里面实现的sys_read。再去追查实现sys_read的代码可以查到一个 vfs_read函数,这个函数根据read函数的参数得到文件描述符fd,进而找到与打开文件关联的struct file 结构体,然后再查他的成员file_operations,就可以知道read函数在驱动程序里是个什么东西了,然后驱动在对具体设备进行操作。就这样, 我们的用户应用程序就完美的实现了通过字符设备文件对设备进行控制。过程就是这么个过程,分析清楚了感觉自己萌萌哒!
  睡觉!