自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RK3588:MIPI底层驱动学习——入门第一篇(万字开篇!真正零基础!)

真正的零基础,体系化学习MIPI协议

2025-08-24 21:36:52 2316 7

原创 【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

原创 Linux iic子系统开发通用套路

简单总结一下常见的开发步骤,防止时间一长就忘记

2025-08-25 16:48:59 695

原创 RK3588随笔:MIPI协议——D-PHY 物理层的自定义和校验

接下来开始学习MIPI驱动的移植

2025-08-22 17:03:18 671

原创 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驱动-快速回顾】一文彻底搞懂pinctrl子系统

我能做到一篇文章让你彻底搞懂pinctrl子系统

2025-07-20 23:26:04 3189

原创 【Linux驱动-快速回顾】简单了解一下PinCtrl子系统:设备树如何被接解析与匹配

本期笔记简单讲解,明天会更加深入

2025-07-19 21:57:04 1029

原创 【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驱动-快速复习】防止遗忘,设备和结构体配对流程

忘记配对流程就看一下这个,五分钟快速回忆起来

2025-07-07 22:20:52 949

原创 【Linux驱动-快速回顾】一次性快速回顾TTY体系知识点(新手友好)

快速入门+快速回顾TTY驱动体系各层功能

2025-07-07 20:21:33 946

原创 【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

原创 Input子系统当年韦东山没详细讲的一些内容补充

看视频发现跳过了一些知识点,自己补充了一下,分享给大家看

2025-06-15 19:51:33 656

原创 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关注的人

提示
确定要删除当前文章?
取消 删除