手把手教你学基带SOC芯片
文章平均质量分 87
1. 专栏目标
本专栏旨在为初学者和有一定基础的工程师提供一个全面、系统的基带SOC芯片学习资源。通过本专栏的学习,读者将能够:
理解基带SOC芯片的基本概念和工作原理。
掌握基带SOC芯片的设计流程和关键技术。
学会使用常见的EDA工具进行基带SOC芯片的设计和验证。
完成实际的基带SOC芯片项
小蘑菇二号
某大厂在职资深嵌入式软件工程师,商业合作&交流学习可私信联系
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
RSA、ECDSA、EdDSA、SM2安全算法长度概述
本文介绍了五种常见数字签名算法的签名长度特性:1. RSA签名长度等于密钥长度(如2048位对应256字节);2. ECDSA签名为曲线坐标位数的两倍(如P-256曲线为64字节);3. EdDSA采用固定长度设计(Ed25519为64字节);4. SM2国密算法类似ECDSA(P-256曲线64字节);5. HMAC长度等于哈希输出(如SHA-256为32字节)。文章通过对比表格展示各算法的典型参数,并建议根据安全性、性能和兼容性需求选择签名长度,其中Ed25519等短签名适合资源受限场景,而更长密钥提供原创 2025-12-20 14:29:56 · 27 阅读 · 0 评论 -
AI芯片的计算性能
AI 芯片算力精度”指的是:芯片在特定数值精度(如 FP16、INT8、INT4)下所能达到的计算吞吐能力(TOPS/TFLOPS)。它反映了“硬件对不同数据格式的加速能力”,是选型 AI 芯片时必须结合模型需求和部署场景来综合判断的关键指标。原创 2025-12-17 09:52:04 · 23 阅读 · 0 评论 -
AI芯片的不同算力精度
大模型精度选择的核心是在模型效果与效率之间权衡:训练阶段必须使用FP16/BF16浮点精度保证收敛,而推理阶段可大幅降低精度。不同精度适用于不同场景:FP16用于高精度推理,INT8是主流推理选择,INT4则适用于超大规模模型部署。国产芯片普遍支持INT8/INT4推理,但训练仍需FP16/BF16。实际应用中,同一模型可转换为不同精度版本,70B级大模型通常需要INT4量化才能在消费级硬件上运行。关键是根据部署需求(性能/精度/功耗)选择合适的量化方案,而非特定模型固定使用某种精度。原创 2025-12-11 14:09:34 · 35 阅读 · 0 评论 -
AI 芯片是不是精度越高越好
AI芯片并非精度越高越好,低精度(INT8/INT4)反而成为主流选择。现代深度学习模型对低精度具有强鲁棒性,量化后性能损失通常小于1%,却能显著降低内存占用、提升计算效率。以Llama-3-70B为例,INT4量化使其显存需求从140GB降至35GB,实现单卡部署。仅在高精度需求的训练、科学计算等场景才需FP16/FP32。实践建议遵循"够用就好"原则:训练用BF16,推理优先INT8/INT4,这是平衡性能与成本的最佳方案。低精度技术正推动大模型从实验室走向实际应用。原创 2025-12-11 10:17:08 · 61 阅读 · 0 评论 -
AI芯片“全互联”(Full Mesh)仅限于 8 卡?
全互联 = 任意两个计算节点之间都有直接、高带宽、低延迟的通信链路。对于N 个节点,需要N×(N−1)/2 条独立链路通信无瓶颈、延迟恒定、带宽对称硬件成本和复杂度随 N² 增长“全互联”不限于 8 卡,但 8 卡是当前单机物理全互联的工程上限。≤8 卡:可用 NVLink/NVSwitch 实现真正的物理全互联>8 卡:采用“8卡全互联节点 + 高速网络”的分层架构,在系统级提供近似全互联体验超大规模(如 Google TPU Pod)原创 2025-12-08 10:32:32 · 39 阅读 · 0 评论 -
手把手教你学 NPU 驱动开发--第一部分:基础准备 开发环境搭建:Linux 内核编译与 NPU 仿真平台配置
摘要:本文详细介绍了搭建Linux内核编译与NPU仿真平台的完整流程。主要内容包括:1) 准备ARM64交叉编译工具链;2) 编译支持KGDB调试的Linux内核;3) 构建最小根文件系统;4) 使用QEMU模拟自定义NPU设备;5) 配置KGDB调试环境。文章重点讲解了如何通过修改设备树添加虚拟NPU设备,并提供了开源NPUIP Gemmini作为实验对象。最后展示了简单的"Hello NPU"驱动验证方法,为后续NPU驱动开发奠定了基础。文中还附有常用命令速查表,方便开发者快速搭建调原创 2025-11-25 14:21:54 · 151 阅读 · 0 评论 -
基于Linux的PCIe设备驱动开发入门到精通-- 第三部分:进阶篇 - 构建完整驱动 综合实战:开发一个完整的PCIe LED控制驱动 9.2 驱动架构设计 (结合前8章知识点)
在《9.3 编写驱动代码:从probe到ioctl》中,我们将基于这份详尽的架构设计,亲手实现驱动的每一行代码,并编写用户态测试工具,让我们的LED真正“亮”起来!现在,是时候将前八章所学的“零散工具”——从模块加载、PCI探测、资源申请到设备创建——下一节《9.3 编写驱动代码:从probe到ioctl》,我们将把设计图变为可运行的代码,见证LED的第一次“心跳”!它封装了设备的所有状态和资源,是连接PCI驱动和字符设备的“桥梁”。这是驱动最复杂的部分,集中了资源申请、硬件初始化和设备创建。原创 2025-11-24 09:59:12 · 29 阅读 · 0 评论 -
基于Linux的PCIe设备驱动开发入门到精通-- 第三部分:进阶篇 - 构建完整驱动 驱动编译、部署与调试 8.5 使用kgdb/gdb进行内核调试 (可选)
虽然配置繁琐,但掌握它,意味着您已站在了Linux系统调试能力的巅峰。下一节《10.1 实现mmap:让应用直接访问设备内存》,我们将解锁用户态与设备内存的“高速通道”!会接管CPU,通过通信通道将内核状态(寄存器、内存)发送给主机的GDB,并接收GDB的调试命令。本章将带您进入内核调试的“圣殿”,即使您当前环境不支持,理解其原理也将极大提升您的调试思维。也无法触及问题的核心时,您需要一把能直接剖析内核运行时状态的“手术刀”——它能将您从“日志猜谜游戏”中解放出来,直接观察内核的“灵魂”。原创 2025-11-21 14:02:55 · 149 阅读 · 0 评论 -
基于Linux的PCIe设备驱动开发入门到精通-- 第三部分:进阶篇 - 构建完整驱动 综合实战:开发一个完整的PCIe LED控制驱动 9.4 用户态控制程序开发
本文介绍了专业级PCIe LED控制工具ledctl_pro的开发过程。首先分析了基础版ledctl的局限性,包括功能单一、用户体验差等问题。然后提出了专业级工具的目标要求,包括清晰的帮助系统、灵活的命令行解析等。详细讲解了代码实现ledctl_pro.c,展示了对设备操作、参数校验和错误处理等功能的改进。同时给出了增强版的Makefile配置和使用演示示例。文章强调专业工具应具备文档化、标准化、可调试等特性,并预告了后续的测试调试内容。这标志着一个完整的PCIe LED控制驱动项目已形成闭环,从内核驱动到原创 2025-11-20 14:01:49 · 37 阅读 · 0 评论 -
基于Linux的PCIe设备驱动开发入门到精通-- 第三部分:进阶篇 - 构建完整驱动 高级主题与未来方向 (持续更新) 10.5 DPDK与UIO驱动简介 最佳实践与性能优化 11.2 锁机制与并发
然而,性能的提升伴随着复杂性的剧增,尤其是在。掌握这些最佳实践,您不仅能构建出高性能的DPDK应用,更能深刻理解在极限性能场景下,软件与硬件、并发与同步的精妙平衡。:在《10.6 调试技巧与工具》中,我们将系统化地学习各种内核和驱动调试方法,让您能从容应对各种“疑难杂症”。”系列的深度整合篇,我们将不仅揭秘DPDK与UIO的工作原理,更深入探讨其。数组的更新在主循环内,频繁加锁/解锁会显著增加开销,尤其是在多核高吞吐下。:下一节《10.6 调试技巧与工具》,我们将化身“驱动侦探”,学习使用。原创 2025-11-17 19:15:53 · 140 阅读 · 0 评论 -
PCIe 驱动侧(Host 侧,以 Linux 为例)启动流程详细介绍
本文详细分析了Linux系统中PCIe设备的完整启动流程,包括7个关键阶段:1)设备上电自检;2)PCIe物理链路自动训练;3)可选固件枚举;4)内核接管PCIe总线;5)内核PCIe子系统枚举(核心环节);6)驱动匹配与.probe()调用;7)驱动初始化完成。重点阐述了枚举过程中硬件行为、内核函数调用栈及资源配置机制,并指出.probe()调用标志着设备已准备就绪。整个流程涉及硬件、固件、操作系统和驱动程序的协同工作,典型耗时3-6秒,其中LinkUp是枚举的必要前提但非充分条件。原创 2025-11-17 01:48:54 · 97 阅读 · 0 评论 -
PCIe GPU 设备的 安全启动(Secure Boot)流程
PCIe GPU安全启动流程解析 PCIe GPU的安全启动(Secure Boot)通过硬件信任链实现,独立于主机但需与平台协同。核心流程包括: 硬件信任根:不可篡改的BootROM和OTP存储公钥哈希,构成初始验证基础。 分层验证:BootROM逐级验证Bootloader、微码等固件签名(如RSA/ECDSA),失败则锁定设备。 主机协同:GPU向主机报告安全状态,主机可限制未通过验证的设备功能。 关键机制:OTP熔断防篡改、固件签名、安全协处理器(如NVIDIA GSP)隔离敏感操作。 该机制与主机原创 2025-11-14 11:09:00 · 115 阅读 · 0 评论 -
基于Linux的PCIe设备驱动开发入门到精通-- 第三部分:进阶篇 - 构建完整驱动 高级主题与未来方向 (持续更新) 10.4 VFIO (Virtual Function I/O) 框架应用
VFIO框架:用户态直接访问PCIe设备的安全方案 VFIO(Virtual Function I/O)是一种革命性框架,它允许用户态程序直接访问PCIe硬件,同时确保系统安全。相比传统内核驱动,VFIO具有显著优势:实现零拷贝和低延迟的极致性能;提供更好的隔离性,用户态程序崩溃不会影响内核;支持快速迭代开发。其核心机制包括:利用IOMMU硬件实现安全DMA访问、通过mmap直接映射设备内存区域、使用eventfd处理中断。本文通过将PCIe LED卡接入VFIO的完整示例,演示了从设备绑定到用户态程序开发原创 2025-11-12 14:01:22 · 66 阅读 · 0 评论 -
基于Linux的PCIe设备驱动开发入门到精通-- 11.2 锁机制与并发控制 (自旋锁、互斥锁) 11.3 性能瓶颈分析与优化建议
本文探讨Linux驱动开发中的性能优化方法论,重点聚焦并发控制与性能瓶颈分析。从锁机制选择(自旋锁、互斥锁等)到工具使用(ftrace、perf),详细介绍了定位锁竞争和CPU热点的实战步骤,包括ftrace事件跟踪和perf火焰图分析。针对常见性能瓶颈(CPU/内存/I/O/锁竞争),提出了锁粒度优化、无锁结构替换、中断处理优化等解决方案。强调性能优化需要理论结合实践,通过"假设-测量-验证"的循环持续迭代。为开发者提供了一套从问题定位到解决的完整方法论,助力开发高性能工业级驱动。原创 2025-11-12 10:23:59 · 41 阅读 · 0 评论 -
基于Linux的PCIe设备驱动开发入门到精通-- 第三部分:进阶篇 - 构建完整驱动 高级主题与未来方向 (持续更新) 10.3 SR-IOV (Single Root I/O Virtualiza
技术应运而生,它允许一个物理PCIe设备(如网卡)在硬件层面“分裂”成多个独立的虚拟功能(Virtual Functions, VFs),直接分配给不同的虚拟机(VM)或容器,实现近乎物理机的I/O性能。:在《10.4 调试技巧与工具》中,我们将系统化地学习各种内核和驱动调试方法,让您能从容应对各种“疑难杂症”。:在您的应用场景中,是更倾向于使用SR-IOV的极致性能,还是选择更灵活的软件定义网络(SDN)方案?,打破了传统虚拟化I/O的性能瓶颈,使得虚拟机和容器能够获得接近裸金属的网络性能。原创 2025-11-11 09:41:16 · 148 阅读 · 0 评论 -
基于Linux的PCIe设备驱动开发入门到精通-- 第三部分:进阶篇 - 构建完整驱动 高级主题与未来方向 (持续更新) 10.5 DPDK与UIO驱动简介
本文探讨了如何通过用户态I/O技术突破传统网络协议栈的性能瓶颈。UIO(Userspace I/O)作为用户态驱动的基础框架,允许用户程序直接访问硬件资源;而DPDK(Data Plane Development Kit)则构建在UIO/VFIO之上,通过轮询模式驱动、大页内存等技术实现线速数据包处理。文章详细分析了传统网络栈的性能瓶颈(中断风暴、上下文切换、内存拷贝),阐述了UIO和DPDK的协同工作流程与核心组件,并列举了其在NFV、5G等领域的典型应用场景。最后指出,虽然这些技术能实现微秒级延迟的性能原创 2025-11-10 11:41:26 · 300 阅读 · 0 评论 -
Linux PCIe设备驱动开发:从入门到企业级实战 专栏-- 1.3 事务层、数据链路层、物理层简介
本文介绍了PCIe总线协议的三层架构:事务层、数据链路层和物理层。事务层负责生成和处理TLP数据包,实现流量控制和路由功能;数据链路层通过ACK/NAK机制确保数据传输可靠性;物理层则处理信号编解码和链路训练等底层传输任务。三层协议协同工作,从CPU指令到物理信号转换,构成了PCIe高速可靠传输的基础。这种分层设计使协议模块化、易扩展,为PCIe驱动开发和问题排查提供了理论支撑。原创 2025-11-09 14:33:43 · 39 阅读 · 0 评论 -
基于Linux的PCIe设备驱动开发入门到精通-- 第三部分:进阶篇 - 构建完整驱动 高级主题与未来方向 (持续更新) 10.1 PCIe电源管理 (ASPM)
本文深入解析PCIe Active State Power Management (ASPM)技术,重点介绍其在Linux内核中的实现与应用。文章首先阐述ASPM的必要性,分析其在移动设备、服务器和嵌入式系统中的节能价值。接着详细讲解ASPM的两种主要低功耗状态(L0s和L1)特性及适用场景。内核实现部分涵盖全局策略配置、驱动API使用方法和ARM平台设备树设置。文章同时探讨ASPM带来的功耗与性能延迟的权衡问题,提供实际监控方法和问题排查建议。最后强调驱动开发者应掌握ASPM控制方法,在硬件控制和系统能效原创 2025-11-09 14:17:11 · 201 阅读 · 0 评论 -
Linux PCIe设备驱动开发:从入门到企业级实战 专栏--1.2 PCIe拓扑结构:Root Complex, Switch, Endpoint
摘要:PCIe采用分层交换式拓扑结构,主要由Root Complex(根复合体)、Switch(交换机)和Endpoint(端点)三大核心组件构成。Root Complex作为系统核心连接CPU和内存,Switch提供链路扩展功能,Endpoint则是终端设备。这种点对点、全双工的设计实现了高带宽和低延迟,通过Lane和Link进行数据传输,形成树状层次结构。该拓扑结构为现代计算机集成高速外设提供了灵活高效的解决方案,是理解PCIe工作原理的基础。(148字)原创 2025-11-08 23:42:06 · 69 阅读 · 0 评论 -
Linux PCIe设备驱动开发:从入门到企业级实战 专栏--第2章:Linux内核模块编程 2.2 内核符号导出与模块依赖
在C语言中,函数名和全局变量名就是“符号 (Symbol)”。当一个内核模块被编译和加载后,其定义的全局函数和变量就成为了内核符号表的一部分。原创 2025-11-08 18:26:02 · 145 阅读 · 0 评论 -
PCIe的消息事务(Message Transaction)
PCIe消息事务支持设备与主机双向通信,但更常见的是设备到主机方向。设备通过中断通知、错误报告和状态变更主动向主机发送消息(如MSI中断、链路故障警报)。主机到设备的消息则用于配置更新、管理命令(如NVMe Admin命令)和同步控制(如启动DMA)。这种双向异步通信机制既支持设备主动报告状态,也允许主机远程控制设备,为PCIe系统提供了灵活的事件处理和控制能力。原创 2025-11-07 12:18:09 · 50 阅读 · 0 评论 -
PCIE的事务层(Transaction Layer)、数据链路层(Data Link Layer) 和 物理层(Physical Layer)
PCIe分层架构解析 PCIe采用三层架构设计实现高速可靠通信:事务层负责封装请求为TLP包,处理内存映射I/O和流量控制;数据链路层通过序列号、CRC校验和ACK/NAK机制确保可靠传输;物理层完成信号编码和串行化,支持不同速率和通道配置。三层协同工作,如CPU写入数据时,各层依次处理TLP生成、错误校验和信号转换,最终由接收端设备完成操作。这种分层设计实现了带宽灵活扩展(x1至x16)和协议兼容性,支撑了从2.5GT/s到64GT/s的演进,同时保持对软件的透明性,成为GPU、SSD等设备的通用互连标准原创 2025-11-07 11:50:19 · 51 阅读 · 0 评论 -
Linux PCIe设备驱动开发:从入门到企业级实战 专栏--第一部分:基础篇 - 建立核心概念 第2章:Linux内核模块编程 2.1 Hello World模块:编译、加载、卸载
本文介绍了Linux内核模块开发的基本流程,通过一个"Hello World"模块示例展示了完整开发周期。主要内容包括:1)编写模块代码,定义初始化函数和退出函数;2)创建Makefile文件配置编译环境;3)使用make命令编译生成.ko模块;4)通过insmod/rmmod命令加载和卸载模块;5)使用dmesg查看内核日志输出。文章还提供了常见问题解决方案,强调了模块许可证声明的重要性。这个基础示例为后续更复杂的驱动开发(如PCIe驱动)奠定了基础。原创 2025-11-07 10:17:33 · 350 阅读 · 0 评论 -
SPI 控制器的 Normal 模式、MEM 模式 和 Direct Access (直接访问) 模式 是三种不同的工作模式
特性MEM 模式Direct Access 模式Normal 模式主要用途XIP, 读取常量初始化, 发送自定义命令大数据量读写数据方向主要是读读和写读和写性能读取延迟低每次操作开销大吞吐量高CPU 占用低(读取时)高(需轮询/中断)低(DMA)编程复杂度极低(像内存一样用)高(需懂命令集)中等灵活性低极高中等典型应用执行代码、读配置读ID、设QE、擦除固件升级、文件IO启动时:用模式初始化 Flash(读 ID,设 QE 位)。运行时:用MEM 模式。原创 2025-11-05 18:07:06 · 51 阅读 · 0 评论 -
Linux PCIe设备驱动开发:从入门到企业级实战 专栏--第3章:设备模型与Udev 3.1 Linux设备模型:device, driver, bus, class
本文介绍了Linux设备模型的核心概念与工作机制。设备模型通过总线(Bus)、设备(Device)、驱动(Driver)和类(Class)四个要素构建了层次化的硬件管理系统。总线作为连接通道,负责设备发现与驱动匹配;设备代表具体硬件实体;驱动提供控制逻辑;类实现功能分组。系统通过sysfs将设备信息导出到用户空间,udev则利用这些信息自动管理设备节点。该模型支持热插拔设备,并提供统一接口,使Linux能够有效管理从嵌入式设备到服务器的各类硬件环境。原创 2025-11-05 14:08:10 · 43 阅读 · 0 评论 -
Linux PCIe设备驱动开发:从入门到企业级实战 专栏-- 2.1 Hello World模块:编译、加载、卸载
本文介绍了Linux内核模块开发的基本流程,通过"Hello World"示例演示了内核模块的编写、编译、加载和卸载全过程。主要内容包括:1)编写包含初始化和卸载函数的hello.c代码;2)创建Makefile文件配置内核编译系统;3)使用make命令编译生成.ko模块文件;4)通过insmod/rmmod命令加载和卸载模块;5)使用dmesg查看模块日志输出。文章还提供了常见问题的解决方案,并强调这是开发更复杂PCIe驱动程序的基础。原创 2025-11-06 00:00:00 · 42 阅读 · 0 评论 -
Linux PCIe设备驱动开发:从入门到企业级实战 专栏--第3章:设备模型与Udev 3.4 实战:为自定义设备创建Udev规则
本文详细介绍了为自定义PCIe数据采集卡创建Udev规则的全流程。首先通过lspci和udevadminfo收集设备信息,包括厂商ID、设备ID等关键属性。然后编写规则文件,实现自动加载驱动、创建符号链接、设置权限以及运行初始化/清理脚本等功能。通过udevadm命令测试和验证规则效果,并提供调试技巧。整个过程涵盖了从信息收集、规则编写到测试验证的完整环节,展示如何利用Udev实现硬件设备的自动化管理。该技能可推广应用于各类Linux内核管理的硬件设备。原创 2025-11-05 10:44:10 · 249 阅读 · 0 评论 -
Linux PCIe设备驱动开发:从入门到企业级实战 专栏--第2章:Linux内核模块编程 2.2 内核符号导出与模块依赖
本文介绍了Linux内核模块开发中的符号导出与模块依赖机制。主要内容包括:1)内核符号的概念,分为内部符号和导出符号;2)使用EXPORT_SYMBOL和EXPORT_SYMBOL_GPL宏导出函数和变量;3)其他模块如何引用已导出的符号;4)模块依赖的编译、加载顺序管理和自动化工具depmod的使用;5)该机制在PCIe驱动开发中的应用。通过这一机制,开发者可以构建模块化、可重用的内核代码,实现不同模块间的功能调用和资源共享。文章还特别强调了GPL许可证符号的特殊性及其在开源开发中的重要性。原创 2025-11-04 12:26:24 · 118 阅读 · 0 评论 -
Linux PCIe设备驱动开发:从入门到企业级实战 专栏--第3章:设备模型与Udev 3.3 Udev规则:自动化设备管理
摘要:本文详细介绍了Linux系统中的udev规则及其在设备管理中的应用。udev作为用户空间守护进程,通过sysfs和uevent机制实现设备动态管理,能够自动执行设备节点创建、权限设置等操作。文章从工作原理、规则文件格式、常用键、实战示例到调试方法进行系统讲解,重点阐述了udev在PCIe驱动开发中的重要性,包括自动化设备节点创建、权限管理和热插拔支持等。通过合理编写udev规则,可以显著提升系统设备管理的智能化和自动化水平,为PCIe设备开发者提供了连接驱动与用户应用的关键解决方案。原创 2025-11-03 14:04:23 · 45 阅读 · 0 评论 -
Flash 存储机制原理概述
摘要:Flash存储器以块为单位擦除,初始状态为全1,只能将1编程为0,而将0恢复为1必须擦除整个块。NORFlash的擦除单位通常为64KB~1MB,擦除后块内所有位重置为1,再重新编程需要的位。与NANDFlash不同,NORFlash支持随机读写但擦除粒度较大。操作时需注意数据备份和磨损均衡,以应对Flash的擦写次数限制。这一机制是Flash高可靠性和长寿命的基础。原创 2025-11-03 11:35:53 · 70 阅读 · 0 评论 -
Linux PCIe设备驱动开发:从入门到企业级实战 专栏--第2章:Linux内核模块编程 2.3 内核日志系统:printk 与 dmesg
本文介绍了Linux内核开发中printk和dmesg日志系统的使用。printk是内核空间的日志输出函数,支持8个日志级别(KERN_EMERG到KERN_DEBUG),消息写入环形缓冲区并通过dmesg查看。文章详细讲解了printk的语法、日志级别设置、工作原理,以及dmesg的各种查询选项和实时监控方法,并给出了驱动开发中的日志最佳实践。最后对比了用户空间printf与内核printk的差异,强调它们是内核开发的重要调试工具。原创 2025-11-04 08:00:00 · 31 阅读 · 0 评论 -
Linux PCIe设备驱动开发:从入门到企业级实战 专栏--第3章:设备模型与Udev 3.2 sysfs文件系统探秘
摘要:本文深入探讨了Linux内核中的sysfs文件系统,这一基于内存的虚拟文件系统作为内核设备模型与用户空间的接口,为系统管理、驱动开发和调试提供了强大支持。文章系统介绍了sysfs的核心概念、目录结构,重点解析了PCI设备的详细目录信息及其在资源管理、驱动调试中的应用场景。通过实例展示了如何利用sysfs进行设备状态查询、参数配置等操作,并阐述了其与udev系统的协同工作机制。本文为开发人员提供了sysfs的实用指南,是理解Linux设备模型和系统调试的重要参考资料。原创 2025-11-03 11:05:48 · 27 阅读 · 0 评论 -
在PCIe设备的BL0阶段(链路训练前的第一阶段引导) 配置空间的配置详解
PCIe设备的配置空间是一组位于设备内部的只读/可读写寄存器组(Type 0设备通常为1KB,地址0x000~0xFFF),主机通过PCIe配置事务(Configuration Read/Write TLP)访问这些寄存器。位15=1(使能MSI)2. Bar空间配置(0x20~0x3C):主机与设备的“通信窗口”Message Data中断向量(对应主机的中断引脚,如INTA#=0x01,INTB#=0x02)0x02(映射到INTB#)4. 设备特定区域(0x80~0xFFF):厂商自定义配置。原创 2025-10-31 10:42:32 · 48 阅读 · 0 评论 -
PCIe 的 BAR 映射空间
PCIe设备的BAR(基地址寄存器)映射空间理论最大支持16EiB(2^64字节),远超1GB。实际能否超过1GB取决于:1)使用64位BAR而非32位;2)系统地址总线宽度(现代系统通常支持48位);3)操作系统支持(如Linux完全支持)。实际应用中,GPU、NVMe SSD、FPGA等设备常配置256MB至数GB的BAR空间。可使用Linux的lspci -v命令查看BAR大小。要点是:64位BAR+64位系统+OS支持即可实现>1GB的映射。原创 2025-10-30 18:50:31 · 89 阅读 · 0 评论 -
CPU 访问外设的两种核心机制:MMIO(Memory-Mapped I/O) 和 DMA(Direct Memory Access)
BAR和DMA是计算机系统中两种关键的数据传输机制:BAR(基址寄存器)用于CPU与设备间的控制通信,映射设备寄存器便于配置操作;而DMA(直接内存访问)允许设备直接读写系统内存,无需CPU参与大量数据传输。典型场景如NVMe SSD读取数据时,CPU通过BAR下发指令,设备通过DMA高效传输数据到主机内存,最后中断通知CPU。虽然BAR能映射大内存空间,但仍无法替代DMA的高效数据传输功能,两者各司其职——BAR负责控制,DMA专注数据传输,共同实现高性能的硬件交互。原创 2025-10-30 18:49:07 · 84 阅读 · 0 评论 -
PCIe设备启动整体时序
后续配置(如调整带宽、修改BAR)由主机驱动通过PCIe配置空间完成。:配置BAR为内存空间(Memory Space)或I/O空间(I/O Space),定义访问权限(读/写)、缓存策略(如Write-Through)。(如GPU、FPGA):BL0将控制权交给后续固件(如GPU的VBIOS、FPGA的比特流),由固件接管功能运行(如GPU渲染、FPGA逻辑执行)。:PCIe的物理层(PHY)负责电气信号的发送/接收(如TS1/TS2有序集、数据包),支持高速率(如Gen5的32GT/s)。原创 2025-10-30 04:00:00 · 79 阅读 · 0 评论 -
手把手教你学PCIE--PCIe 设备启动的完整时序顺序
PCIe设备启动时序详解:从主机上电到电源稳定(10-100ms),主机发出PERST#信号复位设备,保持1ms以上,再释放PERST#。设备需在其释放后≤100ms内发出TS1信号,完成链路训练进入L0状态。PERST#由主机控制,用于同步设备启动,类比汽车ECU启动指令。规范要求确保设备有序初始化,防止竞争。原创 2025-10-29 10:43:31 · 330 阅读 · 0 评论 -
命令 echo read addr=0xxxxx len=100 >/dev/kchar:0是“用户态指令 → 内核驱动 → PCIe 硬件”的典型调试流程
摘要:本文解析了命令echo readaddr=0x94205C len=100 > /dev/kchar:0从终端到PCIe设备的完整执行流程。首先拆解命令结构,包括用户态echo工具、自定义调试指令和目标设备节点。随后分析用户态到内核态的交互过程,涉及open()和write()系统调用。内核驱动解析指令后,通过映射PCIe设备的BAR空间实现硬件访问,最终完成数据读取。整个过程展示了用户态指令通过内核驱动控制PCIe硬件的核心机制,涉及VFS、file_operations、PCIe地址映射等关原创 2025-10-28 12:29:46 · 181 阅读 · 0 评论 -
echo向 /dev/kchar:*写数据--“用户态-内核态通信”机制
本文解析了/dev/kchar*设备的echo调试功能。该功能通过用户态向特定设备节点写入数据,触发内核驱动预定义的调试动作。系统为每个PF分配一个/dev/kchar:<dev_id>节点,共4个。使用时需注意权限要求和版本差异,典型应用场景包括查询通道状态和设置日志级别。该机制为硬件驱动开发提供了便捷的调试探针工具。原创 2025-10-28 12:27:38 · 147 阅读 · 0 评论 -
手把手教你学SOC--现代 SoC(系统级芯片)中典型的 PLL 时钟路径
PLL时钟路径是从外部参考时钟输入到目标模块的完整时钟生成与分发链路。其核心流程包括:外部晶振提供参考时钟→输入缓冲器整形信号→PLL核心(含分频器、PFD、VCO等)进行倍频/锁相→输出缓冲器驱动→时钟分布网络分发→多路选择/分频→时钟门控单元管理→最终供给各模块。该路径采用分层设计,具有频率可调、功耗管理、低抖动等特点,是SoC设计中关键的基础设施,能将低频晶振转化为驱动芯片各模块的高频时钟信号。原创 2025-10-17 15:44:03 · 70 阅读 · 0 评论
分享