/************************************************************************************ *本文为个人学习记录,如有错误,欢迎指正. *本文参考资料: * https://blog.csdn.net/qq_28992301/article/details/52410587 * https://blog.csdn.net/hanp_linux/article/details/79037610 ************…
1.何为misc设备 (1)misc中文名就是杂项设备\杂散设备,因为现在的硬件设备多种多样,有好些设备不好对他们进行一个单独的分类,所以就将这些设备全部归属于 杂散设备,也就是misc设备,例如像adc.buzzer等这些设备一般都归属于misc中. (2)需要注意的是,虽然这些设备归属于杂散设备中,但是其实你也可以不把设备放在这个类中,这都是驱动工程师按照自己的想法做的,你想把他们写在 misc类设备中也可以,自己单独建立一个类也是可以的,只不过是否标准化而已,因为人家既然建立了这个类,那你…
/* *本文版权归于凌阳教育.如转载请注明 *原作者和原文链接 http://blog.csdn.net/edudriver/article/details/18354313* *特此说明并保留对其追究法律责任的权利* */ 现实社会中存在着大量设备,各种设备有自己的工作方式以及硬件特性.但是如果每类设备(比如串口这类设备)都有自己不同的驱动框架的话,这无疑对驱动程序员来说是一个非常大的挑战.所以为了简化驱动程序员的工作,linux系统从千千万万设备中提取它们的共性,将这些设备分成3大类:字符设…
引子 Linux操作系统的一大优势就是支持数以万计的芯片设备,大大小小的芯片厂商工程师都在积极地向Linux kernel提交设备驱动代码.能让这个目标得以实现,这背后隐藏着一个看不见的技术优势:Linux内核提供了一套易于扩展和维护的设备驱动框架.Linux内核本身提供一套设备驱动模型,此模型提供了Linux内核对设备的一般性抽象描述,包括设备的电源管理.对象生命周期管理.用户空间呈现等等.在设备模型的帮助下,设备驱动开发工程师从设备的一般性抽象中解脱出来.但是每个设备的具体功能实现还需要大量…
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前言 <设计模式>这本经典的书里面定义了20多种设计模式,虽然都是面向对象的,似乎需要C++.Java这样的语言才能实现,但是根据笔者前面反复强调的,Linux内核虽然是用C语言和汇编语言写成,但是其实也到处充满了面向对象的设计.面向对象更多的是一种思想,而不是一个语言.我们可以用C语言实现极大的OO,Linux内核到处都有OO. 模…
platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则为platform_driver.Linux 2.6的设备驱动模型中,把I2C.RTC.LCD等都归纳为platform_device.总线将设备和驱动绑定,在系统每注册一个设备的时候,会寻找与之匹配的驱动:相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成. platform_match函数首先判断是否有id_table,如果有则使用id_table来进行匹配,否则,判断plat…
我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返回.而异步方式则正好相反,数据传输的发起者无需等待传输的结束,数据传输期间还可以做其它事情,用代码来解释就是,调用传输的函数后,函数会立刻返回而不用等待数据传输完成,我们只需设置一个回调函数,传输完成后,该回调函数会被调用以通知发起者数据传送已经完成.同步方式简单易用,很适合处理那些少量数据的单次传…
Linux与Windows的设备驱动模型对比 名词缩写: API 应用程序接口(Application Program Interface ) ABI 应用系统二进制接口(Application Binary Interface) 设备驱动是操作系统的一部分,它能够通过一些特定的编程接口便于硬件设备的使用,这样软件就可以控制并且运行那些设备了.因为每个驱动都对应不同的操作系统,所以你就需要不同的 Linux.Windows 或 Unix 设备驱动,以便能够在不同的计算机上使用你的设备.这就是为什…
驱动框架 通过使用platform设备驱动框架,实现led驱动与设备操作的分离.     我们关注led_drv里面的 struct platform_driver led_drv里面的.probe函数,当有同名的device注册到内核,将运行这个driver的probe函数(同名的:led_dev里面的struct platform_device led_dev里面的.name与 struct platform_driver led_drv里面的.name一一对应).     led_dev.…
通过第一篇文章,我们已经知道,整个SPI驱动架构可以分为协议驱动.通用接口层和控制器驱动三大部分.其中,控制器驱动负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能:1.    申请必要的硬件资源,例如中断,DMA通道,DMA内存缓冲区等等:2.    配置SPI控制器的工作模式和参数,使之可以和相应的设备进行正确的数据交换工作: 3.    向通用接口层提供接口,使得上层的协议驱动可以通过通用接口层访问控制器驱动: 4.    配合通用接口层,完成数据消息队列的排…