
Linux设备驱动开发
文章平均质量分 69
分析Linux设备驱动开发相关知识
HOLLOW_Q
这个作者很懒,什么都没留下…
展开
-
Linux设备驱动开发-I2C子系统
来看看数据传输,这里 调用i2c_transfer 传输所有的 msg,对于读取数据的传输,在传输完后还需要把得到的数据拷贝回用户空间,这里i2c_transfer 就是和 adapter 打交道了。地址是通过unlocked_ioctl 来进行也就是i2cdev_ioctl,I2C_SLAVE/I2C_SLAVE_FORCE 设置 client 的地址。在 open 设备节点的时候调用i2cdev_open,这里会通过次设备号获取到 adapter(i2c 控制器)来看看内核中的 i2c 控制器驱动。原创 2025-02-23 22:46:34 · 269 阅读 · 0 评论 -
Linux设备驱动开发-UART驱动
UART 有三条线,分别是 Rx,Tx 和 GND数据发送接收步骤:1.双方约定波特率2.拉低(从高电平) Tx 引脚维持 1bit 时间3.接收端在低电平开始处计时4.发送端根据数据驱动 Tx 引脚电平5.接收端 1.5bit 时间后读取引脚状态(前面有一个开始位)6.bit8 是可选的校验位(可分为奇校验和偶校验)7.发送停止位(可以约定停止位占据多少时间)原创 2025-02-23 14:24:49 · 975 阅读 · 0 评论 -
Linux设备驱动开发-GPIO子系统使用详解
可以通过gpiod_direction_output 设置引脚方向,这里设置的是逻辑值,如果引脚被设置为GPIO_ACTIVE_HIGH 那么 1 就是设置高电平,如果是GPIO_ACTIVE_LOW 的话 1 就是低电平。这里使用前缀获取,0 表示是第 0 个引脚也就是gpio3 RK_PC5 这个引脚,这里在设备树中用逗号隔开写多个引脚。在使用 GPIO 子系统之前可以通过 Pinctrl 子系统将引脚配置为 GPIO 模式。可以使用 gpiod_get_index 获取引脚。以下面设备树代码为例。原创 2025-02-23 12:31:17 · 406 阅读 · 0 评论 -
Linux设备驱动开发-Pinctrl子系统使用详解
以这个段设备树代码为例,这里有normal 和idle 两种模式,normal 对应pinctrl-0,idle 对应pinctrl-1。一般引脚前面会有 IOMUX 连接各种功能,通过IOMUX 来指定引脚具体连接什么功能。来看一个引脚控制,可以看到这里配置了引脚功能为 gpio,并且进行了下拉。当设备切换状态时系统就会根据设备树去切换引脚状态。这段设备树片段称为 controller。Pinctrl 就是用来控制引脚的。写代码时可以通过这些函数来控制状态。pinctl 通过状态来控制引脚。原创 2025-02-23 11:33:49 · 522 阅读 · 0 评论 -
Linux设备驱动开发-PCI/PCIE
PCI 地址线和数据线是复用的,通过 frame 引脚电平区分,frame 信号为低的话第一个时钟传输地址,后续传输数据,一开始的时候通过 IDSEL(与 AD 引脚连接) 引脚区分设备,选中设备的IDSEL 就可以配置设备了,设备的访问是通过桥来实现的。首先需要 HOST 驱动(识别 pci_dev,pci_dev 可能是桥,桥下面也会有pci_dev),针对 EP 也就是pci_dev 我们需要提供驱动程序并向内核注册,注册之后会在 pci 总线上匹配,报文的配置是通过寄存器来进行的。原创 2025-02-23 10:17:42 · 2022 阅读 · 0 评论 -
Linux设备驱动开发-SPI驱动开发详解(包含设备树处理详细过程)
引脚:MISO(master 输入,slave 输出),MOSI(master 输出,slave 输入),片选引脚,SCK(时钟)控制寄存器:可以设置这CPOL 和 CPHA两个参数,CPOL 代表 SCK 初始电平,CPHA 代表相位(第一/第二个时钟沿采集数据),SPI 状态寄存器:分辨数据是否发送完了,使能中断波特率寄存器:设置 SCK 频率数据寄存器:连接移位器收发数据。原创 2025-02-22 20:50:08 · 2193 阅读 · 0 评论