开干: 1.闲言碎语 这个驱动,越写觉的越简单,入门难,入门之后感觉还好.Linux开发还是比较友好的. 2.编写MPU6050带字符驱动的i2c从设备驱动 要实现的功能就是,将MPU6050作为字符驱动,在应用层,对其进行读数据.实现简单的功能.在前面的分析和实践中,可以看到实现字符驱动主要是实现file_operation中的方法,注册初始化cdev,让cdev和file_opration产生联系,字符驱动的初始化通过module_init来声明.实现i2c从设备驱动,主要是i2c_clie…
#include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/slab.h> #include <linux/mutex.h> #include <linux/workqueue.h> #include <linux/i2c.h> #include <linux/types.h> #incl…
[1:引言: linux字符设备驱动的基本编程流程] 1.实现模块加载函数  a.申请主设备号    register_chrdev(major,name,file_operations);  b.创建字符设备cdev,注册字符设备    cdev_alloc cdev_init cdev_add   c.创建设备文件    class_create device_create  d.注册中断    ret =request_irq(中断号,...,...,...,...);  e.映射   …
本文将简要地介绍Linux总线设备驱动模型及其实现方式,并不会过多地涉及其在内核中的具体实现,最后,本文将会以平台总线为例介绍设备和驱动程序的实现过程. 目录: 一.总线设备驱动模型总体介绍及其实现方式 1.总线设备驱动模型总体介绍 2.总线实现方式 (1):描述 (2):注册和卸载 3.设备实现方式 4.驱动实现方式 二.平台总线设备驱动 1.平台设备的实现方式 2.平台驱动的实现方式 3.平台总线驱动与设备匹配机制 三.按键实例 1.按键设备 2.按键驱动 一.总线设备驱动模型总体介绍及其实…
misc设备驱动.又称混杂设备驱动. misc设备驱动共享一个设备驱动号MISC_MAJOR.它在include\linux\major.h中定义:         #define MISC_MAJOR 10 miscdevice的结构体例如以下,它在include\linux\miscdevice.h中定义: struct  miscdevice {  int  minor;  const  char  *name;  const  struct file_operations  *fops;…
[ 导读] 本文通过阅读内核代码,来梳理一下I2C子系统的整体视图.在开发I2C设备驱动程序时,往往缺乏对于系统整体的认识,导致没有一个清晰的思路.所以从高层级来分析一下I2C系统的设计思路,将有助于设计调试具体的驱动程序. I2C/SMBUS基础 I2C是一种芯片间通讯总线技术,最早由Philips设计制定.下面内容参考I2C 2.1 规格书 半双工通信方式,通信采用主/从结构 支持多主模式,下图来源于I2C 2.0规格书 其内部电气实现采用集电极开路(Open-collector)/漏极开路…
字符设备 Linux中设备常见分类是字符设备,块设备.网络设备,其中字符设备也是Linux驱动中最常用的设备类型.因此开发Linux设备驱动肯定是要先学习一下字符设备的抽象的.在内核中使用struct cdev来描述一个字符设备如下 struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigne…
这里所说的复杂设备驱动涉及到PCI.USB.网络设备.块设备等(严格意义而言,这些设备在概念上并不并列,例如与块设备并列的是字符设备,而PCI.USB设备等都可能属于字符设备),这些设备的驱动中又涉及到一些与特定设备类型相关的较为复杂的数据结构和程序结构.本文将不对这些设备驱动的细节进行过多的介绍,仅仅进行轻描淡写的叙述. PCI 是The Peripheral Component Interconnect -Bus的缩写,CPU使用PCI桥chipset与PCI设备通信,PCI桥chipset…
[ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 按照ldd的说法,linux的设备驱动包括了char,block,net三种设备.char设备是比较简单的,只要分配了major.minor号,就可以进行读写处理了.相对而言,block和net要稍微复杂些.net设备姑且按下不谈,我们在以后的博文中会有涉及.今天,我们可以看看一个简单的block是怎么设计的. 为了将block和fs分开,kernel的设计者定义了request queue…
windows上面对usb复合设备的识别需要下面条件. “ 如果设备满足下列要求,则总线驱动程序还会报告 USB\COMPOSITE 的兼容标识符: 设备描述符的设备类字段 (bDeviceClass) 必须包含一个零值,或者设备描述符的类 (bDeviceClass).子类 (bDeviceSubClass) 和协议 (bDeviceProtocol) 字段必须分别具有值 0xEF.0x02 和 0x01,如 USB 接口关联描述符中所述. 设备必须具有多个接口. 设备必须具有一个配置.“ 引…