自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [驱动之路(九)——UART(串口)子系统]学习总结,万字长篇,一文彻底搞懂UART(串口)子系统(含串口数据收发流程解析)

本文详细介绍了UART(通用异步收发传输器)的工作原理及其在Linux系统中的实现架构。主要内容包括:UART的基本概念、连接方式和通信参数;Linux系统中TTY/终端/控制台等关键概念的区别;UART子系统在Linux内核中的四层架构(tty_io层、行规程层、串口核心层和硬件驱动层);字符设备驱动的两种注册方法对比;以及完整的UART数据读写流程。文章通过发送字符"A"的示例和"Hello"传输的场景分析,深入剖析了从应用程序到硬件层面的数据传输过程,包括中断处

2025-12-25 20:40:09 1673

原创 [驱动之路(八)——GPIO子系统]学习总结,万字长篇,一文彻底搞懂GPIO子系统(含GPIO控制器驱动框架解析)

摘要:本文详细介绍了Linux内核中的GPIO子系统框架。主要内容包括:1)GPIO子系统概述及其硬件无关性、设备树配置等优势;2)子系统组成与使用流程,重点说明Pinctrl和GPIO子系统的分工;3)设备树中GPIO的描述方法;4)驱动开发中两种API体系对比及推荐使用的描述符体系;5)GPIO子系统架构和gpio_device、gpio_chip、gpio_desc三大核心数据结构;6)GPIO控制器驱动开发流程;7)与Pinctrl子系统的交互机制;8)完整的GPIO控制器驱动框架示例。文章通过层次

2025-12-22 13:36:13 603

原创 [驱动之路(七)——Pinctrl子系统]学习总结,万字长篇,一文彻底搞懂Pinctrl子系统(含Pin Controller驱动框架解析)

本文总结了Linux内核中Pinctrl子系统的核心概念与实现框架。Pinctrl子系统用于管理芯片引脚的复用功能(如GPIO、I2C、UART等)和电气特性配置。主要内容包括:1)子系统基本概念,区分PinController和GPIOController的功能;2)设备树中的关键概念如引脚状态、引脚组和功能复用;3)核心数据结构包括pinctrl_desc、pinctrl_dev和三大操作集(基础引脚、复用和配置操作);4)数据流转过程及BSP工程师与驱动工程师的分工协作;5)提供了一个完整的虚拟Pin

2025-12-21 13:37:43 1186

原创 [驱动之路(六)——USB子系统]学习总结,万字长篇,一文彻底搞懂USB子系统(通用USB设备驱动框架和程序流程解析)

USB技术详解:从硬件到驱动的完整解析 摘要:本文全面解析USB技术体系,涵盖硬件架构、通信协议和设备驱动开发。USB系统采用主从式星型拓扑结构,包含主机控制器、集线器和功能设备三类硬件组件。通信过程通过差分信号传输数据,采用NRZI编码和位填充机制确保同步。协议层定义了令牌包、数据包、握手包等传输单元,支持控制、批量、中断和同步四种传输类型。设备枚举过程通过描述符层级结构实现自动识别和配置。驱动开发采用标准的BUS/DEV/DRV模型,核心是通过URB实现异步数据传输。文章详细阐述了USB设备状态机、速率

2025-12-20 11:34:46 1022

原创 [驱动之路(五)——SPI子系统]学习总结,万字长篇,一文彻底搞懂SPI子系统(含通用SPI设备驱动和控制器驱动框架流程解析)

摘要:本文详细介绍了SPI协议及其在嵌入式系统中的应用。SPI是一种全双工同步串行通信接口,采用主从架构,通过四线制(MOSI、MISO、SCLK、CS)实现短距离通信。文章阐述了SPI的4种工作模式(由CPOL和CPHA决定),并分析了Linux内核中的SPI驱动框架,包括重要结构体(spi_master、spi_device、spi_transfer等)和设备树配置方法。特别介绍了内核自带的spidev驱动和自定义SPI驱动的实现方案,对比了主从模式的区别,并提供了SPI控制器驱动程序的两种实现框架(传

2025-12-17 12:31:03 956

原创 [驱动之路(四)——中断子系统]学习总结,万字长篇,一文彻底搞懂中断子系统(含通用中断控制器驱动框架使用和解析)

本文系统介绍了中断机制及其在Linux系统中的实现框架。首先分析了中断的基本概念和工作流程,包括初始化、响应和处理三个阶段。重点阐述了ARM架构的异常向量表机制及其在Linux内核中的实现方式。文章详细解析了Linux中断子系统的演进过程,包括硬件中断、软件中断以及上半部/下半部机制的设计思路。深入剖析了GIC中断控制器的工作原理和驱动框架,对比了链式与层级两种中断控制器架构的实现差异。最后,通过代码示例详细展示了链式和层级中断控制器的驱动程序开发框架,包括设备树配置、IRQ Domain管理、中断处理流程

2025-12-13 12:47:38 1135

原创 [驱动之路(三)——PCI/PCIe子系统]学习总结,万字长篇,新手友好,一文彻底搞懂PCI/PCIe子系统(含驱动框架解析、代码分析)

本文系统介绍了PCI/PCIe总线技术及其实现机制。首先对比了PCI(并行共享总线)和PCIe(高速串行点对点)的核心差异,重点阐述了PCIe的三层协议栈和三种路由方式(基于ID、地址和隐式路由)。详细解析了RK3399 SoC中PCIe控制器的架构设计,包括地址空间划分、寄存器配置机制和访问流程。深入分析了Linux内核中PCIe驱动的工作流程,从设备树解析、资源分配到设备枚举的全过程。最后全面介绍了PCI/PCIe子系统的三种中断机制(INTx、MSI、MSI-X)及其实现原理,特别说明了在RK3399

2025-12-09 18:20:35 1166

原创 [驱动之路(二)——I2C子系统] 学习总结,万字长篇,一文彻底搞懂I2C子系统(含通用I2C设备驱动和控制器驱动框架解析)

本文系统介绍了I2C总线协议及其在Linux内核中的实现框架。主要内容包括:1. I2C协议基础:双线通信机制、主从架构、传输时序等核心特性;2. Linux I2C子系统关键结构体:i2c_adapter、i2c_client、i2c_driver等;3. 驱动架构分析:详细剖析了通用i2c-dev接口和专用设备驱动两种访问路径;4. 总线-设备-驱动模型:深入讲解匹配机制和设备创建方式;5. 开发框架:提供完整的I2C设备驱动和控制器驱动实现模板。文章从硬件原理到软件实现,全面覆盖了I2C技术在嵌入式L

2025-11-29 10:00:14 1470

原创 [驱动之路(一)——设备树概述]:详细分析 DTB、DTS、DTSI、DTBO 的区别、用途及它们之间的关系

DeviceTree(设备树)是Linux内核中描述硬件的机制,包含多种文件类型:DTS是描述具体硬件平台的源文件;DTSI是可复用的公共模板文件;DTB是编译后的二进制文件,由内核解析;DTBO是动态修改设备树的覆盖文件,支持硬件模块化配置。设备树机制提高了硬件描述的灵活性和可维护性,特别适用于ARM平台和动态硬件配置场景。

2025-11-24 10:48:00 1059

原创 在香橙派5上测试OV13855摄像头,解析生成的设备节点

本文记录了在香橙派5开发板(Cam1接口)上测试OV13855摄像头的完整过程。通过v4l2-ctl命令分析设备节点,发现/dev/video11是ISP处理后的主输出通道,适合直接使用。使用GStreamer管道(v4l2src→jpegenc→filesink)成功捕获测试图像quick_test.jpg,验证了摄像头功能正常。文中详细说明了各视频设备节点的用途,并指出普通用户应使用ISP处理后的视频节点进行图像采集。

2025-11-19 10:17:35 1756

原创 视频编解码中GOP的概念

GOP(Group of Pictures)是视频编码中由I帧、P帧和B帧组成的图像组。I帧是独立完整的关键帧,P帧通过前向预测编码,B帧通过双向预测编码。GOP长度(gop_len)影响视频性能:短GOP(如30帧)利于随机访问但文件较大,适用于直播;长GOP(如250帧)压缩率高但检索慢,适合点播存储。合理设置GOP结构能平衡视频质量、压缩率和访问性能。

2025-11-18 09:34:32 355

原创 解析条件编译(extern “C“ {...})含义及其作用

对于 C 编译器,它看不到 extern "C"(因为 #ifdef __cplusplus 条件不成立),所以会按照正常的 C 规则编译。这样,在 extern "C" 块中声明的函数,就会保持其原始的、未被修饰的名称,从而能够与已经编译好的 C 语言目标文件(.o 或 .lib)正确链接。对于 C++ 编译器,它会看到 extern "C" { ... },从而按照 C 语言的规则处理函数名,保证能链接到 C 库。但在链接时,它却会去寻找被 C 编译器编译的、未经修饰的函数名,结果就是。

2025-11-17 19:48:13 518

原创 为什么现代大多数视频编解码器要求输入YUV格式的视频,而不是RGB或BGR?

格式。

2025-11-16 19:17:11 624

原创 终端命令:重定向相关使用方法

该命令执行当前目录下的app程序,将标准错误重定向到标准输出,使两者合并后通过管道传递给tee命令。tee命令会将程序的输出同时显示在终端并保存到log.txt文件中。这样既能实时查看程序输出,又能将完整的运行日志(包括错误信息)记录到log.txt中,便于后续调试和分析。

2025-11-16 11:56:28 564

原创 ubuntu虚拟机部署nginx服务器(开发板进行推流,服务器端拉流)

本文详细介绍了Nginx服务器搭建RTMP直播服务的完整流程。首先安装编译环境和Nginx 1.18.0源码,配置RTMP模块及OpenSSL支持。重点说明了编译参数设置和nginx.conf文件中RTMP服务器的配置方法,包括监听端口、块大小和应用设置等。随后介绍了服务器启动、停止及重载配置的操作命令。最后给出测试推流拉流的方法,使用FFmpeg进行视频推流和播放测试,并强调服务器与客户端需处于同一网段。整个流程涵盖从环境搭建到功能测试的全过程。

2025-11-13 08:57:25 900

原创 解决方法:主机里没有VMnet8适配器选项,导致不能远程连接虚拟机

摘要:Ubuntu24.04虚拟机使用NAT模式时,Xshell无法连接虚拟机。问题原因在于主机缺少VMwareVMnet8适配器,导致主机与虚拟机互访受阻。解决方法为在VMware虚拟网络编辑器中勾选VMnet8的"将主机虚拟适配器连接到此网络"选项并应用设置。该问题源于NAT服务配置变动,导致主机虚拟适配器未正确连接网络。

2025-11-13 08:54:21 199

原创 ubuntu虚拟机的屏幕自适应大小;和windows之间相互复制粘贴

摘要:在Ubuntu系统中安装VMware Tools的步骤为:首先更新软件源(sudo apt update),然后安装支持包open-vm-tools和open-vm-tools-desktop(sudo apt install),最后重启系统(sudo reboot)即可完成安装。该过程简单快捷,适用于虚拟机环境配置。

2025-11-12 11:33:30 181

原创 RK3588编译安装MPP框架,并解决“undefined symbol: mpp_buffer_sync_begin_f”

瑞芯微(Rockchip)的 MPP(Media Process Platform) 框架是一个专为 Rockchip SoC芯片设计的多媒体处理中间件,其核心作用是提供统一的硬件加速媒体处理接口,帮助开发者高效实现视频/图像编解码及后处理任务,让上层应用(如 FFmpeg、GStreamer)轻松调用硬件加速,而无需深入驱动细节。

2025-11-12 10:33:17 1827

原创 多媒体音视频处理中的关键流程和概念

编码器(如H.264、H.265、AV1)接收一连串的YUV图像帧。它运用复杂的算法(如运动估计、帧内预测、变换量化等)去除画面在空间和时间上的冗余信息,将庞大的原始数据压缩到一个极小的体积。输出的是一个被称为“码流”的、经过压缩的二进制数据。它会把第2步生成的视频编码码流,连同同样经过压缩的音频码流(如AAC、MP3)、字幕、元数据(如标题、分辨率、封面)等,按照一定的结构规则打包在一起,形成一个单独的文件。它定义了像素点的颜色是如何由几个分量(如R/G/B或Y/U/V)构成的。这是最底层的数据表示层。

2025-11-09 10:14:54 207

原创 配置编译32位ARM架构的Linux内核基本步骤(以韦东山的100ask_imx6ull开发板为例)

作用:这是一个比 make clean 更彻底的清理命令。它不仅会删除编译产生的目标文件和依赖文件,通常还会删除最终的内核镜像、配置文件等,将源代码树恢复到几乎未配置和编译的状态。执行这个命令通常是为了从一个完全干净的状态开始新的构建,避免之前构建的残留文件导致问题。作用:它会将当前内核目录中 arch/arm/configs/ 路径下名为 xxx_defconfig (针对特定32位ARM架构开发板)的预设配置文件,复制为当前内核源码根目录下的 .config 文件。zImage:这是指定要编译的目标。

2025-11-06 19:38:20 411

原创 Linux系统中,常见解压缩命令(包含各种压缩格式)

解压# 压缩tar -czf filename.tar.gz directory/# 解压# 压缩tar -cjf filename.tar.bz2 directory/# 解压# 压缩tar -cJf filename.tar.xz directory/# 解压# 压缩zip -r filename.zip directory/# 解压# 压缩rar a filename.rar directory/# 解压# 压缩。

2025-11-05 10:31:36 808

原创 Git常见命令,推送内容到Github上,并从Github上拉取内容

【代码】Git常用命令。

2025-10-23 14:15:48 684 1

原创 快速入门(不用指令),使用VSCode和Git管理代码和提交到远程服务器(GitHub)

【代码】快速入门(不用指令),使用VSCode和Git管理代码和提交到远程服务器(GitHub)

2025-10-22 19:14:04 1024 1

原创 在香橙派5(Orange Pi 5)上使用RKNN推理YOLOV5s模型时,出现“E RKNN: [19:29:08.373] failed to submit!......”解决方法 !!!

在使用香橙派官方的RKNN库进行YOLOv5s模型推理时,出现以下报错我使用的ubuntu系统版本6.1.43;RKNN runtime库版本为1.5.3;内核的NPU驱动版本为0.9.3。

2025-10-20 09:31:53 410

原创 cmake快速入门,使用cmake构建整个项目

之前一直使用Makefile,但它的语法比较复杂,并且需要手动处理不同平台的差异,因此学习了一下cmake的使用方法,其具有以下优势:1)可以生成不同平台(Linux、Windows、macOS)下的构建文件,如通过cmake生成Makefile2)自动检测编译器、库、头文件等环境配置,无需手动在 Makefile 中编写复杂规则3)配置脚本(CMakeLists.txt)语法更高级、简洁,支持变量、函数、模块等,更易维护大型项目。

2025-10-16 12:31:56 369

原创 `pkg-config --cflags --libs opencv4`解析

获取编译时需要的参数,如:库文件路径(-I 选项)--------------I 是大写i。获取链接时需要的参数,如:要链接的库(-l 选项)--------------l是小写L。指定要查询的包名称,这里对应opencv4版本。

2025-10-16 10:23:20 525

原创 vscode解决:包含头文件时,下方出现波浪线并“检测到 #include 错误.....”

Linux上已经下载了opencv库vscode编写代码时,头文件下方出现波浪号,并出现“检测到 #include 错误.......”

2025-10-15 18:29:39 258

原创 香橙派5(Orange Pi 5)从配置到ssh远程连接VScode

从页面下载(其他板子选择对应的即可)的系统镜像压缩包和系统烧录工具。​​压缩包解压后,获得以“.img”结尾的文件就是我们需要的系统。​安装烧录工具(我使用的是安装版本),得到balenaEtcher。​。

2025-10-15 11:57:13 1187 1

空空如也

空空如也

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

TA关注的人

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