- 博客(124)
- 收藏
- 关注
原创 使用 Docker 搭建全志 SDK 编译构建环境
最近负责在几套全志 SDK 上进行相关驱动和应用开发工作,有些 SDK 版本较老,有些 SDK 版本较新,而编译机器只有一台,为了解决在同一机器上进行不同 SDK 的编译环境,于是研究了 Docker 相关技术,并最终实现了想要的效果,就有了这篇文章。相信大家多多少少都听过 Docker,并且现在 AI 也很方便能查到相关概念解释,关于 Docker 的介绍我在这里就不赘述了,直接上干货!
2025-12-08 16:17:01
913
原创 Linux I2C 子系统源码图解
Linux I2C 子系统是一个分层的驱动框架,用于管理 I2C 总线控制器和 I2C 设备。该子系统遵循 Linux 设备驱动模型,将硬件抽象与设备驱动分离,提供了统一的接口供上层驱动使用。驱动开发使用简化驱动注册优先使用设备树而非静态板级信息使用 devm_ 系列函数自动管理资源实现电源管理回调函数数据传输对于简单传输使用 SMBus 接口复杂传输使用注意处理部分传输的情况合理设置超时和重试参数错误处理检查所有 I2C 操作的返回值实现总线恢复机制。
2025-11-20 16:10:00
1098
原创 圣邦微电子 SGM58031 数据手册解读 + Linux 驱动代码
SGM58031 是一款专为精密测量设计的 16 位、低功耗、Sigma-Delta (Σ-Δ) 模数转换器 (ADC)。它具有宽广的工作电源电压范围 (3V 至 5.5V),适用于多种应用场景。该器件集成了关键的片上组件,包括内部电压基准、振荡器和可编程增益放大器 (PGA)。PGA 的引入使其能够支持低至 ±256mV\pm256mV±256mV 的满量程输入范围,非常适合测量微弱信号。SGM58031 具备灵活的输入配置,其输入多路复用器 (MUX) 支持 4 路单端输入或 2 路差分输入。在性能方面
2025-11-17 14:37:00
930
原创 最全 Linux 驱动开发教程—下册
输入子系统(Input Subsystem) 是 Linux 内核中用于管理和处理所有用户输入设备的核心框架。它的主要职责是充当硬件设备和用户空间应用程序之间的桥梁,提供一个统一、标准化的事件处理机制。它最初是为了支持 USB HID(Human Interface Devices,人机接口设备)规范而设计的,但其架构被证明非常灵活,因此迅速扩展到支持几乎所有类型的输入设备,无论它们通过何种总线(如 USB、蓝牙、I2C、PS/2 等)连接。常见的输入设备包括:输入子系统的设计精巧地将复杂的硬件交互与上层的
2025-11-03 08:36:51
1172
原创 最全 Linux 驱动开发教程—上册
Linux 内核由芬兰学生林纳斯·托瓦兹 (Linus Torvalds) 于 1991 年作为个人爱好创建。这张图片展示了一个基于Linux内核的计算机系统的分层架构,清晰地描绘了软件和硬件之间是如何通过操作系统内核进行交互的。它将系统大致分为了三个主要层次:最上层的用户空间、中间的Linux内核以及最底层的硬件。在最上层的用户空间(橙色大框内),包含了用户直接交互的程序和它们所依赖的库。这里示例了“用户应用A”(User app A)和“用户应用B”(User app B),它们代表了任何我们日常使用的
2025-11-03 08:35:04
868
原创 最全 Buildroot 系统开发教程
这张图清晰地展示了 Linux 操作系统的分层体系结构。它说明了软件是如何与硬件交互的。可以构建工具链根文件系统 (rootfs)内核引导加载程序。易于使用menuconfigxconfig等工具进行配置。快速:几分钟内即可构建一个简单的根文件系统。易于理解:用make编写,并提供详尽的文档。根文件系统小,最小可达 2 MB。提供 3200 多个用户空间的库/应用程序软件包。支持多种架构。make和kconfig。厂商中立。拥有活跃的社区和定期的发布版本。
2025-10-13 09:00:00
1192
1
原创 【图文版】AIOT 小智 AI 聊天机器人 ESP32 项目源码图解
小智 AI 聊天机器人是最近一个很火的开源项目,它借助LLM大模型以及TTS等AI的能力,通过自然语言来与其对话实现交互。它可以回答任何问题、播放音乐、背诵古诗,颇有未来AI机器人的雏形。因为最近工作上的需要对其进行了研究,因此有了本篇文章。本文不会过多的讲解源码,而是通过图解各个架构和数据流的方式,带大家搞懂它的工作原理。我相信只要搞懂了工作原理,再来看源码就会简单很多,废话不多说,马上进入正题。源码: https://github.com/78/xiaozhi-esp32 ,本文章基于源码。
2025-07-28 09:00:00
6129
1
原创 【通俗易懂】Linux 线程调度策略详解
这两个策略是对这一权衡的明确承认,它们为开发者提供了一个“逃生通道”,让他们可以告诉调度器:“我的任务不符合标准模型,请区别对待”。至关重要的一点是,_任何_实时任务,即便是优先级为1的任务,其调度优先级也永远高于_任何_普通(CFS)任务。主厨的指令是,_只有_在没有任何菜单上的订单,也没有批量任务在进行时,厨师们才能去做这些事。你不再只是告诉主厨“这道菜很重要”(设置优先级),而是给他一份精确的合约:“这道菜需要X单位的工作量,必须在Y时间点前完成,并且每隔Z分钟就会有一份新订单进来。
2025-06-17 14:30:00
917
原创 深入浅出-回声消除(AEC)
声音的回荡,或称回声,是一种我们既熟悉又可能感到困扰的声学现象。在空旷的山谷中呼喊,声音会在山壁间反射,片刻之后传回我们的耳朵,形成清晰的回响。这种自然界的回声通常富有诗意,但在现代通信技术中,类似的现象却可能演变成通话质量的“破坏者”。在电子通信设备,如座机、手机或免提会议系统中,我们都可能经历过声学回声——即在通话时听到自己声音的延迟重复。这种回声的定义是声波形态的重复;在电信领域特指通话时,自己的声音在接收端发生反射并通过听筒传回的现象。如果回声的振幅较低,或者延迟极短,它可能不会被注意到。
2025-06-13 10:58:14
2177
原创 什么是音频?
音频,在其最核心的层面,即是我们通常所说的声音。它起源于物体的振动。这些振动扰动了其周围的介质(例如空气或水),在介质中产生了微小的压力变化,这些压力变化以波的形式传播开来。当这些压力波到达我们的耳朵时,耳内的复杂机制会探测到这些变化,并将其转换成神经信号,我们的大脑随后将这些信号解读为声音。正如一段简练的描述所言:“普遍物体的振动形成声波,即声音”。这种对音频物理基础的理解至关重要,因为它揭示了音频并非一个抽象概念,而是一种可触可感的物理现象。
2025-06-13 10:43:00
1500
原创 基于 Windows11 WSL2 的 ESP-IDF V5.4 开发环境搭建教程
最近因公司业务需要,接触了 ESP32 芯片,中途踩了不少坑,也慢慢熟悉了 ESP32 的开发流程。我使用了乐鑫官方的 ESP-IDF 作为编译工具,其他版本有、PlatformIO,但它们底层也是基于 ESP-IDF,只不过进行了一层 API 封装。为了优雅的使用 ESP-IDF,我选择 WSL2 作为我的开发环境,这样做的好处是可以与宿主机隔离,避免污染宿主机环境。
2025-04-23 19:00:00
1249
2
原创 【已开源】【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统
本文主要介绍我最近开发的一个个人实战项目,“基于深度学习的人脸门禁+ IPC 智能安防监控系统”,全程满帧流畅运行。这个项目我目前全网搜了一圈,还没发现有相关类型的开源项目。这个项目只要稍微改进下,就可以变成市面上目前流行的三款产品,人脸识别门禁系统、IPC 安防和 NVR。在最下面会有视频演示。本项目适用于瑞芯微 Rockchip 系列的板端,开源链接在文章最下面。
2025-02-08 09:03:24
7719
22
原创 在 Vscode 中搭建嵌入式 Linux 通用 windows、mac、linux 平台的 docker 容器开发环境
在日常工作中,由于各种原因,我们的电脑可能与同事的电脑存在一些差异,有时候是操作系统的差异(A 同事用的是 Linux,B 同事的是 Windows,而你用的是 Mac),有时候是依赖库环境的差异(A 同事安装了 opencv 1.2,B 同事安装了 opencv 2.3)。而解决这些差异性的问题就成为了重中之重,好在现在世界上最流行的 IDE Vscode 提供了基于 docker 容器的开发环境构建,可以让不同平台不同环境下的电脑在开发时都保持一致,得到同样的开发体验。
2025-02-08 09:00:00
1660
原创 瑞芯微 Rockchip 系列 RK3588 部署 yolo11 模型推理教程
在上一篇文章中,我介绍了如何在瑞芯微 Rockchip 系列芯片将主流深度学习框架模型转换为 RKNN 模型。在这篇文章,我将介绍如何在瑞芯微 Rockchip 系列 RK3588 芯片上部署 yolo11 模型推理。本文章会使用到上一篇文章转换的 rknn 模型,因此如果还没看过上一篇文章的同学,建议优先阅读上一篇文章。本教程不仅适合 RK3588 平台,也适合其他 RK 系列平台,例如 RK3566、RK3568、RK3562 等。具体平台请参考RKNN-Toolkit2 文档。
2025-02-07 10:54:22
5716
7
原创 瑞芯微 Rockchip 系列 RK3588 主流深度学习框架模型转成 rknn 模型教程
在瑞芯微 Rockchip 芯片上进行 NPU 推理,需要先将模型文件转换成 rknn 模型文件,才能执行各种推理任务。本文将介绍如何安装各种工具,并最终实现将各种深度学习框架的模型文件转换成 rknn 文件。本教程不仅适合 RK3588 平台,也适合其他 RK 系列平台,例如 RK3566、RK3568、RK3562 等。具体平台请参考RKNN-Toolkit2 文档。本文介绍了如何在 RK3588 平台上进行主流深度学习框架模型转换,并提供了完整的示例代码。希望对大家有所帮助。
2025-02-07 09:00:00
4368
2
原创 FFmpeg 头文件完美翻译之 libswresample 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库。
2025-02-07 09:00:00
566
原创 FFmpeg 头文件完美翻译之 libavutil 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库。
2025-02-06 09:45:00
806
原创 FFmpeg 头文件完美翻译之 libavformat 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库,下载到本地慢慢品读
2025-02-06 09:30:00
1161
原创 FFmpeg 头文件完美翻译之 libavdevice 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库。
2025-02-05 14:00:00
739
原创 FFmpeg 头文件完美翻译之 libavfilter 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库。
2025-02-05 14:00:00
793
原创 FFmpeg 头文件完美翻译之 libavcodec 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库,下载到本地慢慢品读
2025-01-22 09:43:54
1650
原创 瑞芯微 RK 系列 RK3588 使用 ffmpeg-rockchip 实现 RGA 2D 图形操作硬件加速-代码版
在上一篇文章中,我介绍了 ffmpeg-rockchip MPP 硬编解码的代码实现方式。在这篇文章,我将介绍 ffmpeg-rockchip RGA 的代码实现方式。RGA 是一个用于图像缩放、旋转、bitBlt、alpha混合等常见的2D图形操作的硬件单元,它的应用场景很广泛,比如可以将 4k 视频缩小到 1080p,再比如可以用于 yolo 模型推理的预处理阶段,提高整个处理链路的效率。本文不仅适用于 RK3588,还适用于 RK 家族系列的芯片,具体的细节可查看官方 RGA 文档。下面分别介绍。
2025-01-13 09:07:34
4873
14
原创 瑞芯微 RK 系列 RK3588 使用 ffmpeg-rockchip 实现 MPP 视频硬件编解码-代码版
在上一篇文章中,我们讲解了如何使用 ffmpeg-rockchip 通过命令来实现 MPP 视频硬件编解码和 RGA 硬件图形加速,在这篇文章,我将讲解如何使用 ffmpeg-rockchip 用户空间库(代码)实现 MPP 硬件编解码。本文不仅适用于 RK3588,还适用于 RK 家族系列的芯片,具体的细节可查看官方 MPP 文档。
2025-01-13 09:02:14
9501
45
原创 瑞芯微 RK 系列 RK3588 使用 ffmpeg-rockchip 实现 MPP 硬件编解码和 RGA 图形加速-命令版
最近使用 RK3588 在做音视频项目开发,过程中使用了该芯片提供的硬件编解码和 2D 图形加速能力,发现相比软编解码,硬编解码无论是处理速度、系统负载还是稳定性,都比软编解码强太多了。本文将分享如何使用 RK 提供的 FFmpeg + MPP + RGA,实现一个硬件编解码+2D图形加速的功能,全部使用命令行来完成。后面也会出一篇使用开发库实现的源码版。本文不仅适用于 RK3588,也还适用于其他 RK 系列的芯片,具体的细节出入请参考官方文档。
2025-01-06 08:59:50
25864
83
原创 瑞芯微 RK 系列 RK3588 CPU、GPU、NPU、VPU、RGA、DDR 状态查看与操作
本文介绍瑞芯微 RK 系列 RK3588 CPU、GPU、NPU、DDR、VPU、RGA 的查看与操作方式
2024-12-30 13:40:57
10252
原创 线程池浅析
线程池是一组预先初始化并准备执行任务的线程集合。与为每个任务反复创建线程并在之后销毁它们不同,线程池的做法是维护一组预先创建的线程,这些线程可以被重复利用来同时执行多个任务。通过这种方式,我们可以减少由于线程的创建和销毁所带来的开销。
2024-12-27 09:16:49
583
原创 一文搞懂 RGB 与 YUV
第一个 4 表示每个像素都有一个亮度分量(Y),第二个 4 表示每个像素都有一个 U 色度分量,第三个 4 表示每个像素都有一个 V 色度分量。4:2:0 表示第一个 4 表示每个像素都有一个亮度分量(Y),第二个 2 表示每两个像素共享一个 U 色度分量,第三个 0 表示每四个像素共享一个 V 色度分量(即每两个像素共享一个色度分量)。4:2:2,第一个 4 表示每个像素都有一个亮度分量(Y),第二个 2 表示每两个像素共享一个 U 色度分量,第三个 2 表示每两个像素共享一个 V 色度分量。
2024-12-25 09:31:03
2819
原创 V4L2 使用教程
V4L2,全称为 Video for Linux 2,是 Linux 操作系统上的一个内核框架,旨在支持视频设备。V4L2 是 V4L 的第二版,V4L2 修复了一些设计缺陷,并开始出现在 2.5.x 内核中。它提供了一组 API 和驱动接口,使得用户空间应用程序能够与摄像头和电视卡等各种视频设备进行交互。
2024-12-18 08:01:07
1680
原创 用 docker 搭建一个统一的 buildroot 编译环境
之前在团队协同开发过程中,经常因为每个人开发环境不一致,导致 buildroot 编译有人成功有人失败。为了解决这个问题而进行了一些方案调研,最终选择 docker 这个方案,docker 的优点是轻量化、跨平台,无论是在 windows、linux 还是 mac,都能统一构建环境。本文将手把手教你如何构建一个 docker 镜像并运行容器来编译 buildroot。
2024-12-16 09:00:00
998
原创 WebRTC 详解
之前在做智能家居网关项目时,用到 WebRTC 技术,使用 C++ 实现了浏览器可以通过 WebRTC 直接观看摄像头的功能。这里分享下之前记录的 WebRTC 的笔记。2010 年 5 月,谷歌收购了 Global IP Solutions(简称 GIPS),这是一家专注于 VoIP 和视频会议软件的公司,已开发出 RTC 所需的多项关键组件,如编解码器和回声消除技术。谷歌随后将 GIPS 技术开源,并与 IETF 和 W3C 等标准机构合作,以确保行业共识。
2024-12-13 17:54:23
1382
原创 Linux D-Bus 详解
在构建复杂应用或服务时,经常会遇到进程间通信的问题。DBus 提供了一个高效、可靠的解决方案,使得不同程序之间可以轻松地进行消息交换和远程调用。本篇文章将带你详细了解 DBus 的工作机制及如何在你的项目中有效利用这一技术。D-Bus是 Linux 及其他类 Unix 系统下的一种进程间通信机制(IPC)。那什么是进程间通信机制(IPC)呢?
2024-12-09 09:00:00
4330
原创 基于LVGL9.0、FFmpeg、OpenCV的Linux智能家居监控安防系统(含演示视频)
智能家居监控安防系统是一个集成监控、安防、人脸识别、环境监测、家居控制的一体化系统。视频监控:支持查看摄像头、拍照、录像、直播和检测到人体时自动拍照,支持同时开启或单个开启,支持浏览图片和视频文件;人脸识别:人脸前后比对检测,模拟人脸识别开门的场景;报警设置:检测到人体时自动报警,通过蜂鸣器模拟报警;环境检测:当前环境的温湿度检测,通过MQTT协议通信;家居控制:通过MQTT协议控制LED灯,模拟真实家居控制场景;
2024-07-25 13:51:19
2527
11
原创 基于LVGL9.0、V4L2的Linux相机项目(含演示视频)
Linux相机是一个基于V4L2驱动的项目,支持拍照、调整相机亮度参数、浏览图片、下载图片,提供了 GUI 的交互界面。
2024-07-22 09:00:00
2180
3
原创 Bash Shell 速查表 Cheat Sheet
合并 => foo1 foo2 A B C D# declare 语法Numbers+=(4 5) # 追加 => 1 2 3 4 5myfunc() {echo "你好 $1"# 同上(另一种语法)echo "你好 $1"
2024-07-11 08:55:33
604
原创 C++ 容器 API 速查表 Cheat Sheet
容器适配器(Container Adapters)是一种容器类,它们提供了特定用途的接口,通过限制和重新定义基础容器(如。是一个无序的关联容器,允许多个元素拥有相同的键,使用哈希函数来组织元素。是一个无序集合,允许多个元素拥有相同的键,使用哈希函数来组织元素。可以通过在模板参数中指定自定义哈希函数和比较函数来改变默认行为。可以通过在模板参数中指定自定义哈希函数和比较函数来改变默认行为。可以通过在模板参数中指定自定义哈希函数和比较函数来改变默认行为。是一个无序的关联容器,使用哈希函数来组织元素。
2024-07-10 08:55:20
822
原创 LVGL V9 加载中文字体教程
之前在使用 LVGL v9 进行项目开发过程中,发现默认情况下是不支持显示中文字体的,而我们常常需要在实际项目中显示中文字符,在阅读官方文档并进行一段时间的实践摸索后,最终解决了该问题。本篇文章将先讲解 LVGL 默认内置的几种字体,然后讲解如何更改内置字体引擎的字体,最后再讲解如何使用 freetype 字体引擎。废话不多说,马上进入正题。
2024-07-06 17:13:24
7155
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅