xref: /openbmc/linux/Documentation/translations/zh_CN/PCI/sysfs-pci.rst (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
1*6b3672adSYanteng Si.. SPDX-License-Identifier: GPL-2.0
2*6b3672adSYanteng Si.. include:: ../disclaimer-zh_CN.rst
3*6b3672adSYanteng Si
4*6b3672adSYanteng Si:Original: Documentation/PCI/sysfs-pci.rst
5*6b3672adSYanteng Si
6*6b3672adSYanteng Si:翻译:
7*6b3672adSYanteng Si
8*6b3672adSYanteng Si 司延腾 Yanteng Si <siyanteng@loongson.cn>
9*6b3672adSYanteng Si
10*6b3672adSYanteng Si:校译:
11*6b3672adSYanteng Si
12*6b3672adSYanteng Si
13*6b3672adSYanteng Si
14*6b3672adSYanteng Si========================
15*6b3672adSYanteng Si通过sysfs访问PCI设备资源
16*6b3672adSYanteng Si========================
17*6b3672adSYanteng Si
18*6b3672adSYanteng Sisysfs,通常挂载在/sys,在支持它的平台上提供对PCI资源的访问。例如,一个特定的总线可能看起
19*6b3672adSYanteng Si来像这样::
20*6b3672adSYanteng Si
21*6b3672adSYanteng Si     /sys/devices/pci0000:17
22*6b3672adSYanteng Si     |-- 0000:17:00.0
23*6b3672adSYanteng Si     |   |-- class
24*6b3672adSYanteng Si     |   |-- config
25*6b3672adSYanteng Si     |   |-- device
26*6b3672adSYanteng Si     |   |-- enable
27*6b3672adSYanteng Si     |   |-- irq
28*6b3672adSYanteng Si     |   |-- local_cpus
29*6b3672adSYanteng Si     |   |-- remove
30*6b3672adSYanteng Si     |   |-- resource
31*6b3672adSYanteng Si     |   |-- resource0
32*6b3672adSYanteng Si     |   |-- resource1
33*6b3672adSYanteng Si     |   |-- resource2
34*6b3672adSYanteng Si     |   |-- revision
35*6b3672adSYanteng Si     |   |-- rom
36*6b3672adSYanteng Si     |   |-- subsystem_device
37*6b3672adSYanteng Si     |   |-- subsystem_vendor
38*6b3672adSYanteng Si     |   `-- vendor
39*6b3672adSYanteng Si     `-- ...
40*6b3672adSYanteng Si
41*6b3672adSYanteng Si最上面的元素描述了PCI域和总线号码。在这种情况下,域号是0000,总线号是17(两个值都是十六进制)。
42*6b3672adSYanteng Si这个总线在0号插槽中包含一个单一功能的设备。为了方便起见,我们复制了域和总线的编号。在设备目录
43*6b3672adSYanteng Si下有几个文件,每个文件都有自己的功能。
44*6b3672adSYanteng Si
45*6b3672adSYanteng Si       =================== =====================================================
46*6b3672adSYanteng Si       文件		           功能
47*6b3672adSYanteng Si       =================== =====================================================
48*6b3672adSYanteng Si       class		       PCI级别 (ascii, ro)
49*6b3672adSYanteng Si       config		       PCI配置空间 (binary, rw)
50*6b3672adSYanteng Si       device		       PCI设备 (ascii, ro)
51*6b3672adSYanteng Si       enable	           设备是否被启用 (ascii, rw)
52*6b3672adSYanteng Si       irq		           IRQ编号 (ascii, ro)
53*6b3672adSYanteng Si       local_cpus	       临近CPU掩码(cpumask, ro)
54*6b3672adSYanteng Si       remove		       从内核的列表中删除设备 (ascii, wo)
55*6b3672adSYanteng Si       resource		       PCI资源主机地址 (ascii, ro)
56*6b3672adSYanteng Si       resource0..N	       PCI资源N,如果存在的话 (binary, mmap, rw\ [1]_)
57*6b3672adSYanteng Si       resource0_wc..N_wc  PCI WC映射资源N,如果可预取的话 (binary, mmap)
58*6b3672adSYanteng Si       revision		       PCI修订版 (ascii, ro)
59*6b3672adSYanteng Si       rom		           PCI ROM资源,如果存在的话 (binary, ro)
60*6b3672adSYanteng Si       subsystem_device	   PCI子系统设备 (ascii, ro)
61*6b3672adSYanteng Si       subsystem_vendor	   PCI子系统供应商 (ascii, ro)
62*6b3672adSYanteng Si       vendor		       PCI供应商 (ascii, ro)
63*6b3672adSYanteng Si       =================== =====================================================
64*6b3672adSYanteng Si
65*6b3672adSYanteng Si::
66*6b3672adSYanteng Si
67*6b3672adSYanteng Si  ro - 只读文件
68*6b3672adSYanteng Si  rw - 文件是可读和可写的
69*6b3672adSYanteng Si  wo - 只写文件
70*6b3672adSYanteng Si  mmap - 文件是可移动的
71*6b3672adSYanteng Si  ascii - 文件包含ascii文本
72*6b3672adSYanteng Si  binary - 文件包含二进制数据
73*6b3672adSYanteng Si  cpumask - 文件包含一个cpumask类型的
74*6b3672adSYanteng Si
75*6b3672adSYanteng Si.. [1] rw 仅适用于 IORESOURCE_IO(I/O 端口)区域
76*6b3672adSYanteng Si
77*6b3672adSYanteng Si只读文件是信息性的,对它们的写入将被忽略,但 "rom "文件除外。可写文件可以用来在设备上执
78*6b3672adSYanteng Si行操作(例如,改变配置空间,分离设备)。 mmapable文件可以通过偏移量为0的文件的mmap获得,
79*6b3672adSYanteng Si可以用来从用户空间进行实际的设备编程。注意,有些平台不支持某些资源的mmapping,所以一定要
80*6b3672adSYanteng Si检查任何尝试的mmap的返回值。其中最值得注意的是I/O端口资源,它也提供读/写访问。
81*6b3672adSYanteng Si
82*6b3672adSYanteng Sienable "文件提供了一个计数器,表明设备已经被启用了多少次。如果'enable'文件目前返回'4',
83*6b3672adSYanteng Si而一个'1'被呼入它,它将返回'5'。向它呼入一个'0'会减少计数。不过,即使它返回到0,一些初始
84*6b3672adSYanteng Si化可能也不会被逆转。
85*6b3672adSYanteng Si
86*6b3672adSYanteng Sirom "文件很特别,因为它提供了对设备ROM文件的只读访问,如果有的话。然而,它在默认情况下是
87*6b3672adSYanteng Si禁用的,所以应用程序应该在尝试读取调用之前将字符串 "1 "写入该文件以启用它,并在访问之后将
88*6b3672adSYanteng Si"0 "写入该文件以禁用它。请注意,设备必须被启用,才能成功返回数据。如果驱动没有被绑定到设备
89*6b3672adSYanteng Si上,可以使用上面提到的 "enable "文件将其启用。
90*6b3672adSYanteng Si
91*6b3672adSYanteng Siremove "文件是用来移除PCI设备的,通过向该文件写入一个非零的整数。这并不涉及任何形式的热插
92*6b3672adSYanteng Si拔功能,例如关闭设备的电源。该设备被从内核的PCI设备列表中移除,它的sysfs目录被移除,并且该
93*6b3672adSYanteng Si设备将被从任何连接到它的驱动程序中移除。移除PCI根总线是不允许的。
94*6b3672adSYanteng Si
95*6b3672adSYanteng Si通过sysfs访问原有资源
96*6b3672adSYanteng Si---------------------
97*6b3672adSYanteng Si
98*6b3672adSYanteng Si如果底层平台支持的话,传统的I/O端口和ISA内存资源也会在sysfs中提供。它们位于PCI类的层次结构
99*6b3672adSYanteng Si中,例如::
100*6b3672adSYanteng Si
101*6b3672adSYanteng Si	/sys/class/pci_bus/0000:17/
102*6b3672adSYanteng Si	|-- bridge -> ../../../devices/pci0000:17
103*6b3672adSYanteng Si	|-- cpuaffinity
104*6b3672adSYanteng Si	|-- legacy_io
105*6b3672adSYanteng Si	`-- legacy_mem
106*6b3672adSYanteng Si
107*6b3672adSYanteng Silegacy_io文件是一个读/写文件,可以被应用程序用来做传统的端口I/O。应用程序应该打开该文件,寻
108*6b3672adSYanteng Si找所需的端口(例如0x3e8),并进行1、2或4字节的读或写。legacy_mem文件应该被mmapped,其偏移
109*6b3672adSYanteng Si量与所需的内存偏移量相对应,例如0xa0000用于VGA帧缓冲器。然后,应用程序可以简单地解除引用返回
110*6b3672adSYanteng Si的指针(当然是在检查了错误之后)来访问遗留内存空间。
111*6b3672adSYanteng Si
112*6b3672adSYanteng Si支持新平台上的PCI访问
113*6b3672adSYanteng Si---------------------
114*6b3672adSYanteng Si
115*6b3672adSYanteng Si为了支持上述的PCI资源映射,Linux平台代码最好定义ARCH_GENERIC_PCI_MMAP_RESOURCE并使用该
116*6b3672adSYanteng Si功能的通用实现。为了支持通过/proc/bus/pci中的文件实现mmap()的历史接口,平台也可以设置
117*6b3672adSYanteng SiHAVE_PCI_MMAP。
118*6b3672adSYanteng Si
119*6b3672adSYanteng Si另外,设置了 HAVE_PCI_MMAP 的平台可以提供他们自己的 pci_mmap_page_range() 实现,而不是定
120*6b3672adSYanteng Si义 ARCH_GENERIC_PCI_MMAP_RESOURCE。
121*6b3672adSYanteng Si
122*6b3672adSYanteng Si支持PCI资源的写组合映射的平台必须定义arch_can_pci_mmap_wc(),当写组合被允许时,在运行时应
123*6b3672adSYanteng Si评估为非零。支持I/O资源映射的平台同样定义arch_can_pci_mmap_io()。
124*6b3672adSYanteng Si
125*6b3672adSYanteng Si遗留资源由HAVE_PCI_LEGACY定义保护。希望支持遗留功能的平台应该定义它并提供 pci_legacy_read,
126*6b3672adSYanteng Sipci_legacy_write 和 pci_mmap_legacy_page_range 函数。
127