驱动
文章平均质量分 94
以正点原子STM32MP1开发板为硬件基础,参考正点原子官方文档、驱动源码及其他参考资料。
DA01
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux驱动-Regmap子系统
Linux下大部分设备的驱动开发都是操作其内部寄存器,比如I2C/SPI设备的本质都是一样的,通过I2C/SPI接口读写芯片内部寄存器。芯片内部寄存器也是同样的道理,比如STM32MP157的PWM、TIM等外设初始化,最终都是要落到寄存器的设置上。Linux下使用i2c_transfer来读写I2C设备中的寄存器,SPI接口的话使用spi_write/spi_read等。I2C/SPI芯片又非常的多,因此Linux内核里面就会充斥了大量的i2c_transfer这类的冗余代码,再者,代码的复用性也会降低。原创 2026-03-28 14:06:41 · 346 阅读 · 0 评论 -
Linux驱动-SPI总线及I2C总线对比
【代码】Linux驱动-SPI总线及I2C总线对比。原创 2026-03-28 10:05:53 · 241 阅读 · 0 评论 -
Linux驱动-SPI总线驱动
SPI,SPI全称是Serial Perripheral Interface,也就是串行外围设备接口。SPI是Motorola公司推出的一种同步串行接口技术,是一种高速、全双工的同步通信总线,SPI时钟频率相比I2C要高很多,最高可以工作在上百MHz。CS/SS,Slave Select/Chip Select,这个是片选信号线,用于选择需要进行通信的从设备。I2C主机是通过发送从机设备地址来选择需要进行通信的从机设备的,SPI主机不需要发送从机设备,直接将相应的从机设备片选信号拉低即可;原创 2026-03-28 10:02:52 · 376 阅读 · 0 评论 -
Linux驱动-I2C总线驱动
I2C是一种很常见的同步、串行、低速、近距离通信接口。Linux内核开发者为了让驱动开发工程师在内核中方便的添加自己的I2C设备驱动程序,更容易的在linux下驱动自己的I2C接口硬件,进而引入了I2C总线框架。与Linux下的platform虚拟总线不同的是,I2C是实际的物理总线,所以I2C总线框架也是Linux下总线、设备、驱动模型的产物。I2C是很常见的一种总线协议,I2C是NXP公司设计的,I2C使用两条线在主控制器和从机之间进行数据通信。原创 2026-03-27 20:29:22 · 398 阅读 · 0 评论 -
Linux驱动-设备树(DTS)下的platform设备驱动
上述设备驱动的分离引出了总线(bus)、驱动(driver)和设备(device)模型,比如I2C、SPI、USB等总线。在SOC中有些外设是没有总线这个概念的,但是又要使用总线、驱动和设备模型该怎么办呢?为了解决此问题,Linux提出了platform这个虚拟总线,相应的就有platform_driver和platform_device。platform驱动框架分为总线、设备和驱动,其中总线不需要驱动程序员去管理,这个是Linux内核提供的,在编写驱动的时候只要关注于设备和驱动的具体实现即可。原创 2026-03-26 18:44:48 · 383 阅读 · 0 评论 -
Linux驱动-异步通知,阻塞IO-非阻塞IO-异步通知小结
异步通知机制在Linux驱动开发中的应用原创 2026-03-26 13:16:29 · 341 阅读 · 0 评论 -
Linux驱动-阻塞IO与非阻塞IO
阻塞IO、非阻塞IO、等待队列,驱动poll函数原创 2026-03-26 10:29:53 · 343 阅读 · 0 评论 -
Linux驱动-中断
每个中断都有一个中断号。在Linux内核中使用一个int变量表示中断号。在Linux内核中要想使用某个中断是需要申请的,request_irq函数用于申请中断,request_irq函数可能会导致睡眠,因此不能在中断上下文或者其他禁止睡眠的代码段中使用request_irq函数。request_irq函数会激活(使能)中断,所以不需要手动去使能中断。request_irq和free_irq////// \brief request_irq 申请中断/// \param irq 要申请中断的中断号。原创 2026-03-25 21:08:20 · 405 阅读 · 0 评论 -
Linux驱动-并发与竞争
信号量是同步的一种方式。Linux内核也提供了信号量机制,信号量常常用于控制对共享资源的访问。举一个很常见的例子,某个停车场有100个停车位,这100个停车位大家都可以用,对于大家来说这100个停车位就是共享资源。假设现在这个停车场正常运行,你要把车停到这个这个停车场肯定要先看一下现在停了多少车了?还有没有停车位?当前停车数量就是一个信号量,具体的停车数量就是这个信号量值,当这个值到100的时候说明停车场满了。原创 2026-03-25 15:05:15 · 335 阅读 · 0 评论 -
Linux驱动-pinctrl子系统和gpio子系统
Linux驱动讲究驱动分离与分层,pinctrl和gpio子系统就是驱动分离与分层思想下的产物,驱动分离与分层其实就是按照面向对象编程的设计思想而设计的设备驱动框架。大多数SOC的pin都是支持复用的,比如STM32MP1的PI0既可以作为普通的GPIO使用,也可以作为SPI2的NSS引脚、TIM5的CH4引脚等等。此外还需要配置pin的电气特性,比如上/下拉、速度、驱动能力等等。传统的配置pin的方式就是直接操作相应的寄存器,但是这种配置方式比较繁琐、而且容易出问题(比如pin功能冲突)。原创 2026-03-25 11:39:52 · 390 阅读 · 0 评论 -
Linux设备树,DTS、DTB浅析
设备树(Device Tree),描述设备设备树的文件叫做DTS(Device Tree Source),DTS文件采用了树形结构来描述板机设备,也就是开发板信息,比如CPU数量、内存基地址、IIC接口上接了那些设备、SPI 接口上接了那些设备等。在下图片中,树的主干就是系统总线,IIC控制器、SPI控制器等都是接到系统主线的分支上的。通过DTS这个文件描述设备信息是有相关的语法规则的,并且在Linux内核中只有3.x版本以后的才支持设备树。原创 2026-03-24 23:36:47 · 423 阅读 · 0 评论 -
Linux驱动-字符设备驱动-含测试代码
字符设备是Linux驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如最常见的点灯、按键、 IIC、 SPI、LCD等等都是字符设备,这些设备的驱动就叫做字符设备驱动。在详细的学习字符设备驱动架构之前,先来简单的了解一下Linux下的应用程序是如何调用驱动程序的, Linux应用程序对驱动程序的调用如图所示:在Linux中一切皆为文件,驱动加载成功以后会在/dev目录下生成一个相应的文件,应用程序通过对这个名为/dev/xxx。原创 2026-03-24 18:31:37 · 366 阅读 · 0 评论
分享