自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux驱动中为什么既有 sysfs,又有字符设备?以 DHT11 驱动为例彻底讲透

最近在做 Linux 驱动项目时,遇到了一个很典型、也很容易让初学者困惑的问题:驱动已经支持字符设备/dev/dht11访问了,为什么还要再提供一套 sysfs接口?刚开始我也会觉得:字符设备不是已经能访问驱动了吗?既然都能用了,为什么还要多此一举搞 sysfs?这两种方式是不是重复了?它们的代码是不是写在一个驱动文件里?把这些问题梳理清楚之后,我发现这其实是 Linux 驱动开发中一个非常重要的知识点。这篇文章我就结合DHT11 驱动,把。

2026-03-28 17:14:01 220

原创 RK3568 驱动移植场景关系图

设备树节点│├── compatible ──────→ 找到对应驱动│├── xxx-gpios ──────→ 告诉驱动用哪根GPIO│└── pinctrl-0 ──────→ 告诉硬件这根脚切成什么功能驱动匹配成功│├── 解析设备树资源├── 申请GPIO├── 设置方向└── 创建设备节点MQ-2 和 MIPI 触摸抢 GPIO0_B3 的冲突示意图这张图你看懂了,以后 GPIO / I2C / SPI / UART 的复用冲突基本都能自己判断。

2026-03-25 09:54:35 384

原创 pinctrl的作用是强行把复用设置成需要的功能

就是把 GPIO0_B3 从原来的复用功能里切出来,配置成普通 GPIO,供 MQ-2 驱动读取电平。而想恢复 MIPI 触摸时,就要反过来:不再给mq2@0应用这个mq2_pin让i2c1对应的 pinctrl 状态重新生效这样 GPIO0_B3 / GPIO0_B4 就回到 I2C1 触摸复用以后看到一段 pinctrl,不要怕,直接问自己 3 个问题:这段在配哪根引脚?这根引脚被切成什么功能?这根引脚的上下拉/电气属性是什么?GPIO0_B3GPIO不上拉下拉。

2026-03-25 09:54:17 333

原创 把mipi屏的复用改回来 不使能MQ-2

* 删掉 mq2@0,或者改成 disabled *//* 删掉 mq2_pin */&i2c1 {

2026-03-24 09:30:16 244

原创 RK3568 + MQ-2 烟雾传感器字符驱动移植

最终做到这几件事:MQ-2 模块接到 RK3568 开发板驱动设备树已经绑定GPIO0_B3/dev/mq20:未报警1:报警这里采用的是的方式,不走 AO 模拟量。

2026-03-24 09:18:51 689

原创 DebugFS 文件系统

核心定位:debugfs 是 Linux 内核的专用调试文件系统,轻量、灵活,用于暴露内核 / 硬件的调试信息,区别于 procfs/sysfs;关键操作:默认挂载在,仅 root 可访问,支持普通文件读写操作;典型用途:嵌入式开发中常用于排查 HDMI/I2C/I2S 等硬件问题,生产环境建议关闭以提升安全性。

2026-03-16 11:34:48 350

原创 Linux下的ULN2003驱动板与28BYJ-48步进电机驱动移植

基于您已成功移植DHT11温湿度传感器驱动的经验,本实验将进一步探索RK3568平台的电机控制领域。通过移植ULN2003驱动板和28BYJ-48步进电机驱动,掌握GPIO输出控制、PWM调速等关键技术。本教程详细介绍了在RK3568平台上移植ULN2003驱动板和28BYJ-48步进电机的完整流程,并针对新指定的GPIO引脚(GPIO3_B0、GPIO3_C5、GPIO0_C0、GPIO3_B6)进行了设备树配置。通过字符设备驱动提供ioctl控制接口,实现了步进电机的正反转、调速和定步长控制。

2026-03-13 16:10:02 617

原创 IIC驱动框架

层次核心价值解决的问题设备驱动层专注业务逻辑只关心 “怎么和设备交互”(比如读传感器数据),不用管 I²C 控制器怎么发数据核心层统一协议与接口封装 I²C 通信协议,提供通用 API,让设备驱动和硬件适配器互不依赖适配器驱动层封装硬件差异只关心 “怎么操作这个 I²C 控制器”,把硬件细节藏起来,方便移植到不同芯片平台硬件层物理通信实际的 I²C 控制器和外设,由适配器驱动直接操作核心层让设备驱动 “通用”,适配器驱动让硬件 “可替换”,整个系统就像搭积木一样灵活。

2026-03-13 15:56:03 208

原创 电机驱动知识

核心原理:通过电力电子器件(MOSFET/IGBT)与控制算法,调节电机绕组的电压、电流、频率,控制电磁转矩。电机驱动 = 把弱电控制信号 → 放大为电机可用的强电 → 精准控制电机的转速、转矩、方向、位置。- 控制单元:MCU/DSP/FPGA → 发指令、跑算法(PID、矢量控制、FOC)- 传感器:编码器、霍尔、电流采样 → 闭环反馈。- 应用:新能源汽车、工业伺服、机器人、高端风机。- 消费:无人机、扫地机、空调、洗衣机、3D打印。- 应用:3D打印、CNC、相机云台、精密仪器。

2026-03-09 17:06:27 128

原创 RK3568 平台 MPU6050 驱动移植

MPU6050 通过 I2C 与主控通信,7bit 地址由 ADO 引脚决定:ADO 接地时地址为 0x68,ADO 接高电平时地址为 0x69。本实验中设备树节点使用 reg = <0x68>,因此硬件上必须保证 ADO 接地。功能项说明加速度计三轴,支持 ±2g / ±4g / ±8g / ±16g陀螺仪三轴,支持 ±250 / ±500 / ±1000 / ±2000 °/s温度传感器片上温度值,可按数据手册公式换算通信方式I2CWHO_AM_I 寄存器。

2026-03-09 10:05:36 624

原创 **RK3568平台DHT11温湿度传感器内核驱动移植全攻略

DHT11单总线通信对时序要求极高,需严格遵循官方规范:时序环节官方要求驱动配置作用启动信号拉低≥18ms18ms确保传感器检测到起始信号启动信号释放20-40us30us适配传感器响应窗口数据位判定0=26-28us高电平,1=70us高电平35us判定精准区分0/1信号读取间隔≥1s1s避免传感器过载,符合电气特性基于RK3568 Linux5.10内核的DHT11驱动移植成功,支持sysfs和字符设备两种访问方式;核心问题集中在时序适配和C90语法规范。

2026-03-07 12:36:32 393

原创 RK3568 HDMI 绑定 VP0 配置全流程:从踩坑到解决的完整实践

最近在正点原子 ATK-DLRK3568 开发板上做 HDMI 显示开发,核心需求是将 HDMI 输出绑定到 VP0 接口。原本以为只是简单修改设备树节点,没想到踩了一连串的坑 —— 手动改节点不生效、MIPI 屏优先级抢占、HDMI 连接笔记本无反应、驱动自动路由覆盖配置等。折腾了好几天,终于摸清了正点原子 SDK 的显示配置逻辑,也总结出了一套从设备树配置、驱动调试到硬件连接的完整解决方案。本文就把整个过程详细记录下来,希望能帮到遇到同样问题的开发者。正点原子 SDK 的设计逻辑是通过。

2026-03-04 16:44:34 441

原创 *RK809 Codec 音频驱动调试笔记操作总结

本文围绕RK3568平台下RK809 Codec音频驱动调试展开,核心是通过设备树配置内核驱动宏开启硬件接口绑定。

2026-03-03 11:53:35 724

原创 RK809 Codec 音频驱动调试里的I2C2和I2S1是什么

I2C2 和 I2S1 是 RK3568 上两条独立的硬件总线,为 RK809 提供控制和数据I2C2 管 “指挥”:让 RK809 知道「怎么工作」;I2S1 管 “干活”:让 RK809 拿到「工作的内容(音频数据)」。这也是嵌入式开发中 **“控制总线” 和 “数据总线”** 的典型分工,不仅适用于音频 Codec,在传感器、显示屏、网卡等外设的驱动中,也会频繁见到这种 “专用控制通道 + 专用数据通道” 的搭配。

2026-03-03 09:04:28 674

原创 RK809 Codec 音频驱动调试完整笔记(适配 LubanCat 2N-V2/RK3568)

真正的引脚配置在。

2026-03-03 08:13:30 1253

原创 为什么有这么多设备树文件

这么多设备树文件,本质是为了让 RK3568 这颗芯片能适配从官方评估板到 LubanCat 等各种板卡,同时又能通过 “继承 + 覆写” 的方式高效管理配置,避免重复劳动。

2026-03-02 22:32:03 305

原创 RK809调试

【代码】RK809调试。

2026-03-02 22:24:38 711

原创 为什么谁先发送低电平谁就掌握对总线的控制权

这是由 I2C 总线的和。

2026-03-01 21:41:57 745

原创 1.YUV 原理的讲解

U、V 分量的采样比例为 Y 分量的 1/2,Y 与 UV 按 2:1 采样(2 个 Y 分量对应 1 个 UV 分量),即 4 个 Y 分量对应 2 个 U 分量、2 个 V 分量。,水平、垂直方向上,色度分量采样比例均为 Y 分量的 1/2,Y 与 UV 按 4:1 采样(4 个 Y 分量对应 1 个 UV 分量)。:每行仅扫描一种色度分量,第一行 4 个 Y 对应 2 个 U、0 个 V,下一行 4 个 Y 对应 0 个 U、2 个 V。

2026-02-27 14:54:53 464

原创 音频模块总结

2026-02-04 15:19:32 84

原创 音视频开发视频模块

1.23456789。

2026-02-04 11:37:36 221

原创 修改menuconfig后修改编译.config方法

执行./build.sh kernel后,马上停止执行 会看到图中用的哪个配置 再寻找将其替换。

2026-02-03 14:54:52 354

原创 设备树插件

【代码】设备树插件。

2026-02-03 13:59:33 121

原创 U-Boot 核心作用与核心知识点

答:U-Boot 是遵循 GPL 协议的开源 bootloader,核心定位是 “嵌入式系统的启动引导工具”,可看作嵌入式版 BIOS + 裸机综合例程,支持 ARM 等多架构,适配各类嵌入式外设(如 DDR、EMMC、网络),开发中常用半导体厂商定制版(如瑞芯微 SDK 自带 2017.09 版本),适配性优于官方原生版。

2026-02-03 11:46:28 1179

原创 寻找RK3568 SDK中DMA-BUF API;项目中的DMA-BUF实现零拷贝的流程

【代码】寻找RK3568 SDK中DMA-BUF API;项目中的DMA-BUF实现零拷贝的流程。

2026-02-01 16:56:59 164

原创 点亮MIPI屏;系统启动失败-无法启动根文件系统;启动设备树下 platform_device 和 platform_driver 匹配实验

改.dts” 是解决板级设备节点配置的正确方向,且能规避之前的.dtsi引用问题,但 “语法正确” 只是第一步。需同时满足 “属性合规、无资源冲突、编译配置正确、驱动匹配”,才能确保修改后编译生效。点亮mipi屏幕点亮MIPI屏幕打开设备树文件:打开这个/** 屏幕选择* ATK_LCD_TYPE_MIPI_720P: 正点原子5.5寸 720*1280 MIPI屏* ATK_LCD_TYPE_MIPI_1080P: 正点原子5.5寸 1080*1920 MIPI屏。

2026-01-31 21:39:26 742

原创 V42L驱动调试与优化实战案例:RK3568平台MIPI摄像头图像撕裂问题

"我在RK3568平台上调试V4L2驱动时,遇到图像撕裂和内存泄漏问题。通过分析发现,DMA缓冲区数量不足且物理内存不连续导致性能瓶颈。最终将FPS稳定性提升了89%,彻底解决了内存泄漏问题。:缓冲区数量只有4个,对于1080P@30fps明显不足。:RK3568的ISP(图像信号处理器)DMA引擎配置不当。:长时间运行后V4L2缓冲区耗尽,系统OOM。,修改了ISP驱动代码,增加了调试打印;,增加了128MB的ISP预留内存区域;:确保物理地址连续,减少DMA映射开销。:合并中断,减少上下文切换。

2026-01-28 16:52:50 621 1

原创 设备树基础操作

编译设备树:/home/alientek/rk3568_linux5.10_sdk/kernel/scripts/dtc。方法二编译设备树容易报错 要设置很多环境变量。

2026-01-28 14:55:23 40

原创 点亮 LED 灯实验(平台总线)

/ LED资源:寄存器地址和大小// 定义LED设备资源(寄存器内存区域)[0] = {.end = PMU_GRF_GPIO0C_IOMUX_L + 0x3, // 4字节},[1] = {},[2] = {},[3] = {},// 平台设备私有数据(可选).default_state = 0, // 默认关闭// 平台设备定义.id = -1, // 只有一个设备.dev = {.platform_data = &led_pdata, // 传递私有数据。

2026-01-28 10:46:49 177

原创 平台总线总结

Linux 内核模块是驱动的 “壳”,字符 / 杂项设备是驱动的 “核心逻辑”,平台总线是驱动的 “可移植优化”,file_operations 是驱动与应用的 “交互桥梁”,五种 IO 模型优化交互方式,并发竞争机制保障多任务安全,中断实现硬件实时响应—— 所有知识围绕 “内核模块→驱动框架→交互核心→运行保障” 展开,最终形成一个可移植、稳定、高效的 Linux 设备驱动完整体系。

2026-01-27 16:22:35 477

原创 注册 platform 驱动实验

驱动匹配成功之后就会执行。ko 文件不分先后顺序)文件,(加载上述两个。命令进行驱动模块的卸载。

2026-01-27 15:12:39 160

原创 注册 platform 设备实验

虚拟出来的一条总线,并没有实际的 物理总线。部分可以避免重复造轮子的工作。这样在不同开发板上移植相同驱动的时候,只需要单独编写。Linux 系统可以支持不同架构处理器和不同的开发板,例如迅为的。灯亮灭,不同的开发板操作逻辑是一样的,所以把驱动代码单独拿出来归类到。部分是硬件相关代码,因为不同的开发板或处理器描述硬件资源的代码不通。使用平台总线模型编写驱动程序可以让驱动程序有更好的重用性和。部分几乎无需改动,从而大幅提升驱动的兼容性。部分是通用的驱动逻辑代码,如在驱动代码。部分的硬件资源描述代码即可,

2026-01-27 14:32:53 380

原创 Linux驱动中断总结

2026-01-27 13:39:47 612

原创 中断触摸屏幕实验

查看原理图= 0(对应GPIO0)= B(B对应数值为1,因为A=0, B=1, C=2, D=3)= 5(引脚序号)= 8 + 5= 13= 13。

2026-01-24 14:17:48 86

原创 封装驱动 API 接口实验

核心命令:将dev_open.o打包进libopen.a(rcs参数:创建/插入/生成符号索引) ar rcs libopen.a dev_open.o。行定义了四个功能函数,所代表的功能分别为设备打开、定时器打开、定时器。过简单的函数接口来完成设备操作,这样可以提升程序的可读性和可维护性。一般情况下,应用程序都是由专业的应用工程师来进行编写的,在使用。通过测试程序可以看出封装后的应用程序不再直接调用繁杂的。命令也可以实现控制定时器的功能,说明封装。命令的具体实现,所以对于应用程序中的。

2026-01-23 16:00:53 592

原创 使用ioctl控制定时器 可引申到控制串口 摄像头

内核定时器关键 API:初始化定时器(替代旧版:启动 / 重置定时器(参数为超时 jiffies):安全停止定时器(等待回调执行完毕):毫秒转内核时钟节拍(jiffies)IOCTL 核心逻辑分别对应无参数、写(用户→内核)、读(内核→用户):安全的内核 / 用户空间数据交互命令合法性检查:避免非法命令导致内核崩溃资源管理驱动卸载时必须停止定时器(否则会触发空指针)字符设备资源需逆序释放(设备→类→cdev→设备号)

2026-01-23 13:38:35 336

原创 IOCTL 驱动传参实验

核空间之间传递特定的控制命令和参数。下面将从应用层和驱动函数两个方面来对。)是设备驱动程序提供的一种控制接口,用于在用户空间与内。首先来编写应用测试代码 app。

2026-01-23 11:03:44 71

原创 llseek 定位设备驱动实验

如果仍采用之前的方式,第二次的写入值会覆盖第一次的写入值,那要如何解决这一问题呢?假如现在有这样一个场景,将两个字符串依次进行写入,并对写入完成的字符串进行读取,首先来编写应用测试代码 app。编译成X86的Makefile。驱动程序编写llseek.c。

2026-01-22 22:12:56 59

原创 非阻塞 IO 实验

模型中,内核数据还未就绪时,应用进程也可以做其他事情,应用进程需要。塞方式打开设备,这样从设备中读取数据的时候就是非阻塞方式了。如果应用程序要采用非阻塞的方式来访问驱动设备文件,在使用。不断询问内核数据是否就绪,并不会被直接挂起。数据便返回,然后一直轮询查看是否有数据。,在此代码中使用非阻塞的方式打开设备。可执行程序读取到了缓冲区的数据并。”设备文件的时候需要添加参数“应用程序进程非阻塞,读取不到。首先来编写应用测试代码。向缓冲区写入数据时,

2026-01-21 15:26:36 78

原创 阻塞 IO 实验

内核机制,等待队列以双循环链表为基础结构,其中链表头和链表项两部分别表示等待队列头。驱动程序中,阻塞进程可以使用等待队列来实现。等待队列是实现阻塞和唤醒的。步骤三:当条件满足时,需要解除休眠,先将条件设置成真。步骤一:初始化等待队列头,并将条件置成假。数据,唤醒等待队列中的休眠进程。步骤二:在需要阻塞的地方调用。函数唤醒等待队列中的休眠进程。,使进程进入休眠状态。和等待队列元素,如图。

2026-01-21 15:02:58 50

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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