- 博客(22)
- 收藏
- 关注

原创 【Linux驱动-快速回顾】【彻底搞懂】一文彻底搞懂Linux中断子系统(绝对清晰)(新手友好)
本文带你快速回顾Linux驱动章节中断部分的内容,由于逻辑层层推进,新手也可以看懂
2025-07-08 22:19:16
2986
原创 RK3588:MIPI底层驱动学习——入门第二篇(一文掌握V4L2与硬件设备驱动之间的关系)
V4L2框架通过v4l2_device和v4l2_subdev两个核心概念把复杂的摄像头系统抽象成标准化的接口。每个硬件模块实现为一个subdev,通过ops函数集提供功能。最终通过/dev/video节点向应用程序提供统一的访问接口。理解了V4L2框架,我们就能理解OV13855驱动是如何融入这个框架,以及驱动代码为什么要那样组织。
2025-08-26 14:39:06
1184
原创 RK3588——DMABUF+CMA的完美组合
为了让不同的模块(如V4L2驱动、GPU驱动、显示驱动)和用户空间能安全、统一地共享内存,Linux内核需要一个标准的“中介”或“契约”。通过这一整套DMABUF和CMA的组合拳,数据从始至终都只存在于一块物理内存中,完美地实现了硬件和用户空间的共享,达成了零拷贝的目标。这样,硬件可以直接将数据写入这块内存,而应用程序也能够直接从这块内存中读取数据,从而省去内核到用户的那一次CPU拷贝。:正如前面所说,在系统长时间运行后,物理内存会产生大量碎片,此时再想申请一块大的、连续的物理内存会非常困难,甚至失败。
2025-08-13 15:44:28
1006
原创 【Linux驱动——彻底搞懂】IIC驱动子系统(初步认识)
IIC相比较之前的内容多了一点:他要分层它的本质是:硬件的“翻译官”和“执行者”。它的本质是:I2C子系统的“交通枢纽”和“规则制定者”。它的本质是:特定I2C从设备的“应用专家”和“逻辑封装者”。我们已经理解了三层的功能划分。现在,我们从最贴近硬件的底层开始,看看它们在代码层面是如何通过标准化的数据结构来定义自己,并与相邻层级沟通的。它的本质是:一个物理I2C控制器的软件抽象。 它代表了一条真实存在的、可以收发数据的I2C总线。当一个控制器驱动初始化时,它必须向系统注册一个代表其控制的物理总线的对象。这个
2025-08-03 14:49:24
1677
3
原创 【补充】Linux内核链表机制
一个复杂的设备,例如一个现代WiFi/蓝牙二合一模块,在不同的工作模式下,对引脚的要求是不同的。设备建立一个数据结构,来清晰地管理这四种引脚状态(A, B, C, D)以及它们对应的具体配置。成员(Q)就是这个链表的“头结点”或“锚点”。当内核解析这个设备时,它需要在内存中为。如何通过内核链表,来组织和管理其多个。深入解析Pinctrl子系统中,本身直接串起来,而是通过它们内部的。的状态时,它会遍历这个由。成员(T)来建立连接。
2025-07-21 22:44:13
329
原创 【Linux驱动-快速回顾】一文快速理解GIC内部寄存器对中断的控制
作用: 分发器总开关。把它理解为整个GIC分发器的“总电源开关”就对了。在你把所有中断都精心配置好(设置好优先级、目标CPU、触发方式等)之后,最后一步就是打开这个总开关,GIC才能正式开始工作。位[0]EnableGrp0(使能组0)作用:控制Group 0中断的转发。0关闭。所有属于Group 0的中断,即使已经触发(处于pending状态),也会被GIC分发器拦住,不会被发送给任何CPU接口。就像闸门A关闭了。1打开。
2025-07-15 22:00:01
1619
原创 【Linux驱动-快速回顾】【彻底搞懂】一文快速理清楚Linux内核中断组织方式(新手友好)
CPU 收到中断信号-> 内核需要一个总管来管理所有中断源。引入irq_desc数组:作为中断的总管,以全局irq号为索引。中断控制器是层级化的->irq_desc需要能处理这种分发流程。引入handle_irq函数指针:作为中断流控处理函数,负责从上级中断源找到下级中断源,形成中断处理链。中断线可能被多个设备共享-> 需要一种机制来管理多个中断处理者。引入irqaction链表:挂在irq_desc下。每个设备驱动注册一个irqaction,其中包含真正的中断处理函数handler。
2025-07-09 21:24:35
641
原创 【Linux驱动-快速回顾】为什么APP调用open函数,传入的文件设备,驱动层却是接到了inode结构体?
特性(文件的身份证)(文件的会话凭证)代表文件系统中的一个静态文件实体一个进程与文件之间的动态打开会话生命周期与文件在磁盘上的存在时间相同(持久)从open()到最后一个close()(临时)唯一性每个文件只有一个每次open()都会创建一个新的核心数据权限、所有者、类型、设备号当前读写位置、打开模式、私有数据。
2025-06-23 15:08:12
836
原创 【Linux驱动-快速回顾】简单字符设备驱动
这是一个简单的hello的驱动程序,快速回顾之前的知识点我们按照一个驱动程序从诞生到消亡的生命周期来剖析这段代码的结构。这个结构是所有字符设备驱动的标准范式。这是驱动程序最核心的部分。它告诉内核:“当用户空间的程序对我的设备文件进行操作时,你应该调用我这里的这些函数。”为什么这样做:这是一种回调(Callback)机制。驱动程序本身不主动运行,它只是向内核注册了一系列函数指针。当某个事件(如用户调用)发生时,内核会通过这些指针“回头调用”驱动程序提供的函数。 这一行非常重要。它防止在驱动程序被使用
2025-06-22 22:17:13
808
原创 【彻底搞懂】驱动程序编译之前没有注意到的知识点
准备阶段 (Setup)a.获取并配置内核: 在你的Ubuntu工作站上,获取目标开发板对应的Linux内核源码。进入源码目录,使用开发板厂商提供的配置文件(.config),为目标板(比如ARCH=arm64)配置并编译一遍内核。这一步至关重要,它会生成后续编译驱动所需的一切。b.获取交叉编译器: 下载并解压与你的内核和开发板匹配的交叉编译工具链(Toolchain)。c.编写代码: 编写你的驱动源代码和用户空间测试代码。d.编写Makefile: 编写我们上面详细分析的那个。
2025-06-22 21:07:42
1092
原创 【彻底搞懂】Linux 事件、阻塞、非阻塞+轮询、slect、poll、epoll、缓冲io、非缓冲io、同步、异步
想彻底搞懂Linux I/O?本文通过一个开发“智能家居中控”的生动故事,带你亲历从阻塞I/O到epoll的完整演进。你将直观地理解阻塞/非阻塞、同步/异步、select/poll/epoll这些核心概念的本质区别与联系。我们还会将缓冲I/O与异步I/O融入实际场景,让你不再死记硬背!
2025-06-21 17:10:27
1134
原创 Linux伙伴系统——对初学者友好的理解方式
所以,你可以看到,伙伴系统是 Linux 内存管理体系中非常重要的一环,它工作在分页机制的底层,为分页机制以及内核其他部分提供所需的、合适大小的、物理连续的内存块。内核自己需要的小块、大小不一的内存,直接用分页来分配一个完整的页(通常 4KB)会不会有点浪费?有要求的内存请求,既可能造成浪费(比如只需要 100 字节却分配了 4KB),也难以保证分配到的多个页是物理上连续的(分页机制本身不保证这一点,它只保证虚拟地址连续)。“伙伴”指的是满足特定条件的、大小相等且物理地址相邻的两个内存块。
2025-04-15 11:26:09
649
原创 STM32F103C8T6
stm32基本参数stm32f103C8T6基本配置流程配置流程分三步走:1.STM32CubeMX软件生成初始化程序首先我们打开软件,点击New Project,也就是新建一个项目。配置pinout表首先选择自己的需要的输出引脚,用来输出高电平给LED灯。这个界面可以通过鼠标滚轮来放大缩小,按住滚轮或者同时按鼠标左右键来移动图形。我这里选择的是PE6、PE5和PH9,左键点击之后选择GPIO_Output。也就是普通输出口。打开RCC设置,选择外部晶振Crystal/Ceramic R
2021-02-01 15:56:03
7684
原创 DHT11温湿度传感器——学习总结(最详细,最容易适合新手看的资料)
此文是我之前学习DHT11温湿度传感器的总结笔记,许久未翻阅,偶然查看,发现一百多收藏十个点赞,伤心欲绝,故修改标题重新发送,希望大家看完之后如果觉得真的看着舒服,易懂,麻烦您收藏的同时别忘留个赞。
2020-08-10 16:56:08
69894
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人