赞
踩
本人现在学习驱动,所写仅是笔记作用。
驱动,简单来说,就是沟通上层和物理层的中间媒介。
打个比方,上层想要打开个led灯,上层的想法就是:我调用了一个类似open_on()的API函数,就能明显看到开发板的灯就亮了。他不管底层是怎么实现的,他理所当然认为,是他调用这个API函数就足够完成LED灯亮的任务了。
下层呢,它只知道,初始化寄存器,配置输出模式,你给它写一个低电平(假设低电平亮),LED灯就亮了,你给它写一个写个高电平,它就灭了。
驱动的作用呢,就是给上层屏蔽下层的差异,无论你今天拿到的是什么板子,只需要调用的是同样的一个函数,LED灯就能够亮了(假如板子都有LED灯)。驱动接收上层的指令,转化成物理层认识的指令。完成驱动底层设备正常运行,这就是驱动存在的必要性。
说完了原理,说说驱动的实现代码逻辑(传统操作驱动的方法)。
1、分配/设置/注册file_operations
2、入口函数led_init()
3、出口函数led_exit()
4、module_init(led_init)
module_exit(led_exit)
5、申明遵循GPL协议MODULE_LICENSE("GPL")
以上5步是传统驱动的基本框架。搭好了上层和对下层的媒介,后面只需要往框架里面填补对物理成的具体操作和接受上层的数据处理这些逻辑即可。
之后呢,在file_oprations 结构体中的open、write、read等函数真正对物理层的操作。
至此,简单地实现了一个驱动。原理是这样,但其他的驱动程序和逻辑会比这个复杂很多。
参考资料,来自韦东山的个人博客
https://blog.csdn.net/thisway_diy/article/details/84336346
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。