- 博客(19)
- 收藏
- 关注
原创 DMA学习笔记(二)——DMA传输速率优化
楼主之前在实习期间接手了一个NPU芯片PCIe驱动的性能优化工作,主要任务是解决DMA传输效率低下的问题。经过深入分析和优化,最终将DMA传输性能平均提升了28.5%,其中16MB大文件传输速度从3.2GB/s提升到4.05GB/s。在实际项目中,性能优化往往需要深入理解硬件特性,结合软件算法设计,才能取得理想的效果。核心思想是将大的传输拆分成多个小块,使用描述符链进行批量传输,只在最后一个描述符产生中断。如有技术问题,欢迎交流讨论。单描述符传输:每次传输都使用一个描述符,无法充分利用硬件的批量传输能力。
2025-09-27 19:47:41
400
原创 DMA学习笔记(一)——宏观层面
*DMA(Direct Memory Access,直接内存访问)**是计算机系统中一种用于提高数据传输效率的技术。DMA的核心思想是允许外部设备(如硬盘驱动器、网卡、显卡等)直接访问系统内存,而无需通过中央处理器(CPU)的直接介入。之前在实习的过程中需要在内核层完成相应的DMA优化,所以这里是整理的一些DMA的基础知识。时间轴: ---|---|---|---|---|---|---|---|---|---MUL R6, R1, R4 // R6 = R1 * R4 (寄存器运算)
2025-09-27 19:41:53
128
原创 Linux内核之内存管理
此时如果有某个请求需要4KB的内存,分配器会从请求的 order 开始查找可用块,如果没有,则递增 order 一直查找,直到找到合适的,然后逐级拆分到目标 order,会依次对order=11的大块进行拆分,拆分成两个order = 10的两个,加入order = 10 维护的链表中,然后order = 10 的链表中的一个内存块会继续拆分,直到一直拆分为order = 0的时候,将4KB的内存分配给请求。会尽量讲到最底层的相关知识,里面的所有内容都掌握,在工作面试中应该在这一部分有太大的问题。
2025-09-27 19:38:43
704
原创 Linux下PCIe子系统(二)——PCIe子系统框架详解
Linux下PCIe子系统(二)——PCIe子系统框架详解1. 概述PCIe(PCI Express)子系统是Linux内核中负责管理PCI/PCIe设备的核心组件。它提供了一套完整的框架来发现、配置和管理PCI设备,实现了设备的即插即用和热插拔功能。2. 核心数据结构PCIe子系统使用以下核心数据结构来组织和管理设备:2.1 主要数据结构2.2 数据结构关系3. 驱动框架基础3.1 设备分类Linux设备驱动将设备分为三大类:字符设备 - 顺序访问的设备(如串口、键盘)
2025-09-27 19:37:08
701
原创 Linux内核之进程管理
Linux 操作系统中的进程管理是内核的核心功能之一,负责创建、调度、执行和终止进程,以确保系统高效、稳定地运行。本笔记将深入探讨 Linux 进程管理的方方面面,从基础概念到实现细节,涵盖进程的定义、创建、状态、调度、通信、线程、进程组、会话、系统调用、工具以及内存和权限管理等内容。execle(const char *path, const char *arg, ..., char *const envp[]):指定环境变量。用户 ID (UID) 和组 ID (GID):标识进程的所有者和权限组。
2025-09-27 19:28:49
809
原创 讲讲PCIE总线
这七种链路规格的通道数量分别为1组、2组、4组、8组、12组、16组和32组,对应的标识分别采用x1、x2、x4、x8、x12、x16和x32,不同规格的链路也和相应长度的物理插槽规格相匹配。PCI总线采用多总线桥(Multi-Bus Bridge)的设计思路,允许计算机系统中的不同总线连接起来,支持更高的数据传输速率和更复杂的系统架构。PCI总线采用的是共享并行数据总线架构,这意味着多个设备需要共享总线资源,并就单独访问总线进行协商,这限制了系统的扩展性和性能。总线是计算机硬件之间的高速公路。
2025-08-18 23:26:43
506
原创 PCIE学习
所以使用枚举的方式。1、PCIe总线是PCI总线的进化版本,PCI是并行总线,PCIe是串行总线,通常会认为是并行比串行的速度更快,但是在高速传输时,如果时并行,则发送N个信号必须要保证在接收端必须要保证所有数据线同一时刻采样,这样就会导致时钟频率不能太高、传输距离不能太远、必须增强抗干扰的能力。3、PCIe有自己的地址空间【BAR】,每个PCIe设备至多有6个BAR区域,有这么多的BAR区域主要是因为会有不同的作用,PCIe定义了三种BAR类型,分别是内存地址空间、I/O地址空间、配置地址空间。
2025-08-18 23:23:41
479
原创 PCIe建链详解:从硬件握手到驱动加载的完整过程
PCIe技术仍在不断发展,从PCIe 5.0到即将到来的PCIe 6.0,建链过程的基本原理保持不变,但在速度、功耗、可靠性等方面不断优化。PCIe建链就是PCIe设备与主机系统建立稳定通信连接的过程,类似于网络握手建立连接。只有建链成功,设备才能正常工作。查看设备ID是否匹配:cat /sys/bus/pci/devices/0000:01:00.0/vendor。PCIe Host控制器:位于CPU内部,是整个PCIe系统的"大脑"这些信息都存储在设备的配置空间中,通过标准的PCIe配置读写命令获取。
2025-08-18 18:42:59
1032
原创 执行shell脚本
/hello.sh:必须是可执行文件,需要先给sh脚本文件赋予可执行权限chmod +x hello.sh。source hello.sh:可以不是可执行文件,即不chmod ug+x hello.sh赋予可执行权限。sh hello.sh:可以不是可执行文件,即不chmod ug+x hello.sh赋予可执行权限。echo $$:查看当前bash的进程号。bash:开启一个子bash。exit:退出当前bash。
2025-03-29 15:51:15
574
原创 Linux初次启动
mkdir /run/media/mmcblk1p1 -p //-p:这个选项用于确保如果上级目录 /run/media/ 不存在,它会被创建。./imxdownload u-boot.bin /dev/sdd //烧写到 SD 卡,不能烧写到/dev/sda 或 sda1 设备里面!df -h // -h 选项则表示以人类可读的格式显示数据(即自动使用适当的单位,如 GB、MB 或 KB)mmc dev 1 1 # 切换当前MMC设备到设备1的分区1,即emmc的分区1。
2025-03-29 15:50:21
510
原创 pinctrl和gpio子系统实验
/index:GPIO 索引,"led-gpio"属性里面可能有多个GPIO,0表示第一个。/* 2、 获取设备树中的gpio属性,得到LED所使用的GPIO编号,GPIO编号是一一对应的 *//* 3、设置GPIO1_IO03为输出,并且输出高电平,默认关闭LED灯 *//* 1、获取设备节点:gpioled *//* 设置LED所使用的GPIO */
2025-03-29 15:48:36
436
原创 设备树下的驱动
* led设备 *//* 2、获取compatible属性内容 *//* 1、获取设备节点:alphaled *//* 3、获取status属性内容 *//* 获取设备树中的属性数据 *//* 4、获取reg属性内容 *//* 1、寄存器地址映射 *//* 初始化LED */
2025-03-29 15:48:06
414
原创 新版的字符设备驱动
* 申请设备号 *//* 注销设备号 *//* 获取分配号的主设备号 *//* 获取分配号的次设备号 *//* 设置私有数据 *//* led设备 *//* 删除cdev */if (newchrled.major) { /* 定义了设备号 *//* 设备 *//* 清楚以前的设置 *//* 清除以前的设置 *//* 设置新值 */
2025-03-29 15:47:31
430
原创 设备树下的驱动
* led设备 *//* 2、获取compatible属性内容 *//* 1、获取设备节点:alphaled *//* 3、获取status属性内容 *//* 获取设备树中的属性数据 *//* 4、获取reg属性内容 *//* 1、寄存器地址映射 *//* 初始化LED */
2025-02-20 11:59:39
713
原创 新字符设备驱动
* 申请设备号 *//* 注销设备号 *//* 获取分配号的主设备号 *//* 获取分配号的次设备号 *//* 设置私有数据 *//* led设备 *//* 删除cdev */if (newchrled.major) { /* 定义了设备号 *//* 设备 *//* 清楚以前的设置 *//* 清除以前的设置 *//* 设置新值 */
2025-02-20 11:58:30
794
原创 git学习
git config --global user.email 24736743@qq.com #邮箱。git config --global user.name "kuangshen" #名称。*#查看当前用户(global)配置*git config --global --list。*#查看系统config*git config --system --list。
2025-02-18 21:11:54
198
原创 基于opencv的人脸识别
Mat img = imread("/opt/src/images/美女.jpg");cout << "打开图像失败!" << endl;软件的名字一般是lib?dpkg -s 软件包名。dpkg -L 软件包名。
2025-02-18 21:08:03
609
原创 免驱摄像头的V4l2驱动与应用开发
若在c_cpp_properties.json的"includePath":中添加了额外的路径,则会先从该路径下查找,若在c_cpp_properties.json的"includePath":中添加了额外的路径,则会先从该路径下查找。chmod -R 777 文件夹名字。
2025-02-18 21:03:16
875
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅