- 博客(9)
- 收藏
- 关注
原创 设备树详解
设备树(Device Tree)是描述嵌入式硬件的数据结构,用于在内核启动时传递硬件信息(CPU、内存、外设等),实现内核与硬件的解耦。其基本语法包含节点(如内存、串口)和关键属性(如compatible、reg)。设备树文件由.dts(板级)和.dtsi(SoC级)组成,通过Bootloader加载到内存。驱动通过compatible属性与节点匹配,调用probe()初始化。常见外设(I2C、SPI、GPIO等)有标准写法,调试可用dmesg、/proc/device-tree等工具。常见问题包括属性错误
2025-06-12 17:32:27
796
原创 Linux 虚拟 UART 驱动框架
本文介绍了Linux虚拟UART驱动的开发过程,主要包含以下内容: 驱动整体结构:基于uart_driver、uart_port、uart_ops三大核心模块构建,通过platform_driver和设备树匹配实现。 关键实现细节: 使用环形缓冲区(txbuf/rxbuf)处理数据传输 通过中断模拟机制实现接收功能 提供console支持以接入内核打印输出 创建proc接口用于调试和测试 测试验证方法: 通过proc接口模拟数据收发 支持/dev/ttyVIRT0设备节点 可接收内核printk输出 该驱动
2025-06-05 17:24:42
963
原创 树的遍历(前序 / 中序 / 后序)
本文介绍了二叉树的三种经典深度优先遍历方式:前序、中序和后序遍历。前序遍历顺序为根→左→右,适用于树的复制;中序遍历顺序为左→根→右,常用于获取有序序列;后序遍历顺序为左→右→根,适合释放内存等操作。文章提供了示例二叉树遍历结果,并分别给出递归和非递归的C++实现代码(使用栈结构)。最后总结了各遍历方式的应用场景,并提供了形象的记忆口诀帮助理解三种遍历顺序的差异。关键实现要点包括递归终止条件、栈的运用顺序以及双栈后序遍历等技巧。
2025-05-29 17:07:21
384
原创 Linux Platform 驱动匹配机制
Platform 驱动通过多种匹配方式实现与设备的自动绑定,主要包括设备树匹配、非设备树匹配和名称匹配。设备树匹配通过 compatible 字段与驱动中的 of_match_table 进行匹配,非设备树匹配则通过 platform_device.name 与驱动的 id_table 匹配,若前两者无效,则使用 platform_device.name 与 driver.name 进行最终匹配。匹配优先级依次为设备树匹配、非设备树匹配和名称匹配。在实际应用中,使用设备树时必须提供 .of_match_ta
2025-05-22 14:01:44
517
原创 进程上下文、中断上下文 以及 中断现场保护
当进程运行时,CPU 寄存器、堆栈、程序计数器、任务状态段等构成其运行状态。这些状态的集合称为“进程上下文”。进程上下文是内核代表某个进程在内核空间中执行系统调用或异常处理的状态。中断上下文是内核为了响应外设等硬件事件,在被打断的进程或线程上下文中临时执行中断服务程序(ISR)的运行环境。内核不是代表某个进程运行,而是代表硬件中断事件运行。中断发生时,CPU 要保存当前执行状态(称为“中断现场”),以便中断服务结束后,能够正确返回原来的执行现场。触发条件切换类型描述用户调用系统调用。
2025-05-19 09:38:16
909
原创 Linux驱动开发:PWM子系统详解(以SG90舵机为例)
本文介绍了PWM(脉宽调制)子系统在嵌入式系统中的应用,特别是如何通过设备树配置和驱动程序实现对SG90舵机的控制。首先,文章概述了PWM的基本原理及其在电机控制、LED调光等场景中的应用。接着,详细描述了设备树中PWM控制器的配置,包括引脚复用、启用PWM控制器节点以及定义SG90伺服节点的步骤。随后,文章提供了驱动程序的实现,包括驱动结构概述、源码解析以及应用层测试程序。最后,文章解析了PWM控制SG90舵机的原理,包括占空比的计算公式。通过本文,读者可以了解如何从硬件配置到软件驱动实现对PWM设备的控
2025-05-16 15:03:25
429
原创 Linux I²C 驱动 & 模拟 I²C 总线开发
本文系统性地介绍了Linux I²C驱动模型及其开发方法,涵盖了硬件I²C、GPIO模拟I²C和软件虚拟I²C三种实现方式。首先,文章详细解释了Linux I²C驱动模型中的三大核心结构:i2c_adapter、i2c_client和i2c_driver,并介绍了设备树匹配和手动注册i2c_client的两种设备匹配机制。接着,文章探讨了GPIO模拟I²C的原理、优缺点及实现框架,并介绍了如何利用Linux的i2c-gpio框架进行配置。最后,文章深入讲解了软件模拟I²C总线的实现方法,包括注册自定义的i2
2025-05-15 10:28:01
640
原创 LCD驱动编写流程
本文详细介绍了嵌入式 Linux 系统中 LCD 与 Framebuffer 驱动的开发流程。首先,文章阐述了 LCD 显示的基础知识,包括分辨率、像素格式、接口类型、显存和时序参数等。接着,文章深入探讨了 LCD 驱动原理与设备树配置,特别是 i.MX6ULL 的 eLCDIF 控制器和设备树节点的配置方法。随后,文章介绍了 Framebuffer 子系统及其驱动框架,包括 fb_info 结构体和 fb_ops 操作函数集。此外,文章还提供了自定义 Framebuffer 驱动的开发流程,从分配 fb_
2025-05-14 09:58:53
1069
原创 I²C配置开漏输出和上拉电阻的原因
开漏输出是指输出端只能拉低电平,不能主动拉高电平,当设备输出逻辑高电平时,实际处于“高阻态”(Hi-Z),不输出任何电平。配置项作用与意义开漏输出允许多个设备控制总线而无电平冲突,实现总线仲裁上拉电阻提供高电平、确保信号恢复、防止悬空禁用推挽避免同时输出高低电平造成短路I²C的这一设计使其在复杂、多设备通信场景中具备更高的稳定性和可靠性。
2025-05-13 15:58:55
1137
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人