首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

I2C总线架构 之 设备驱动

添加硬件信息(设备树) b. 搭建驱动框架 c. 构建i2c_driver,并注册到linux i2c中 d. 注册字符设备 e. 向应用层提供i2c设备操作接口 f....主要分析对外接口的读写i2c设备操作: 在单片机的程序中,实现对i2c设备的读写,需要手动实现读写i2c寄存器,或者通过GPIO模拟i2c时序i2c设备通信。...而在Linux中,如何i2c设备的具体通信已经被封装成固定的API,在程序中填充这些API的数据参数调用即可,列举读写单个字节的实现: static int ap3216c_read_regs(struct...注销i2c设备 注销操作:在字符驱动出口函数中,卸载掉注册的i2c设备。这里调用i2c_del_driver即可实现,i2c_add_driver是对应的。...由于Linux内部的实现较为复杂,本篇主要以设备驱动的角度来分析整个驱动的代码走向,涉及到内部API的实现,本篇只大概介绍其功能,剩余部分会放在i2c核心继续分析。

1.8K70

Linux设备驱动程序(一)——设备驱动简介

前言 这一部分主要是用来介绍 Linux 设备驱动程序的一些基本概念,包括:Linux 设备驱动程序的作用、内核功能的划分、设备和模块的分类以及版本编号。...一、Linux 设备驱动程序的作用 设备驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作细节。...如同一个字符设备,每个块设备都通过一个文件系统结点被存取的,它们之间的区别对用户是透明的。块驱动和字符驱动相比,内核的接口完全不同。...内核网络设备驱动间的通讯字符和块设备驱动所用的完全不同。不用 read 和 write,内核调用和报文传递相关的函数。 有其他的划分驱动模块的方式,上面的设备类型是正交的。...通常,某些类型的驱动给定类型设备的其他层的内核支持函数一起工作。例如,你可以说 USB 模块,串口模块,SCSI 模块,等等。

78641
您找到你想要的搜索结果了吗?
是的
没有找到

linux 字符设备驱动

Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备设备驱动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。...应用程序使用内核提供的标准系统调用来内核中的驱动程序进行通讯,这些系统调用有: open(), read(), write(), ioctl(), close() 等等。...Linux设备的属性 设备的类型:字符设备、块设备、网络设备; 主设备号:标识设备对应的驱动程序。...进程通过文件描述符fd已打开文件的file结构相联系。 struct file 在中定义。 指向结构体struct file的指针通常命名为filp,或者file。...因为设备驱动模块并不自己直接填充结构体 file,只是使用file中的数据。 索引节点inode结构体 文件打开,在内存建立副本后,由唯一的索引节点inode描述。 file结构不同。

9.6K45

linux字符设备驱动

Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备设备驱动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。...应用程序使用内核提供的标准系统调用来内核中的驱动程序进行通讯,这些系统调用有: open(), read(), write(), ioctl(), close() 等等。...Linux设备的属性 设备的类型:字符设备、块设备、网络设备; 主设备号:标识设备对应的驱动程序。...进程通过文件描述符fd已打开文件的file结构相联系。 struct file 在中定义。 指向结构体struct file的指针通常命名为filp,或者file。...因为设备驱动模块并不自己直接填充结构体 file,只是使用file中的数据。 索引节点inode结构体 文件打开,在内存建立副本后,由唯一的索引节点inode描述。 file结构不同。

10.6K65

Linux系统驱动I2C协议

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 I2C协议 参考资料: i2c_spec.pdf 1....硬件连接 I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。 2....举例:主设备发送(8bit)给从设备 前8个clk 从设备不要影响SDA,从设备驱动三极管 主设备决定数据,主设备要发送1时不驱动三极管,要发送0时驱动三极管 第9个clk,由从设备决定数据...当它就绪后,就可以不再驱动三极管,这是上拉电阻把SCL变为高电平,其他设备就可以继续使用I2C总线了。 对于IIC协议它只能规定怎么传输数据,数据是什么含义由从设备决定。

2.8K20

Linux设备驱动之字符设备(二)

通过上一节Linux设备驱动字符设备(一)了解了Linux设备驱动的分类,设备号的构成,设备号的申请以及设备号的释放。 在Linux内核中使用struct cdev结构来代码字符设备。...struct kobject kobj 内核的内嵌对象,是Linux设备驱动模型的重要成员。...struct module *owner 字符设备驱动程序所在的内核模块指针 struct file_operations *ops 字符设备驱动程序文件操作函数集,是应用程序通过文件系统访问驱动的桥梁...该部分在后面Linux字符设备框架一节会详细分析,目前只要明白主要流程即可。 字符设备的注销 当驱动程序需要从系统卸载的时候,就需要使用cdev_del释放字符设备占用的内存。...目前为止,已经了解了设备号,设备号的构成,字符设备分配,字符设备的初始化,字符设备的注册以及字符设备的注销。将在下一节通过一个简单的字符设备驱动程序来再次熟悉整个流程,然后总结字符设备驱动的编写模型。

6K20

Linux设备驱动之字符设备(一)

Linux设备驱动的分类 从上图可以看到Linux系统将各异的设备分为三大类:字符设备,块设备和网络设备。内核针对每一类设备都提供了对应驱动模型架构,包括基本的内核设施和文件系统接口。...设备号的构成 主设备设备号 关于设备号,我们先通过如下的图来了解一下 从上图可以看出,c代表的是字符设备,d代码的是块设备。...主设备号用来标识对于的设备驱动程序,而次设备号则由驱动程序使用,用来标识它所管理的若干同类设备设备号的表示 在linux系统中,设备号用dev_t表示。这是个32位的无符号整数。...随着Linux系统的演变,上述的主次设备号的分发可能在将来会发生变化,所以设备驱动程序开发者应该避免直接使用主次设备号所占的位宽来获得对于的主设备号或次设备号。...,第一个参数form表示一个设备号,第二个参数count表示次设备的个数,也就是当前驱动程序所管理的同类设备的个数,第三个参数name表示设备或者驱动的名称。

7.1K52

Linux驱动开发: 块设备驱动开发

设备字符设备并列的概念, 这两类设备Linux驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是设备驱动相关的概念...在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。...但对于一些磁盘设备而言请求的速度很慢,这时候内核就提供一种队列的机制把这些I/O请求添加到队列中(即:请求队列),在驱动中用request_queue结构体描述。...编写块设备驱动时,使用的一些单位介绍: 1. 扇区(Sectors):任何块设备硬件对数据处理的基本单位。通常,1个扇区的大小为512字节。(对设备而言) 2....2.1 内核自带可参考的块设备驱动源码 drivers\block\z2ram.c drivers\block\xd.c \drivers\mmc\host\sdhci-s3c.c 2.2 块设备注册注销函数

31.8K30

【玩转ESP32】6、驱动i2c设备

前言:在上文中聊了i2c-tools,主要使用命令行,本文使用代码驱动设备。...本文以驱动oled展开,关于oled的详细说明,可查看一文彻底了解SSD1306驱动0.96寸OLED,在这里只聊esp32的i2c如何使用。...1、初始化 (1)配置i2c:指定i2c的引脚、模式、速率等; (2)安装i2c驱动:设置发送、接收缓冲,指定中断等; 这个代码基本是固定的,当做主机的时候都可以使用以下代码来初始化 static esp_err_t...(1)创建一个句柄 (2)产生起始信号 (3)写设备地址 (4)写数据 (5)结束信号 (6)主机发送命令,通知阻塞任务 (7)删除句柄 其中2、3、4、5属于标准i2c的流程,1、6、7属于esp32...(1)创建一个句柄 (2)产生起始信号 (3)写设备地址 (4)读数据 (5)结束信号 (6)主机发送命令,通知阻塞任务 (7)删除句柄 其中2、3、4、5属于标准i2c的流程,1、6、7属于esp32

1.7K20

Linux设备驱动模型-Bus

前言 在linux设备驱动模型中,总线可以看作是linux设备模型的核心,系统中的其他设备以及驱动都是以总线为核心围绕。不过驱动程序员在系统中创建一条总线的机会并不多。...驱动模型中的总线可以是真是存在的物理总线(USB总线,I2C总线,PCI总线),也可以是为了驱动模型架构设计出的虚拟总线(Platform总线)。...为此linux设备驱动模型都将围绕"总线--设备--驱动"来展开,因为符合linux设备驱动模型的设备驱动都是必须挂载在一个总线上的,无论是实际存在的或者虚拟的。....match: 当一个设备或者驱动添加到此总线上的时候,bus就会调用match对设备驱动一一匹配的。...p: 一个用来管理总线上设备驱动的数据结构。

3.8K20

Linux驱动框架杂项字符设备框架介绍

Linux驱动框架介绍 1.1 驱动框架分类 Linux驱动框架分为3大类型: 字符设备 --------- 块设备 存储设备 SD 硬盘 网络设备 网卡 无线 有线 字符设备和块设备都会生成设备节点在...、蜂鸣器 驱动都是使用字符设备框架编写 1.2 驱动框架代码模板 示例代码: #include #include static...杂项设备框架 2.1 框架结构介绍 杂项字符设备的主设备号固定: 10 主设备号: 0 ~ 255 次设备号范围: 0 ~ 255 Linux内核寻找驱动节点是依靠设备号寻找的。...在Linux内核的include\linux目录下有Miscdevice.h文件,misc设备定义及其内核提供的相关函数在这里。...文件操作集合的模型图: 2.2 蜂鸣器驱动示例代码 这是蜂鸣器的驱动层示例代码,使用杂项设备框架编写: #include #include <linux/module.h

3K30

Linux设备驱动详解

Linux系统一次读取磁盘的大小是一个块,而不是一个扇区,块设备驱动由此得名。 二、块设备处理过程 1、linux 内核中,块设备将数据存储固定的大小的块中,每个块都有自己的固定地址。...Linux内核中块设备和其他模块的关系如下。 ? 1、块设备的处理过程涉及Linux内核中的很多模块,下面简单描述之间的处理过过程。   ... ?...(Linux系统中,对块设备的IO请求,都会向块设备驱动发出一个请求,在驱动中用request结构体描述) 内核结构如下:. struct request { struct list_head queuelist...(也可以不用注册设备驱动一样可以工作,该函数和字符设备的register_chrdev()函数相对应,对于大多数的块设备,第一个工作就是相内核注册自己,但是在Linux2.6以后,register_blkdev

5.3K30
领券