
Linux驱动开发及设备树
文章平均质量分 79
Linux驱动开发
uleemos
这个作者很懒,什么都没留下…
展开
-
Linux USB host driver 枚举前的源码分析
当我们插上USB设备,系统会根据电平信号的变化,检测到新设备的接入,接着获取USB设备、配置、接口、端点的数据,并创建新设备。原创 2024-04-07 20:30:20 · 868 阅读 · 1 评论 -
IIC (三) -- I2C系统驱动程序模型
通过i2c_bus_type中i2c_device_match函数,依次比较设备树,id_table将两者绑定起来,若比较成功,接着调用i2c_device_probe函数进行注册。可以参考I2C驱动程序的层次,而函数之间的调用关系为i2c_register_driver->driver_register(&driver->driver)->driver_find。i2c_driver跟i2c_client匹配成功后,就调用i2c_driver.probe函数。所以这里主要介绍一下这几个重要函数的作用。原创 2023-07-02 18:57:06 · 790 阅读 · 1 评论 -
IIC (二) -- SMBus协议和基础知识介绍
与上面读数据类似,主机会先发送8bit的command code,在没有P信号的同时,再次发送一个读data的信号。向从设备发送一个字节,从设备地址通过7bit 的address体现,Wr为写数据,A为ack响应位,响应位通过从设备回复。SMBus连续读多个字节数据,和连续写类似,先发送command code,主机先读到一个字节为N的字节数信息,然后读取全部数据信息。从上图的关系可以看出SMBus是基于I2C协议的,SMBus要求更严格,SMBus是I2C协议的子集。而是直接开始数据的传输。原创 2023-07-01 15:50:56 · 18173 阅读 · 0 评论 -
IIC (一) -- 协议和基础知识介绍
这是主机会在SCL第九个时钟来的时候,读取SDA,若此时为低电平,则认为收到了ACK,否则为NACK。5.如果,主机想要在接下来发送一个停止位信号,主机会在SCL为低的时间内将SDA拉低,再拉高,再SCL为高的时候将SDA释放。当主机读取从机发送来的数据时,SCL时钟线依旧由主机控制,从机负责SCL时钟信号为高电平时,将数据发送到总线上。主机在总线上发起数据,主机负责SCL和SDA信号的控制,从机只负责在SCL为高电平的时候,读取SDA的信号。总之,SCL由主机控制,SDA是双向的,主机和从机都可以控制。原创 2023-06-19 01:19:27 · 569 阅读 · 0 评论 -
SPI (四) -- spi_sync和spi_async的调用流程
内核版本:4.9.88前面我们分析了总线驱动模型,同时分析了如何编写设备驱动。只从上层使用角度去分析。因为内核的spi代码里已经提供好了相应的函数框架供我们使用,这里看一下最核心的两个函数spi_sync和spi_async。原创 2023-06-17 01:41:03 · 5237 阅读 · 0 评论 -
SPI (三) -- 如何编写SPI设备驱动程序
上面将函数读写的上下层调用关系简单说明,其中,有个重要的数据结构,就是 struct spi_message *message。spi_message中存放的transfer链表,是由多个spi_transfer结构体组成,链表通过上图中的spi_message_add_tail函数,将传输的buff放入链表尾部。函数,对应的是异步的SPI传输函数,简单地说就是这个函数即刻返回,它返回后SPI传输不一定已经完成。,这是一个同步、阻塞的SPI传输函数,返回要么成功,要么失败。函数最终返回时,调用了。原创 2023-06-14 23:49:45 · 3176 阅读 · 0 评论 -
SPI (二) -- SPI总线设备驱动模型
下图来自韦东山SPI总线设备驱动模型的图示,清晰的介绍了SPI设备和SPI控制器之间的关联。Linux中使用spi_master结构体描述SPI控制器,里面最重要的成员就是。SPI子系统中根据主从控制的方式,有两类设备,SPI控制器和SPI设备。SPI控制器有驱动程序,提供SPI的传输能力。原创 2023-06-13 02:07:32 · 782 阅读 · 0 评论 -
Linux驱动开发 -- input子系统
input子系统介绍input设备应用层编程实践input 子系统源码分析坑待填原创 2023-05-23 01:47:46 · 80 阅读 · 1 评论