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

2022-12-29 17:42:20 +08:00
 wniming

比如下面这个输出,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 的地址对不上又是怎么回事?

1402 次点击
所在节点    硬件
4 条回复
systemcall
2022-12-29 18:09:02 +08:00
4k 和 16k 是内存地址的大小,你在 Windows 上的设备管理器上也可以看到这 2 个内存地址。区别是 Linux 是告诉你起始位置和大小,Windows 是告诉你范围
你确定 CPU 是 x86 32 位的吗?我记得这种 CPU 现在是很少见的,新一点的机器里也就 n270 之类的是 32 位的了
wniming
2022-12-29 18:20:44 +08:00
@systemcall 感谢回复,我用 qemu 模拟的 32 位 cpu
wniming
2022-12-29 18:22:45 +08:00
@systemcall 内存地址的大小是什么意思?地址还有大小?
systemcall
2022-12-29 18:34:40 +08:00
@wniming #3
那一段内存地址可以操作那一个设备
你要操作一个设备,就是在那段内存地址里面操作。你要是玩过单片机就比较好理解。比如一个字节是调整串口方向,另一个字节是读写那个串口,这些地址在手册里面就会告诉你。PCI 是自动枚举,有一些 API 可以拿到地址,之后你就可以参考手册操作那些地址来控制硬件。但是 x86 比单片机复杂多了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/905417

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX