自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 在 Windows 笔记本上实现一个端侧多模态大模型推理平台:C++ 无锁队列、NVRTC 手写算子、INT8 张量核与 CUDA Graph

记录一个端侧 VLM 推理平台的实现细节:数据通路怎么做到零拷贝、算子怎么在无 CUDA Toolkit 的机器上手写并 JIT 执行、图优化怎么落地、INT8 怎么跑到张量核上、解码开销怎么从 789 ms 压到 4.4 ms。

2026-10-26 12:28:53 227

原创 NVIDIA Jetson TX2 部署 YOLOv3-tiny 实战:GPU 推理与无显示器实时检测

本文基于 Ubuntu 16.04、CUDA 9.0 和 L4T R28.3.1 的实测环境,介绍如何在 Jetson TX2 上运行 YOLOv3-tiny,并通过浏览器查看板载摄像头的检测结果。文末提供完整应用代码。本文适用于旧环境复现,不是新版 JetPack 的通用安装教程。

2026-09-17 21:53:32 280

原创 SDIO子系统研究

tty框架提供了一套函数指针表,一套辅助函数这是函数指针表#endif在tty_port.c中定义了大量的辅助函数,这里截取部分/***/return;return 0;tty提供了一套函数指针表,一套辅助函数,注册tty需要实现函数指针表,过程中可以调用辅助函数。

2026-07-20 20:04:46 331

原创 V4L2研究

由于硬件的复杂性,同时 v4l2 驱动要支持 IC 模块进行音视频的混合编解码操作,v4l2 的驱动变得异常复杂。老旧的 v4l2 框架仅限于通过 video_device 结构体创建 v4l 设备节点和 video_buf 来处理视频数据。这意味着所有的驱动都必须对设备实例进行设置并将其映射到子设备上。有些时候这些操作步骤十分复杂,很难正确完成,并且有些驱动程序从来没有正确的按照这些操作步骤编写。由于缺少一个框架,有很多通用代码就没有办法被重构,从而导致这部分代码被重复编写,效率比较低下。

2026-07-11 21:07:12 488

原创 SPI子系统研究

层最核心结构关键回调/操作功能驱动模型bus_typedevicematch()probe()remove()设备-驱动匹配与生命周期SPI 核心spi_masterspi_devicespi_sync总线管理、消息泵、传输抽象HOST 控制器configtriggerintctrl硬件寄存器操作、PIO/DMA、中断设备驱动readwriteioctl用户态接口、bounce buffer用户接口(定义在 spidev.h)opencloseioctl用户态 SPI 控制。

2026-07-05 20:50:24 233

原创 设备驱动管理

匹配方式驱动中提供什么设备中提供什么匹配依据DT 节点的compatible字符串匹配id_tableid_table数组modalias字符串匹配name 回退字符串比较。

2026-07-03 12:07:08 42

原创 工具函数与 DMA 支持

内联函数(inline function)是 C/C++ 中用关键字修饰的函数。代码不产生真正的函数调用,而是把函数体直接"贴"到调用处。对比一下// spi.h设备驱动调程序执行到这里→ 把参数 spi, data, 8 压栈→ CALL spi_write 的地址 ← 有跳转开销→ 执行 spi_write 的函数体→ RET ← 有返回开销→ 继续执行// spi.h程序执行到这里← 直接把函数体贴进来→ 继续执行 ← 没有 CALL/RET 的开销。

2026-07-01 21:44:11 246

原创 消息泵与传输调度

spi_read()

2026-06-30 23:38:20 143

原创 链表相关知识总结

/ 指向下一个节点// 指向上一个节点野指针是指向已释放或无效内存的指针。访问野指针会导致不可预测的后果——可能读/写到了别人的内存。

2026-06-30 20:44:32 223

原创 Master 的生命周期管理

四个结构体构成 SPI 子系统的骨架。

2026-06-29 18:55:56 531

原创 Linux源码补充

是把spi_init注册到内核启动的第 2 级初始化序列中,让它在其他更晚的子系统(如文件系统、设备驱动)启动之前先被执行,执行完后整个.init段内存被释放回收。宏是源头标签——编译时给代码贴上"我属于哪个段";链接脚本是收集器——链接时把贴了同标签的所有碎片拼成连续数组,并生成边界符号让内核能在运行时遍历它。缺了前者东西放不对缺,少了后者东西放对了但找不到。spi_init这个宏是整套 initcall 机制的枢纽。一行行拆开看。两行,四个部分。

2026-06-28 21:28:48 192

原创 SPI子系统研究框架

│ SPI 子系统的三块基石 ││ | ││ ① 分层解耦 ││ 设备驱动 ←→ 核心层(回调接口) ←→ 控制器驱动 ││ "发什么数据" 合约 "怎么发数据" ││ ││ ② 调度标准化 ││ 并发入队 → kthread 消息泵 → 顺序执行 → 完成 ││ 把"排队"和"干活"分开 ││ ││ ③ 同步/异步统一 ││ 同一条路径,同一个结构体 ││ 区别只在 complete 回调指向谁 ││ ││ ④ 设备发现统一 │。

2026-06-28 21:03:09 488

原创 SPI 子系统 对比 操作系统

—它有调度器(消息泵)、同步/异步 IO 模型、中断驱动、多种锁机制、甚至支持实时优先级。只不过它不管理 CPU 时间片,而管理 spi_message 在总线上的传输顺序。如果某个 SPI 设备对延迟敏感(比如音频编解码器),controller 驱动设。OS 的调度器从 runqueue 里挑进程,SPI 的消息泵从。时进程被 blocking,异步路径就像投递一个 AIO 请求。,消息泵线程就获得了接近实时的调度优先级。里挑 message。下面从几个维度逐条对比。

2026-06-28 14:58:42 221

原创 Linux学习笔记

Linux 驱动的核心思想是,通过一个中介(bus)来撮合设备和驱动。

2026-06-27 13:14:23 318

原创 SPI 总线注册

是把spi_init注册到内核启动的第 2 级初始化序列中,让它在其他更晚的子系统(如文件系统、设备驱动)启动之前先被执行,执行完后整个.init段内存被释放回收。宏是源头标签——编译时给代码贴上"我属于哪个段";链接脚本是收集器——链接时把贴了同标签的所有碎片拼成连续数组,并生成边界符号让内核能在运行时遍历它。缺了前者东西放不对缺,少了后者东西放对了但找不到。spi_init这个宏是整套 initcall 机制的枢纽。一行行拆开看。两行,四个部分。│。

2026-06-26 22:14:18 804 1

原创 Hi3516CV610 + MPU6050学习

本文流程:姿态解算 → 视频防抖。硬件分析| 芯片 | 陀螺仪噪声 (dps/√Hz) | 推荐度 | 说明 || ICM-42688-P | 0.0028 | ⭐⭐⭐ | 最优选择,超低噪声 || BMI160 | 0.007 | ⭐⭐ | 低功耗场景 || MPU6050 | 0.005 | ⭐⭐ | 成本最低,货源充足 |选择mpu6050用于学习。

2026-06-25 15:24:47 636

原创 hi3516cv610与mpu6050具体通信实现

mpu6050SCL连接丝印图2,SDA连丝印图1,外接电源,AD0接地。向地址0x11130050写入0x1103。向地址0x11130054写入0x1103。软件开启复用i2c2。6050默认睡眠模式。

2026-06-21 16:54:43 875

原创 hi3516MPP链路学习

码流获取线程:sample_easyvenc_comm_venc_start_get_stream 创建一个独立线程 (sample_easyvenc_comm_venc_get_venc_stream_proc),用于循环监听编码器输出。sample_venc_online_wrap_sys_init 函数通过调用底层的sample_comm_sys_init_with_vb_supplement 接口来完成 VB (Video Buffer) Pool 的配置。

2026-06-19 16:17:05 297

原创 用ai辅助看SDK代码技巧

1.分出SDK的目录层级,查看每个目录的功能。3.生成函数调用图谱。

2026-06-17 22:18:13 231

原创 嵌入式Linux多媒体开发 — 知识点详解汇总

本文为嵌入式Linux多媒体开发教程摘要,基于全志V853平台和东山PI-AICT开发板,涵盖以下核心内容: 技术体系:以全志MPP多媒体平台为核心,覆盖图像处理(YUV/RGB/RAW)、视频编解码(H.264/H.265)、RTSP流媒体和AI推理等技术栈。 开发环境:详细说明Tina SDK编译流程、MPP程序开发方法,以及开发板烧录配置(PhoenixSuit工具+串口调试)。 核心知识: 图像处理:颜色模型(RGB/YUV/HSV)、位深、FourCC编码标准 视频技术:编解码原理、MPP模块(V

2026-06-16 21:24:55 538

原创 hi3516源码目录分析

│ │ │ │ │ ├── smart_sc4336p/ # 思特威 SC4336P (4MP/3MP/2MP)│ │ │ │ │ ├── smart_sc431hai/ # 思特威 SC431HAI (4MP)│ │ │ │ │ ├── smart_sc450ai/ # 思特威 SC450AI (4MP)

2026-06-16 20:00:49 337

原创 socat端口转发推流

PC通过IMX6ULL中转拉取HI3516视频流方案 采用轻量级TCP端口转发工具socat实现高效中转,规避IMX6ULL性能瓶颈。关键步骤:1)交叉编译静态版socat(禁用FIPS,减少依赖);2)确认HI3516使用TCP interleaved模式(仅需转发554端口);3)IMX6ULL运行socat TCP-LISTEN:8554,fork,reuseaddr TCP:摄像头IP:554;4)PC端通过VLC访问rtsp://IMX6ULL_IP:8554/0。该方案资源占用低,无需复杂协议转

2026-06-15 23:14:23 438

原创 imx6ullpro的WiFi启动问题

查找驱动:find /lib/modules/$(uname -r) -name "*.ko" | grep -i -E "8188|8723|rtl|wlan"连接WiFi:wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf。加载驱动:insmod /lib/modules/4.9.88/extra/8723bu.ko。查找SSID:iw dev wlan0 scan | grep SSID。动态获取IP:udhcpc -i wlan0。

2026-06-15 18:25:28 479

v4l2.pdf【多媒体驱动】V4L2子系统架构与数据流管理:Linux视频设备驱动设计与实现

v4l2学习内容概要:本文深入解析了Linux系统中V4L2(Video for Linux 2)框架的设计原理与实现机制,重点阐述其作为视频设备驱动核心子系统所承担的三大职责:设备节点管理、标准化控制接口定义及视频数据流搬运。文章通过剖析v4l2_device、v4l2_subdev、video_device和media_device等关键数据结构,揭示了V4L2如何抽象复杂硬件并构建统一模型。同时,详细梳理了设备注册流程、ioctl命令分发机制以及基于videobuf2框架的数据缓冲区管理,特别是其状态机设计和三种I/O方式的支持。此外,针对复杂音视频系统,介绍了引入Media Controller子系统和subdev机制来管理多模块拓扑连接与数据流管道(pipeline)的必要性与实现方式。; 适合人群:具备Linux设备驱动开发基础,熟悉字符设备、ioctl及DMA操作,从事音视频相关驱动或系统开发的工程师。; 使用场景及目标:①理解V4L2框架的整体架构和数据流、控制流分离的设计思想;②掌握编写符合V4L2规范的摄像头、ISP等音视频设备驱动的方法;③学习如何利用Media Controller管理具有多个子设备(如Sensor、CSI、ISP)的复杂硬件拓扑;④深入理解videobuf2框架下缓冲区的生命周期管理和高效数据传输机制。; 阅读建议:此资源理论与实践紧密结合,建议读者结合内核源码(如文中提到的airspy.c、uvc驱动等实例)进行对照阅读,并动手搭建简单的V4L2驱动环境以调试和验证文中所述的注册流程、ioctl调用链及数据流传输过程,从而获得更深刻的理解。

2026-07-14

空空如也

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

TA关注的人

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