PCIe代码比较分散,X86下PCIe相关代码主要分散在下面目录(其他CPU架构下,大部分都差不多,主要是arch层不太一样)
driver/acpi/pci*
drivers/pci/*
arch/x86/pci/*
(1)Arch PCIe driver:放一些和架构强相关的PCIe的函数实现,X86 CPU对应arch/x86/pci /*.c
(2)ACPI PCIe driver: ACPI扫描时所涉及到的PCIe代码,包括host bridge的解析初始化,PCIe bus的创建,ecam的映射等, 对应drivers/acpi/pci*.c
(3)PCIe core driver: PCIe的子系统核心代码,包括PCIe的枚举流程,资源分配流程,中断流程等,主要对应drivers/pci/*.c
(4)PCIe port bus driver: 是PCIe port的service代码注册的框架代码, 在框架代码之上是四个service主要指的是PCIe dpc/pme/hotplug/aer,对应的是drivers/pci/pcie/*
(5)PCIe EP driver:是EP节点的设备驱动,比如GPU,网卡,NVMe、FC、SAS等。
root@switch2:/boot# ls -l
total 25992
-rw-r--r-- 1 root root 2685171 Sep 24 2020 System.map-3.16.0-5-amd64
-rw-r--r-- 1 root root 158141 Sep 24 2020 config-3.16.0-5-amd64
-rw-r--r-- 1 root root 20626396 Sep 24 2020 initrd.img-3.16.0-5-amd64
-rw-r--r-- 1 root root 3138896 Sep 24 2020 vmlinuz-3.16.0-5-amd64
root@switch2:/boot#
root@switch2:/boot# uname -a
Linux switch2 3.16.0-5-amd64 #1 SMP Debian 3.16.51-3+deb8u1 (2015-12-19) x86_64 GNU/Linux
加载顺序如下:
root@switch2:/boot# cat System.map-3.16.0-5-amd64 | grep pci | grep initcall
ffffffff81a0eab0 t __initcall_pcibus_class_init2
ffffffff81a0eab8 t __initcall_pci_driver_init2
ffffffff81a0eb48 t __initcall_acpi_pci_init3
ffffffff81a0eb68 t __initcall_register_xen_pci_notifier3
ffffffff81a0eb88 t __initcall_pci_arch_init3
ffffffff81a0ec90 t __initcall_pci_slot_init4
ffffffff81a0eca0 t __initcall_acpi_init4
ffffffff81a0ed40 t __initcall_pci_subsys_init4
ffffffff81a0eef8 t __initcall_pcibios_assign_resources5
ffffffff81a0ef28 t __initcall_pci_apply_final_quirks5s
ffffffff81a0ef40 t __initcall_pci_iommu_initrootfs
ffffffff81a0f2b8 t __initcall_pci_proc_init6
ffffffff81a0f2c0 t __initcall_pcie_portdrv_init6
ffffffff81a0f2d0 t __initcall_pcie_pme_service_init6
ffffffff81a0f2e0 t __initcall_pci_hotplug_init6
ffffffff81a0f2e8 t __initcall_pcied_init6
ffffffff81a0f360 t __initcall_platform_pci_module_init6
ffffffff81a0f390 t __initcall_serial_pci_driver_init6
ffffffff81a0f580 t __initcall_pci_resource_alignment_sysfs_init7
ffffffff81a0f588 t __initcall_pci_sysfs_init7
ffffffff81a0f5c8 t __initcall_pci_mmcfg_late_insert_resources7
1、pcibus_class_init
linux\drivers\pci\probe.c
主要目的是注册名字为”pci_bus”的class,并在sys文件系统创建节点
未完,不知道接下来什么时候有时间写了。