- 博客(63)
- 收藏
- 关注
原创 31.2linux中Regmap的API驱动icm20608实验(编程)_csdn
因为如果有多个从设备的话,难以处理多个设备实例的情况;会增加代码复杂度。用上面这个传递会使系统会在栈上创建该结构体的一个副本。这样的拷贝操作会带来额外的性能开销。==当然如果驱动代码全文没有用struct icm20608_dev icm20608dev这种形式的,就一定要为它分配内存!==这种形式已经是全局的结构体实例,指针dev直接指向它,无需额外分配内存。后面可以通过:通过指针变量来修改设备结构体的子类内容。
2025-06-08 22:39:23
982
原创 35.成功解决编写关于“江协科技”编写技巧第二期标志位积累的问题
大家可以看看:https://space.bilibili.com/383400717最后面给了一个未完成的任务:这里我已经把这个问题给解决了!总代码放在资源里面,key.c放在文章最后面!同时感兴趣的同学可以看看我的Linux驱动讲解!
2025-06-06 12:36:24
436
原创 34.1STM32下的can总线实现知识(区分linux)_csdn
我们以STM32F103C8T6为例实现基本的驱动!下面的主流通信协议在之前的文章中也讲过!可以明显看出遥控帧和数据帧的区别!遥控帧的RTR是1,数据帧的RTR是0,而且遥控帧没有数据段!如果有设备需要的话,首先接收方会发出一个遥控帧,遥控帧会包含报文ID,遥控帧也是广播式的,每个设备都能收到遥控帧,如果其中有个设备有这个ID的数据,那么这个设备就会把数据帧通过广播出来,然后真正需要的接收方就会收到数据。(适合使用频率低的数据传输)!:如果使用频率高,这种遥控帧请求式就不合适了!
2025-06-04 10:47:49
947
原创 28.成功解决i2c_transfer返回-6的问题并linux驱动mpu6050(适合一切linux学习者)
开发板:正点原子STM32MP157环境:ubuntu驱动目标:mpu6050解决思路:就是换等长的杜邦线就行!正点原子的STM32MP157板子上并没有mpu6050的模块!所以只能外接!涉及总代码会放在后面!对于代码的编写不会的宝子可以按照我之前的文章看看I2C的驱动知识和编程,评论区或者后台问我,会一一回答!这块板子只提供I2C4的外设接口并引脚引出:看上图就是I2C4 SCL PZ4和I2C4 SDA PZ5。看过我之前的同学就知道:我的pcf8563也是这个总线接口!但不影响!所
2025-05-07 15:55:58
714
原创 26.2Linux中SPI的驱动实验(编程)_csdn
因为如果有多个从设备的话,难以处理多个设备实例的情况;会增加代码复杂度。用上面这个传递会使系统会在栈上创建该结构体的一个副本。这样的拷贝操作会带来额外的性能开销。==当然如果驱动代码全文没有用struct icm20608_dev icm20608dev这种形式的,就一定要为它分配内存!==这种形式已经是全局的结构体实例,指针dev直接指向它,无需额外分配内存。后面可以通过:通过指针变量来修改设备结构体的子类内容。
2025-05-06 18:25:05
1015
原创 26.1Linux中SPI的驱动实验(知识)_csdn
其中尤为重要的就是I2C一般是最低位是读写标志位,SPI一般是最高位是读写标志位。类似像这样!不过有低位在前和高位在前的区别!
2025-05-06 17:17:21
341
原创 问题:成功解决/sys/bus/spi/devices/下没有spi设备的问题
当然,为了解决问题,这两天在网上翻阅了很多没有SPI设备的相似问题,都大同小异!有的是自己设计的开发板,需要添加SPI节点,有的是成品开发板,有的分析SPI控制器源码,比如SPI_master。对于自己掌握SPI开发有了一定的见识!看到这里,感觉大家是不是对于我这个问题很简单,一开始我没有找出问题所在,因为自己对与复制文件太自信了,所以太疏忽!成功解决/sys/bus/spi/devices/下没有spi设备的问题!但是我明明改了uImage和dtb文件!原来是我自己输错命令了!有了spi_stm32!
2025-05-06 16:10:37
302
原创 25.3linux中外置RTC芯片的PCF8563驱动代码(分析)_csdn
接下来我们对PCF8563驱动代码进行详细分析!没有结构体实例,所以要赋值实例并且申请内存!可以看到上面还用到client的中断。可以看到这个文件驱动已经注册!跟之前讲I2C架构一样,定义。
2025-05-04 10:02:42
417
原创 25.2linux中外置RTC芯片的PCF8563实验(测试)_csdn
也就是中断引脚并不需要配置pinctrl信息,它作为GPIO功能!而I2C4的两个引脚需要配置pinctrl信息!知道了这些引脚我们还是按照老习惯!目前我的开发板启动之后提示成功了!
2025-05-04 10:00:49
436
原创 22.2Linux的I2C驱动实验(编程)_csdn
因为如果有多个从设备的话,难以处理多个设备实例的情况;会增加代码复杂度。用上面这个传递会使系统会在栈上创建该结构体的一个副本。这样的拷贝操作会带来额外的性能开销。==当然如果驱动代码全文没有用struct ap3216c_dev ap3216cdev这种形式的,就一定要为它分配内存!==这种形式已经是全局的结构体实例,指针dev直接指向它,无需额外分配内存。后面可以通过:通过指针变量来修改设备结构体的子类内容。
2025-05-01 13:17:04
1219
原创 22.1Linux的I2C驱动实验(知识)_csdn
这上面的流程就是:1、初始化i2c_adapter 结构体变量;2、设置 i2c_algorithm 中的 master_xfer 函数;3、通过 i2c_add_numbered_adapter或i2c_add_adapter这两个函数向I2C子系统注册设置好的i2c_adapter;
2025-05-01 13:03:33
390
原创 21.1Linux中的LCD驱动实验(知识)_csdn
可以看到红、绿、蓝每个8位,还有一位是A7~A0就是透明通道,32位ARG8888。其中LCD_BL在设备镜像中没有添加,说明我们只需要4个,CLK\HSYNC\VSYNC\DE这4个就行。
2025-05-01 12:58:15
245
原创 20.2Linux的PWM驱动实验(编程自带代码)_csdn
可以看出 pwmchip0 对应的定时器寄存器起始地址为 0X44000000,根据示例代码 39.1.1.1 中的 timers1 节点,可以知道 TIM1 这个定时器的寄存器起始地址就是 0X44000000。注意,不能只屏蔽掉 PA10 的 pinctrl 配置信息,也要搜索一下“gpioa 10”,看看有没有哪里用到,用到的话也要屏蔽掉。这里我们可以发现,并没有详细讲PWM的驱动源代码怎么写,因为代码数量和联系的结构体太多了,所以我以后会单独讲PWM的驱动代码编写!
2025-04-22 15:39:48
997
原创 20.1Linux的PWM驱动实验(知识点)_csdn
PWM 是很常用到功能,我们可以通过 PWM 来控制电机速度,也可以使用 PWM 来控制LCD 的背光亮度。本章我们就来学习一下如何在 Linux 下进行 PWM 驱动开发。
2025-04-22 14:52:07
372
原创 18.2基于Linux的INPUT子系统实验(详细编写程序)_csdn
看正点原子的代码,并没有使用阻塞和非阻塞、异步通知。所以这里我们可以加或者不加,作用只是。
2025-04-22 14:35:02
723
原创 18.1基于Linux的INPUT子系统实验(知识)_csdn
在我看来,就是注册字符设备进行封装了。给了input子系统统一操作了。这就是核心层!
2025-04-22 14:19:24
680
原创 17.2Linux的MISC驱动实验(编程)_csdn
也就是设备结构体中的东西!1、首先配置设备结构体:2、配置miscdevice结构体:其中宏定义名字和次设备号:name 就是此 MISC 设备名字,当此设备注册成功以后就会在/dev 目录下生成一个名为 name的设备文件;fops 就是字符设备的操作集合, MISC 设备驱动最终是需要使用用户提供的 fops操作集合。然后一次性注册misc设备驱动:这里就可以实现/dev 目录下生成一个名为 name的设备。注册失败后打印:
2025-04-22 14:14:47
898
原创 17.1Linux的MISC驱动实验(知识)_csdn
变得更方便了:注意:是固定了主设备号为10,有些外设不好分类,为了解决linux下的设备号变得越来越紧张的情况!得越来越紧张的情况!
2025-04-22 14:07:06
136
原创 16.1Linux自带的LED灯驱动实验(知识)_csdn
可以看到结构中包含platform注册和注销两个定义了,说明只要执行module_platform_driver就完成了注册和注销!这就是一整套驱动的注册和注销!变的更方便了!
2025-04-05 21:25:56
352
原创 15.2linux设备树下的platform驱动编写(程序)_csdn
放心,我也是一步一步打的代码,不是复制粘贴!!!我们发现驱动文件不用再写地址映射了,是因为都在设备节点和pinctrl准备好了!跟之前一样申请IO即可,这里和以前的区别就是驱动的分离和分层,可以匹配多个设备!通过platform总线来匹配而已!
2025-04-05 17:26:49
1178
原创 15.1linux设备树下的platform驱动编写(知识)_csdn
platform 驱动框架分为总线、设备和驱动,其中总线不需要我们这些驱动程序员去管理,这个是 Linux 内核提供的,我们在编写驱动的时候只要关注于设备和驱动的具体实现即可。==在没有设备树的 Linux 内核下,我们需要分别编写并注册 platform_device 和 platform_driver,分别代表设备和驱动。==在使用设备树的时候,设备的描述被放到了设备树中,因此 platform_device 就不需要我们去编写了,我们只需要实现 platform_driver 即可。
2025-04-05 17:22:38
673
原创 14.2linux中platform无设备树情况下驱动LED灯(详细编写程序)_csdn
因为这跟之前的不一样,提出来驱动的分离和分层。提到驱动分离和分层,必然可以联系上一章咱们知道的驱动-总线-设备。在的状态下,必然要写寄存器地址,编写设备信息,所以这里我们要创建设备和驱动两个文件。本章实验我们需要编写一个驱动模块和一个设备模块,其中驱动模块是 platform 驱动程序,设备模块是 platform 的设备信息。当这两个模块都加载成功以后就会匹配成功,然后 platform驱动模块中的 probe 函数就会执行, probe 函数中就是传统的字符设备驱动那一套。
2025-04-05 17:19:58
935
原创 14.1linux中platform设备驱动实验(知识点)_csdn
前面我们讲了设备驱动的分离,并且引出了总线(bus)、驱动(driver)和设备(device)模型,比如 I2C、 SPI、 USB 等总线。在 SOC 中有些外设是没有总线这个概念的,但是又要使用总线、驱动和设备模型该怎么办呢?为了解决此问题, Linux 提出了platform 这个虚拟总线,相应的就有 platform_driver 和 platform_device。
2025-04-05 17:17:06
383
原创 13.2linux异步通知实验(详细编写程序)_csdn
这两者作用在后续内核中创建/dev/key。方便执行代码程序,传入到设备执行,关联设备号。
2025-04-03 10:50:25
928
原创 13.1linux异步通知实验(详细编写知识)_csdn
在前面使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的,对于非阻塞方式来说还需要应用程序通过 poll 函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知,报告自己可以访问,然后应用程序再从驱动程序中读取或写入数据,类似于中断。Linux 提供了异步通知这个机制来完成此功能,本章我们就来学习一下异步通知以及如何在驱动中添加异步通知相关处理代码。
2025-04-03 10:48:10
240
原创 12.1Linux阻塞和非阻塞IO详细知识点_csdn
这里的“IO”并不是我们学习单片机的时候所说的“GPIO” (也就是引脚)。这里的 IO 指的是,也就是输入/输出。应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO就会将应用程序对应的线程挂起,直到设备资源可以获取为止。对于非阻塞 IO,应用程序对应的线程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。应用程序调用 read 函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入到休眠态。
2025-03-24 10:18:40
726
原创 11.2linux中断实验(详细编写代码程序_csdn
这两者作用在后续内核中创建/dev/key。方便执行代码程序,传入到设备执行,关联设备号。
2025-03-21 10:56:09
998
原创 11.1linux中断实验知识讲解_csdn
比如 STM32MP1 系列总共分配了 265 个中断 ID(有很多并未使用,只是保留着),加上前面属于 PPI 和 SGI 的 32 个ID, STM32MP1 的中断源共有 256+32=288 个,这 288 个中断 ID 对应的中断源可以在《STM32MP157 参考手册》中找到详细的解释。我们重点关注的是从。
2025-03-21 10:53:15
868
原创 10.1linux内核定时器实验知识点讲解(详解)_csdn
本章我们就来学习一下 Linux 内核提供的定时器 API 函数,通过这些定时器 API 函数我们可以完成很多要求定时的应用。Linux内核也提供了短延时函数,比如微秒、纳秒、毫秒延时函数。Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。硬件定时器提供时钟源,时钟源的频率可以设置, 设置好以后就周期性的产生定时中断,系统使用定时中断来计时。,也叫做(tick rate)(有的资料也叫。
2025-03-15 17:22:55
869
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人