- 博客(37)
- 收藏
- 关注
原创 16.1Linux自带的LED灯驱动实验(知识)_csdn
可以看到结构中包含platform注册和注销两个定义了,说明只要执行module_platform_driver就完成了注册和注销!这就是一整套驱动的注册和注销!变的更方便了!
2025-04-05 21:25:56
271
原创 15.2linux设备树下的platform驱动编写(程序)_csdn
放心,我也是一步一步打的代码,不是复制粘贴!!!我们发现驱动文件不用再写地址映射了,是因为都在设备节点和pinctrl准备好了!跟之前一样申请IO即可,这里和以前的区别就是驱动的分离和分层,可以匹配多个设备!通过platform总线来匹配而已!
2025-04-05 17:26:49
903
原创 15.1linux设备树下的platform驱动编写(知识)_csdn
platform 驱动框架分为总线、设备和驱动,其中总线不需要我们这些驱动程序员去管理,这个是 Linux 内核提供的,我们在编写驱动的时候只要关注于设备和驱动的具体实现即可。==在没有设备树的 Linux 内核下,我们需要分别编写并注册 platform_device 和 platform_driver,分别代表设备和驱动。==在使用设备树的时候,设备的描述被放到了设备树中,因此 platform_device 就不需要我们去编写了,我们只需要实现 platform_driver 即可。
2025-04-05 17:22:38
591
原创 14.2linux中platform无设备树情况下驱动LED灯(详细编写程序)_csdn
因为这跟之前的不一样,提出来驱动的分离和分层。提到驱动分离和分层,必然可以联系上一章咱们知道的驱动-总线-设备。在的状态下,必然要写寄存器地址,编写设备信息,所以这里我们要创建设备和驱动两个文件。本章实验我们需要编写一个驱动模块和一个设备模块,其中驱动模块是 platform 驱动程序,设备模块是 platform 的设备信息。当这两个模块都加载成功以后就会匹配成功,然后 platform驱动模块中的 probe 函数就会执行, probe 函数中就是传统的字符设备驱动那一套。
2025-04-05 17:19:58
804
原创 14.1linux中platform设备驱动实验(知识点)_csdn
前面我们讲了设备驱动的分离,并且引出了总线(bus)、驱动(driver)和设备(device)模型,比如 I2C、 SPI、 USB 等总线。在 SOC 中有些外设是没有总线这个概念的,但是又要使用总线、驱动和设备模型该怎么办呢?为了解决此问题, Linux 提出了platform 这个虚拟总线,相应的就有 platform_driver 和 platform_device。
2025-04-05 17:17:06
219
原创 13.2linux异步通知实验(详细编写程序)_csdn
这两者作用在后续内核中创建/dev/key。方便执行代码程序,传入到设备执行,关联设备号。
2025-04-03 10:50:25
899
原创 13.1linux异步通知实验(详细编写知识)_csdn
在前面使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的,对于非阻塞方式来说还需要应用程序通过 poll 函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知,报告自己可以访问,然后应用程序再从驱动程序中读取或写入数据,类似于中断。Linux 提供了异步通知这个机制来完成此功能,本章我们就来学习一下异步通知以及如何在驱动中添加异步通知相关处理代码。
2025-04-03 10:48:10
217
原创 12.1Linux阻塞和非阻塞IO详细知识点_csdn
这里的“IO”并不是我们学习单片机的时候所说的“GPIO” (也就是引脚)。这里的 IO 指的是,也就是输入/输出。应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO就会将应用程序对应的线程挂起,直到设备资源可以获取为止。对于非阻塞 IO,应用程序对应的线程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。应用程序调用 read 函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入到休眠态。
2025-03-24 10:18:40
697
原创 11.2linux中断实验(详细编写代码程序_csdn
这两者作用在后续内核中创建/dev/key。方便执行代码程序,传入到设备执行,关联设备号。
2025-03-21 10:56:09
972
原创 11.1linux中断实验知识讲解_csdn
比如 STM32MP1 系列总共分配了 265 个中断 ID(有很多并未使用,只是保留着),加上前面属于 PPI 和 SGI 的 32 个ID, STM32MP1 的中断源共有 256+32=288 个,这 288 个中断 ID 对应的中断源可以在《STM32MP157 参考手册》中找到详细的解释。我们重点关注的是从。
2025-03-21 10:53:15
838
原创 10.1linux内核定时器实验知识点讲解(详解)_csdn
本章我们就来学习一下 Linux 内核提供的定时器 API 函数,通过这些定时器 API 函数我们可以完成很多要求定时的应用。Linux内核也提供了短延时函数,比如微秒、纳秒、毫秒延时函数。Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。硬件定时器提供时钟源,时钟源的频率可以设置, 设置好以后就周期性的产生定时中断,系统使用定时中断来计时。,也叫做(tick rate)(有的资料也叫。
2025-03-15 17:22:55
846
原创 10.2linux内核定时器实验(详细编程)_csdn
这两者作用在后续内核中创建/dev/timer。方便执行代码程序,传入到设备执行,关联设备号。
2025-03-15 17:03:35
1100
原创 9.linux按键输入实验(详细编写程序_csdn
这两者作用在后续./dev/key 1/0中创建/dev/key。方便执行代码程序,传入到设备执行,关联设备号。
2025-03-12 10:21:43
571
原创 8.5linux竞争与并发驱动LED灯(互斥体实验)_csdn
这两者作用在后续./dev/beep 1/0中创建/dev/beep。方便执行代码程序,传入到设备执行,关联设备号1.添加pinctrl信息。2.检查当前设备树中要使用的IO有没有被其他设备使用,如果有的话要处理。3.添加设备节点,在设备节点中创建一个属性,吃属性描述所使用的gpio。4.编写驱动,获取对应的gpio编号,并申请IO,成功后即可使用此IO。申请失败绝大部分情况是被其他外设给占用了!!!这种情况在根节点或者设备树检查一下pinctrl复用情况。加油!!!
2025-03-10 15:27:51
672
原创 8.4linux竞争与并发驱动LED灯(信号量实验)_csdn
这两者作用在后续./dev/beep 1/0中创建/dev/beep。方便执行代码程序,传入到设备执行,关联设备号1.添加pinctrl信息。2.检查当前设备树中要使用的IO有没有被其他设备使用,如果有的话要处理。3.添加设备节点,在设备节点中创建一个属性,吃属性描述所使用的gpio。4.编写驱动,获取对应的gpio编号,并申请IO,成功后即可使用此IO。申请失败绝大部分情况是被其他外设给占用了!!!这种情况在根节点或者设备树检查一下pinctrl复用情况。加油!!!
2025-03-10 11:43:41
817
原创 8.3linux竞争与并发(自旋锁实验)_csdn
这两者作用在后续./dev/beep 1/0中创建/dev/beep。方便执行代码程序,传入到设备执行,关联设备号1.添加pinctrl信息。2.检查当前设备树中要使用的IO有没有被其他设备使用,如果有的话要处理。3.添加设备节点,在设备节点中创建一个属性,吃属性描述所使用的gpio。4.编写驱动,获取对应的gpio编号,并申请IO,成功后即可使用此IO。申请失败绝大部分情况是被其他外设给占用了!!!这种情况在根节点或者设备树检查一下pinctrl复用情况。加油!!!
2025-03-09 12:00:22
803
原创 8.2linux竞争与并发驱动LED灯(原子操作实验)_csdn
这两者作用在后续./dev/beep 1/0中创建/dev/beep。方便执行代码程序,传入到设备执行,关联设备号1.添加pinctrl信息。2.检查当前设备树中要使用的IO有没有被其他设备使用,如果有的话要处理。3.添加设备节点,在设备节点中创建一个属性,吃属性描述所使用的gpio。4.编写驱动,获取对应的gpio编号,并申请IO,成功后即可使用此IO。申请失败绝大部分情况是被其他外设给占用了!!!这种情况在根节点或者设备树检查一下pinctrl复用情况。加油!!!
2025-03-09 10:06:06
927
原创 8.1linux竞争与并发知识讲解(尽可能详细)_csdn
打印机必须保证一次只能打印一份文档,只有打印完成以后才能打印其他的文档。临界区就是共享数据段,对于临界区必须保证一次只有一个线程访问。也就是要保证临界区是原子访问的,注意这里的==“原子==”不是正点原子的“原子”。我们都知道,原子是化学反应不可再分的基本微粒,这里的原子访问就表示这一个访问是一个步骤不能再进行拆分。如果多个线程同时操作临界区就表示存在竞争,我们在编写驱动的时候一定要注意避免并发和防止竞争访问。重点。
2025-03-09 10:03:27
1042
原创 7.linux蜂鸣器实验(详细编写程序步骤)
这两者作用在后续./dev/beep 1/0中创建/dev/beep。1.添加pinctrl信息。2.检查当前设备树中要使用的IO有没有被其他设备使用,如果有的话要处理。3.添加设备节点,在设备节点中创建一个属性,吃属性描述所使用的gpio。4.编写驱动,获取对应的gpio编号,并申请IO,成功后即可使用此IO。申请失败绝大部分情况是被其他外设给占用了!!!这种情况在根节点或者设备树检查一下pinctrl复用情况。加油!!!
2025-03-06 11:15:28
4479
原创 6.2基于pinctrl与gpio子系统驱动LED灯实验
其中定义owner和结构体内的owner都是module模块的,一般来说是THIS_MODULE;name就是设备名字。1.添加pinctrl信息。2.检查当前设备树中要使用的IO有没有被其他设备使用,如果有的话要处理。3.添加设备节点,在设备节点中创建一个属性,吃属性描述所使用的gpio。4.编写驱动,获取对应的gpio编号,并申请IO,成功后即可使用此IO。申请失败绝大部分情况是被其他外设给占用了!!!这种情况在根节点或者设备树检查一下pinctrl复用情况。加油!!!
2025-03-03 18:44:17
801
原创 6.1pinctrl和gpio子系统知识讲解
第 1815~1816 行, address-cells 属性值为 1 和#size-cells 属性值为 1,也就是说 pinctrl 下的所有子节点的 reg 第一位是起始地址,第二位为长度。第 1818 行, ranges 属性表示 STM32MP1 的 GPIO 相关寄存器起始地址, STM32MP1 系列芯片最多拥有 176 个通用 GPIO,分为 12 组,分别为: PA0~PA15、 PB0~PB15、 PC0PZ7。
2025-03-03 18:01:01
924
原创 9.51核心板绘制
电源部分选择6P的typec接口,仅供电。PCB绘制:将原理图转换为PCB时:1:添加板框层。宽和高不要超过100mm,不然免费打板要收费!添加圆角:不伤手!滤波电容的放置是先放小放大!电源需要经过小的滤波电容,再经过大的滤波电容!3D视图进行布线操作!细节要求!开始布线!1.先把电源线gnd隐藏2.接下来进行对信号线进行布线,单片机的IO口。下面对晶振进行布线,晶振是高速的。所以要等长的信号线,需要用差分对网络进行布线!
2025-02-28 15:40:14
365
原创 5.设备树下的 LED 驱动实验
我会把这部分比上一个博客多的·部分·标出来!获取compatible属性内容。获取 status 属性内容。dtsled设备结构体。
2025-02-11 18:52:46
1010
原创 3.Linux新字符设备驱动实验-新驱动框架的搭建
我们之前用的register_chrdev函数注册字符设备,当不再使用设备的时候就使用unregister_chrdev 函数注销字符设备。这里注册了主设备号,宏定义200,次设备号默认为0,但是编译的时候把后面的次设备号全部占用了,仅仅用于点亮和熄灭LED灯,没有用到其他的次设备号(1~2^20-1)太浪费了!解决办法:需要使用设备号的时候向Liunx内核申请,需要几个申请几个。申请主设备号和次设备号(这就不会浪费设备号了)
2025-02-10 10:59:31
878
原创 5.成功解决STM32MP157开发板与windows利用Filezilla无法通过FTP互传问题
本人在学正点原子的时候发现STM32MP157在测试根文件系统的时候,无法通过windows的Fileilla的FTP协议互传。我看b站的弹幕也有很多人有这个问题!!!我用的是一条网线,一端连接电脑的转接口,另一端接开发板的网口!!!用手机热点提供网络,当然有条件的可以用路由器哦。
2025-01-31 14:48:23
360
原创 4.手机开热点实现电脑和开发板(STM32MP157)连接ping通
当然大家可以用DHCP服务器来解决这个问题,用的是手机热点,IP和DNS都会变,因为有时候想用浏览器,那么就要自动获取IP和DNS,所以无法指定IP,所以过了服务时间会ping不通。注意:使用这种方法打开电脑浏览器的时候,浏览器没有网络,但是微信qq都有网,可以不用的时候把在WLAN下的IP地址勾选自动获得,IP和DNS,在上面的步骤上有。本文是为了解决手机热点实现PC端和开发板端ping通的问题,如果,最后的问题,你有新的办法,可以把解决方法告知我或者在评论区。加上期末考试结束了!
2025-01-23 19:37:35
864
原创 (补充上一章内容)(学习正点原子)第一个驱动框架实验编写
make后面的 modules 表示编译模块, -C 表示将当前的工作目录切换到指定目录中,也就是 KERNERLDIR 目 录。M 表示模块源码目录,“make modules”命令中加入 M=dir 以后程序会自动到指定的 dir 目录中读取 模块的源码并将其编译为.ko 文件当前目录会出现.ko文件。!!!如果要清理编译结果就是执行make clean驱动模块编译的时候,其实本质上用的是内核里的Makefile来编译的,编译的时候会用到指定的驱动模块路径里面去找驱动代码。
2024-12-09 20:15:15
1647
原创 【2.Ubuntu复制快捷(快速上手,不需要VMware-tools】
Open-vm-tools分为两个包,一个是用于没有图形化界面的,另一个是用于有图形化界面的工具。Ubuntu安装open-vm-tools。Ubuntu设置界面,详细信息设为最新。
2024-11-28 22:58:25
316
原创 【Ubuntu问题汇总】1.删除文件夹或者压缩包内存没变化解决方法
在Linux或者Ubuntu系统中,通过rm或者文件管理器删除文件将会从文件系统的文件夹结构上解除链接(unlink),然而假设文件是被打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用。我们在学习Ubuntu和linux的过程中都会为内存不足而烦恼,扩盘和删除不需要的文件、压缩包也不失为一个好方法。但是发现,在删除文件和压缩包后,返回windows查看磁盘所占大小,内存没有发生任何改变,甚至变的更少。
2024-11-28 22:44:51
341
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人