做的时候
echo 1 > /sys/bus/pci/slots/[slot number]/power
内核会更改此设备的 PCIe 配置空间的某些(或特定)寄存器中的值吗?
据我了解,当系统(PC)开机时,电源已经提供给 PCIe 设备,但内核仍然可以控制某些插槽的开关(如本文中的 sysfs contorl 命令),是因为内核设置PCIe 配置空间中控制其电源的寄存器?
当我们读取它时,它是否也从插槽控制寄存器中的寄存器读取?
前任:
cat /sys/bus/pci/slots/[slot number]/power
这是我的追踪(如果我错了请告诉我)
power_write_file() https://elixir.bootlin.com/linux/v4.10/source/drivers/pci/hotplug/pci_hotplug_core.c#L95
https://elixir.bootlin.com/linux/v4.10/source/drivers/pci/hotplug/pciehp_core.c#L107
https://elixir.bootlin.com/linux/v4.10/source/drivers/pci/hotplug/pciehp_core.c#L167
https://elixir.bootlin.com/linux/v4.10/source/drivers/pci/hotplug/pciehp_ctrl.c#L135
最后,我们得到:
https://elixir.bootlin.com/linux/v4.10/source/drivers/pci/hotplug/pciehp_hpc.c#L551
https://github.com/torvalds/linux/blob/d01e12dd3f4227f1be5d7c5bffa7b8240787bec1/include/uapi/linux/pci_regs.h#L594
0x0400 ==> 10000000000 # 位 10 == 1 ==> 电源控制器控制寄存器在插槽控制寄存器中为 1(偏移量 18h == 24)
根据关于电源控制器控制寄存器的 PCIe 规范:
因此,答案是肯定的,
内核将更改插槽控制寄存器中的电源控制器控制寄存器。