首先通过lspci 。查看硬件的总线BDF (总线号、设备号,功能号)
查看我们的硬件编码卡显示为:
2b:00.0 Processing accelerators: EMERGETECH Company Ltd. Seirios 2063 Video Codec (rev 01)
2b 总线号
00 设备号
0 功能号
2b:00.0 Processing accelerators: EMERGETECH Company Ltd. Seirios 2063 Video Codec (rev 01)
00: bd 1e 01 01 06 04 10 08 01 00 00 12 10 00 00 00
10: 04 00 00 ec 00 00 00 00 04 00 00 e8 00 00 00 00
20: 0c 00 00 e0 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 40 00 00 00 00 00 00 00 ff 01 00 00
详细字段解析
1、设备识别信息(偏移量0x00-0x03)
偏移 十六进制 字段名 解析值 含义
0x00-0x01 be 1e Vendor ID(供应商ID) 0x1ebd 厂商编码,对应Emergetech company ltd
0x02-0x03 01 01 Device ID(设备ID) 0X0101 设备型号,对应Serios 2063 Video Codec.
2.命令与状态寄存器(偏移量0x04-0x07)
偏移 十六进制 字段名 解析值 含义
0x04-0x05 0604 command 0x0406 Bit 0=0(I/O空间:禁用),Bit 1=1
(内存空间:启用) Bit2=1(启用,总线主控) 这也是DMA的本质,不经过cpu 而直接进行DMA.
0x06-0x07 10 08 Status(状态) 0x0810Bit 4 = 1(Capabilities List:具备高级功能列表)Bit 11 = 1(Signaled Target Abort:曾经发过“目标中止”信号)
3. 设备分类 (偏移量 0x08 - 0x0B)
| 偏移 | 十六进制 | 字段名 | 解析值 | 含义 |
|---|---|---|---|---|
| 0x08 | 01 | Revision ID | 0x01 | 芯片修订版本号 1。 |
| 0x09 | 00 | Programming Interface | 0x00 | 编程接口标准,未定义特定接口。 |
| 0x0A | 00 | Sub-Class | 0x00 | 子类代码,0x00 表示此类别的通用设备。 |
| 0x0B | 12 | Base Class | 0x12 | 主类 = 处理加速器 (Processing Accelerators),这与lspci文本输出完全吻合。 |
4. 头标类型与缓存 (偏移量 0x0C - 0x0F)
| 偏移 | 十六进制 | 字段名 | 解析值 | 含义 |
|---|---|---|---|---|
| 0x0C | 10 | Cache Line Size | 16 字节 | 系统缓存行大小,PCIe 通常要求设置为 16 字节 (0x10)。 |
| 0x0D | 00 | Latency Timer | 0 | PCI 延迟定时器,PCIe 设备该值无效。 |
| 0x0E | 00 | Header Type | 0x00 | 普通 PCI 设备(非桥接器),且为单功能设备(最高位 Bit 7 为 0)。 |
| 0x0F | 00 | BIST | 0x00 | 内建自测试,未启用。 |
5. 基址寄存器 (BAR) - 最关键的内存映射信息 (偏移量 0x10 - 0x27)
这里定义了设备内部寄存器/内存被映射到物理内存空间的位置,供 CPU 和驱动访问。
| BAR | 偏移 | 原始十六进制 (小端) | 解析后的地址/属性 | 详细含义 |
|---|---|---|---|---|
| BAR0 | 0x10-0x13 | 04 00 00 ec | 0xEC000000 | 32-bit 非预取内存空间。地址为0xEC000000。0x04末尾的 Bit 0 = 0 表示内存映射,Bit 2-1 = 0 表示 32-bit 宽度。 |
| BAR1 | 0x14-0x17 | 00 00 00 00 | 未使用 | - |
| BAR2 | 0x18-0x1B | 04 00 00 e8 | 0xE8000000 | 32-bit 非预取内存空间。地址为0xE8000000。属性同 BAR0。 |
| BAR3 | 0x1C-0x1F | 00 00 00 00 | 未使用 | - |
| BAR4 | 0x20-0x23 | 0c 00 00 e0 | 低 32 位 0xE0000000 | 这是 64-bit 预取内存空间。末尾0x0C的 Bit 0=0(内存),Bit 1-2 = 0b10(64-bit),Bit 3=1(可预取)。BAR5 作为其高 32 位。 |
| BAR5 | 0x24-0x27 | 00 00 00 00 | 高 32 位 0x00000000 | 因此完整 64-bit 地址 =0x00000000E0000000。 |
该卡共使用了3 个有效的物理地址区域:
0xEC000000、0xE8000000和0xE0000000(64位),分别用于控制寄存器、数据缓冲等不同用途。
6. 子系统与扩展 ROM (偏移量 0x28 - 0x33)
| 偏移 | 十六进制 | 字段名 | 值 | 含义 |
|---|---|---|---|---|
| 0x28-0x2B | 00 00 00 00 | CardBus CIS | 0x00000000 | 未使用。 |
| 0x2C-0x2D | 00 00 | Subsystem VID | 0x0000 | 未填写子系统供应商。 |
| 0x2E-0x2F | 00 00 | Subsystem ID | 0x0000 | 未填写子系统 ID。 |
| 0x30-0x33 | 00 00 00 00 | Expansion ROM | 0x00000000 | 未映射扩展 ROM(无板载 Option ROM)。 |
7. 中断与 PCIe 能力指针 (偏移量 0x34 - 0x3F) —— 关键部分
| 偏移 | 十六进制 | 字段名 | 值 | 含义 |
|---|---|---|---|---|
| 0x34 | 40 | Capabilities Pointer | 0x40 | 这是最重要的 PCIe 证据。指向 PCIe 扩展功能链表的起始位置(即偏移量 0x40 处)。状态寄存器中的 Bit 4 也印证了这一点。 |
| 0x35-0x3B | 00 00 00 00 00 00 00 | 保留 | - | 未使用,填充为 0。 |
| 0x3C | ff | Interrupt Line | 0xFF | 中断线号。值为 0xFF 表示尚未被 BIOS/操作系统分配实际的中断号(通常系统启动后或驱动加载后会被重写)。 |
| 0x3D | 01 | Interrupt Pin | 0x01 | 中断引脚。0x01 = INTA#(该设备使用主中断引脚 A,这是绝大多数单功能 PCIe 设备的标准配置)。 |
| 0x3E-0x3F | 00 00 | Min_Gnt / Max_Lat | 0x0000 | PCI 总线请求延迟,PCIe 设备该字段无效。 |
总结与补充说明
设备性质:这是一块标准的PCIe 视频编解码加速卡(处理加速器),拥有 3 个独立的内存映射空间(BAR0/BAR2/BAR4),用于驱动通过 MMIO 方式控制硬件编解码任务。
关于 Capabilities Pointer (0x40):由于偏移量
0x34指向0x40,真正的 PCIe 能力集(包含链路速度、宽度、电源管理等)位于偏移量0x40之后。如果你想进一步查看这些细节,可以运行:sudo lspci -vv -s 2b:00.0 # 显示详细的能力集信息
中断机制:当前中断线为未分配状态(
0xFF),但物理引脚定义为了 INTA#。当驱动加载(如vfio-pci或专用驱动)时,系统会通过 ACPI/APIC 为其动态分配一个真实的中断号,并替换掉0xFF。BAR4 的 64 位寻址:该设备映射了 64 位物理地址,说明其支持现代大内存寻址(可能在 4GB 以上物理内存区域有映射需求,但本例高 32 位为 0,实际落在了 4GB 以下的传统区域)。