- 博客(28)
- 收藏
- 关注
原创 PCIe建链详解:从硬件握手到驱动加载的完整过程
PCIe建链就是PCIe设备与主机系统建立稳定通信连接的过程,类似于网络握手建立连接。只有建链成功,设备才能正常工作。举个生活中的例子:就像打电话一样,需要先拨号、接通、确认对方身份,然后才能正常通话。PCIe建链就是这个"拨号接通"的过程。CPU├─ PCIe Host控制器(根控制器)├─ PCIe端口0 ──── 显卡├─ PCIe端口1 ──── NPU卡├─ PCIe端口2 ──── 网卡└─ PCIe端口3 ──── 空闲关键角色说明:PCIe Host控制器。
2025-07-25 11:01:40
1603
原创 PCIe设备的驱动程序编写
这是一个自研NPU的pcie_dma的驱动框架,是一套非常规整的pcie设备的驱动代码,具体的细节已经进行脱敏处理,不涉及单位的相关内容。
2025-07-16 10:59:37
421
原创 Linux下PCIe子系统(二)——PCIe子系统框架详解
自动化设备发现: 通过枚举机制自动发现设备标准化管理: 统一的数据结构和接口即插即用支持: 支持热插拔和动态配置层次化设计: 清晰的Host Bridge → Bus → Device架构资源管理: 智能的地址空间分配和管理。
2025-07-10 20:24:03
1305
原创 Linux下PCIe子系统(一)——PCIe基础
PCIe是PCI的进化版本,其中PCI是并行总线,而PCIe是串行总线,在访问设备的寄存器时,PCIe兼容PCI的访问方式。
2025-07-08 17:16:37
1184
原创 DMA学习笔记(二)——DMA传输速率优化
/ DMA描述符结构// 源地址// 目标地址u32 size;// 传输大小// 控制字// 下一个描述符地址u32 status;// 状态字段} __packed;// NPU设备结构// PCI设备// MMIO基地址// DMA相关// DMA描述符环// 描述符环物理地址// DMA缓冲区虚拟地址// DMA缓冲区物理地址// 同步机制// 设备互斥锁// DMA锁// DMA等待队列// DMA忙状态int irq;// 中断号。
2025-07-03 15:42:47
899
原创 DMA学习笔记(一)——宏观层面
*DMA(Direct Memory Access,直接内存访问)**是计算机系统中一种用于提高数据传输效率的技术。DMA的核心思想是允许外部设备(如硬盘驱动器、网卡、显卡等)直接访问系统内存,而无需通过中央处理器(CPU)的直接介入。
2025-07-01 15:40:12
1091
原创 RK3588香橙派5 Pro MIPI摄像头驱动移植技术手册
PinSignal1GND地线2CSI_D0NMIPI数据0负3CSI_D0PMIPI数据0正4GND地线5CSI_D1NMIPI数据1负6CSI_D1PMIPI数据1正7GND地线8CSI_CKNMIPI时钟负9CSI_CKPMIPI时钟正10GND地线11CSI_D2NMIPI数据2负12CSI_D2PMIPI数据2正13GND地线14CSI_D3NMIPI数据3负15CSI_D3PMIPI数据3正。
2025-06-30 14:03:29
2633
原创 嵌入式秋招面经八股(三)
实际上是可以的,但是并不建议这样操作。可以在头文件声明变量(用关键字extern,告知编译器该变量在其他地方定义)和函数,而在源文件中定义变量和函数。
2025-06-19 16:39:19
1023
原创 嵌入式秋招面经八股(二)
移动语义完美转发资源管理智能指针(Smart Pointer)是C++标准库中提供的一种类模板,用于自动管理动态分配内存的生命周期。通过封装普通指针,自动控制资源的释放避免手动调用delete可能导致的内存泄漏、悬挂指针和重复释放等问题三种主要类型:独占所有权,不能复制,只能转移所有权例子:图书馆里的每本书在任何时候只能有一个人所有共享所有权,使用引用计数当最后一个所有者使用完毕后该指针才会被销毁例子:图书馆里的某一本书可以被很多人共享,只有当最后一个读者使用完毕后才会归还。
2025-06-18 09:44:14
1071
原创 嵌入式秋招面经八股(一)
连接性:面向连接,以连接为基本抽象单元端点:每条TCP连接有两个端点(套接字 = IP + 端口号)通信方式:全双工通信首部大小:20字节(不使用选项时)数据传输:连续字节流传输,大数据会拆分成若干部分可靠性:高可靠性,类似快递需要签收确认适用场景:网页浏览、文件传输等需要高可靠性的场景。
2025-06-17 11:43:14
1232
原创 Linux内核之文件系统
文件系统是Linux内核中至关重要的组成部分,它管理着数据的存储、访问和保护。通过理解文件系统的层次结构、类型、核心数据结构和实现细节,开发者和系统管理员可以更好地优化和维护Linux系统。
2025-06-13 10:00:00
807
原创 Linux内核之设备驱动
设备驱动是Linux内核连接硬件与软件的桥梁。通过本文,您可以了解设备驱动的基本概念、分类、结构、开发流程、API、实例及调试方法。
2025-06-12 10:00:00
708
原创 Linux内核之进程管理
在 Linux 中,进程是一个正在运行的程序实例。它不仅包含程序的代码,还包括数据和系统资源。进程是 Linux 执行的基本单位,内核通过管理进程实现多任务处理。Linux 进程管理涵盖了从创建到终止的完整生命周期,涉及调度、通信和资源管理,在学习过程中可以参考本大纲,结合大语言模型进行详细学习。
2025-06-11 15:39:46
1098
原创 Linux内核之内存管理
NUMA(Non-Uniform Memory Access,非统一内存访问)是一种多处理器系统的内存架构。内存被划分为多个节点(node),每个节点与一个或多个处理器核心相关联。处理器访问本地节点内存的延迟较低,访问远程节点内存的延迟较高。以上是我自己学习内存管理时所做的笔记,很多抽象的东西用了通俗的语言来解释清楚,方便在学习的过程中理解,如果你正好是在学习内存管理的相关内容,可以以我的笔记作为参考,如果你是需要突击内存管理相关的知识,也可以结合着大语言模型来进行学习。
2025-06-10 21:30:33
1024
原创 【RK3588使用线程池运行yolov5(四)】
在前面我们已经知道可以使用线程池来实现推理,大家可以在github上找到相关的代码,在本节我们从模型的优化的角度以及模型的底层来探讨下训练好的模型best.ot到best.onnx,.onnx到.rknn过程中内部发生的变化。
2025-05-29 11:09:57
654
原创 版本管理工具之Git
git config --global user.name “xzw” //配置用户名git config --global user.email xzw_0617@163.com //配置邮箱git config --global credential.helper store //记住用户名和邮箱。
2025-05-20 19:00:00
691
原创 Linux下V4L2子系统框架
V4L2子系统是Linux内核中关于video设备的API接口,向上为虚拟文件系统提供了统一的接口,应用程序可以通过虚拟文件系统访问video设备;向下给video设备提供接口,同时管理所有的video设备,video设备又分为主设备和从设备,对于Camera来说,Camera Host控制器为主设备,负责图像数据的接收和传输,从设备为Camera Sensor,一般为I2C接口,可以通过从设备控制Camera采集图像的行为,如图像的大小,图像的FPS等。
2025-05-19 20:36:42
1005
原创 OpenCV的常用用法(C++版)
-返回值:无--参数:--InputArray image:传入的图片名称--OutputArray edges:传出的图片名称如果有具体的数字在括号里输入--double fx = 0, double fy = 0:如果没有具体的数字,后面两位是按照比例进行缩放。
2025-04-01 15:29:18
2418
3
原创 RK3588使用OpenCL编程(二)
在本节中我们将分别使用rk3588中的CPU和GPU来进行图像边缘检测算法,通过计时来评估是用GPU进行图像处理时的性能提升。
2025-02-06 21:46:26
900
原创 【yolov5】onnx转rknn
进入解压后的文件夹examples/onnx/yolov5文件夹中,此时可以看到的目录结构,其中test.py为转换文件,dataset.txt为则是图片的名字,bus.jpg为测试图片,还会有一个官方提供的yolov5的onnx模型。我在最初进行转换后不能用官方的demo,一旦运行,香橙派直接死机,我是按照这个大佬重新下载了1.5.2的包。而后输出检测结果,并且在该文件中输出一张在rk3588上模拟运行的图片,在这里可以完成,通常说明已经完成了模型的转换。进去后直接下载即可,在虚拟机中解压。
2025-01-20 20:54:06
2453
原创 RK3588使用OpenCL编程(一)
OpenCL(Open Computing Language开放计算语言)是一种开放的、免版税的标准,用于超级计算机、云服务器、个人计算机、移动设备和嵌入式平台中各种加速器的跨平台并行编程。
2024-12-05 11:42:44
2361
原创 【RK3588使用线程池运行yolov5(三)】
格子399有类别0的概率,格子0有类别1的概率,格子1有类别1的概率,格子2有类别1的概率…1、首先进过推理,已经将每个框中的置信度存储在上面数组中的c中了,然后我们此时来检查遍历每个框的置信度,如果置信度大于我们设定的阈值(如0.5),就把这个框进行相关的处理,并且把框的坐标存储在某个数据结构中,这个置信度只是说明yolo认为有80类里面的东西,我们需要再去找到最大的类别和该类别对应的概率,分别存储进去。在这里不过多的讲了。--------------yolov5的后处理阶段。
2024-11-22 17:10:54
2080
1
原创 【RK3588使用线程池运行yolov5(二)】
首先大家要知道,对于任何一个模型而言,它对于输入输出的大小以及特点都会有一定的要求,就好比模型是一个门,门上有把锁,打开门的方法就是插入钥匙,yolov5要求的图片是一个640×640的,你给它一张1280×720的图片,这个时候当然就会有问题,所以对于一个模型,我们就需要知道他的输入的要求和输出的要求。4、到这里,我们就将输入图片的参数都设置成yolov5所需要的参数,然后我们需要把这些参数封装成一个结构体数组,并且相当于告诉这个模型,“我已经封装好了,我把参数告诉你”,这步就是设置模型输入。
2024-11-01 22:38:36
944
原创 【RK3588使用线程池运行yolov5(一)】
对于读取到的视频,,我们需要将其中的视频帧进行存储,对于一个时长为8秒,帧率为30的视频而言,其读取的视频帧总数为240帧,然后对每帧视频进行处理,然后再将其经过固定的编码输出为一个视频,所以我们先定义一个存储视频帧的结构体,结构体有两个部分组成,分别是该帧图片的下标和图像。然后考虑使用三个线程分别进行将视频帧的存储到这个队列中、对视频帧处理后存储到另一个队列中(需要再定义一个队列来存储处理后的视频帧)、将处理后的视频帧按照不同的编码规则输出为不同的视频。下面定义第二个结构体变量,用来存储处理后的视频帧。
2024-10-26 17:34:29
916
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅