V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wniming
V2EX  ›  硬件

Linux lspci -v 输出的含义有没有老哥能解释一下?

  •  
  •   wniming · 2022-12-29 17:42:20 +08:00 · 1383 次点击
    这是一个创建于 699 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如下面这个输出,Memory at 有 2 行,我的 cpu 是 x86 32 位的,这里为什么显示 64 位?另外 size=4k ,size=16k ,这里的 4k 和 16k 是什么的大小?

    root@develop:~# lspci -s 05:00.0 -v
    05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
    	Subsystem: Realtek Semiconductor Co., Ltd. TP-Link TG-3468 v4.0 Gigabit PCI Express Network Adapter
    	Flags: bus master, fast devsel, latency 0, IRQ 27, IOMMU group 15
    	I/O ports at e000 [size=256]
    	Memory at fcc04000 (64-bit, non-prefetchable) [size=4K]
    	Memory at fcc00000 (64-bit, non-prefetchable) [size=16K]
    	Capabilities: [40] Power Management version 3
    	Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
    	Capabilities: [70] Express Endpoint, MSI 01
    	Capabilities: [b0] MSI-X: Enable+ Count=4 Masked-
    	Capabilities: [d0] Vital Product Data
    	Capabilities: [100] Advanced Error Reporting
    	Capabilities: [140] Virtual Channel
    	Capabilities: [160] Device Serial Number 01-00-00-00-68-4c-e0-00
    	Capabilities: [170] Latency Tolerance Reporting
    	Capabilities: [178] L1 PM Substates
    	Kernel driver in use: r8169
    	Kernel modules: r8169
    
    root@develop:~# 
    root@develop:~# lspci -s 05:00.0 -x
    05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
    00: ec 10 61 81 07 04 10 00 15 00 00 02 10 00 00 00
    10: 01 e0 00 00 00 00 00 00 04 40 c0 fc 00 00 00 00
    20: 04 00 c0 fc 00 00 00 00 00 00 00 00 ec 10 68 81
    30: 00 00 00 00 40 00 00 00 00 00 00 00 ff 01 00 00
    
    root@develop:~# 
    
    

    使用 lspci -x 输出了这个设备的 configuration space ,从 configuration space 的内容解析出来的 BAR 地址和-x 输出的 Memory at 的地址对不上又是怎么回事?

    4 条回复    2022-12-29 18:34:40 +08:00
    systemcall
        1
    systemcall  
       2022-12-29 18:09:02 +08:00
    4k 和 16k 是内存地址的大小,你在 Windows 上的设备管理器上也可以看到这 2 个内存地址。区别是 Linux 是告诉你起始位置和大小,Windows 是告诉你范围
    你确定 CPU 是 x86 32 位的吗?我记得这种 CPU 现在是很少见的,新一点的机器里也就 n270 之类的是 32 位的了
    wniming
        2
    wniming  
    OP
       2022-12-29 18:20:44 +08:00 via Android   ❤️ 2
    @systemcall 感谢回复,我用 qemu 模拟的 32 位 cpu
    wniming
        3
    wniming  
    OP
       2022-12-29 18:22:45 +08:00 via Android   ❤️ 2
    @systemcall 内存地址的大小是什么意思?地址还有大小?
    systemcall
        4
    systemcall  
       2022-12-29 18:34:40 +08:00
    @wniming #3
    那一段内存地址可以操作那一个设备
    你要操作一个设备,就是在那段内存地址里面操作。你要是玩过单片机就比较好理解。比如一个字节是调整串口方向,另一个字节是读写那个串口,这些地址在手册里面就会告诉你。PCI 是自动枚举,有一些 API 可以拿到地址,之后你就可以参考手册操作那些地址来控制硬件。但是 x86 比单片机复杂多了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5548 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:52 · PVG 16:52 · LAX 00:52 · JFK 03:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.