关于linux驱动管理笔记

来源:互联网 发布:2017最新一手数据 编辑:程序博客网 时间:2024/05/29 11:10

前言

最近研究linux驱动,感觉有点心得,可是不够系统,但是我做应用的,基本了解原理,就已经足够了,这里主要讲解一些个人感悟,有机会写一些整体笔记,这里我还是记录下主要的看驱动的思路,可以让人更加快速的了解驱动的流程,加深记忆

正文

linux的所有东西都是以文件形式存在的,当然我们驱动也是这样出来的,基本文件当然是在文件系统,也就是硬盘中有一个目录项,让后存储所有目录,和文件。但是对于驱动,这种当然是靠注册来的,也就是我们通过一些特定的函数,吧我们文件挂在特定节点,比如、/dev/,/proc/之类的,这里我们暂时不要纠结挂在这个函数的如何实现,这个太难,我们只要知道在父目录中,也就是/dev/或者/proc/这里面试一个数据结构,里面有个队列,这些队列保存了所有的子目录,或者文件,这里我们只要在开机或者特定时候,直接添加到这个对列中,就好了。
但是有个问题,我们如何操作这些文件呢?你们会发现,当这是一个文件目录时候,我们需求显示所有的子文件,当是文件时候,我们需求显示内容,可是对于驱动呢?鼠标,网卡等等,我们需要一套特定的处理函数,这里也是我们需要挂入的,这里还算简单,我们最好的方法对于同一种介质,我们只用使用根目录的方法表即可。这里我们不用关注。
那么我们如何编写驱动呢,
这里我也不太懂,这里是用的是注册机制。貌似通过声明来注册,

module_init(你的init方法);module_exit(你的注销方法);

这里的注册方法需要一些特定的函数,吧file_ops方法函数注册进去,并且分出驱动号等等,这个file_ops里面有至少应该有open()和read(),write()方法,这里到底处理什么东西,当然是我们驱动的寄存器,可是我们只用挂入系统一些全局的东西,我们只用在内存中申请一片空间即可,log和binder就是这个道理。
在我们系统读取文件的时候,我们仅仅知道一个目录,可是我们通过目录,可以找到需要的目录项,刚才我们知道我们挂入的是一个目录项这里有操作函数列表,当我们open(path)的时候,首先找到path对应的目录项,然后调用方法列表中的open函数,这里我们有一个file的结构体。这里我们应该知道file_ops中open函数的参数其实就是你找到的结构体,这里记住呦!!

后记

这里很简单,但是道理就是这样。好多具体实现都没有写,有机会我在好好补充!!

0 0